在阅读有关程序计数器的内容时,我了解到程序计数器是特殊的,因为没有直接修改其值的方法。
是否有间接访问/修改程序计数器内容的方法?
在阅读有关程序计数器的内容时,我了解到程序计数器是特殊的,因为没有直接修改其值的方法。
是否有间接访问/修改程序计数器内容的方法?
你必须理解,如果你修改了电脑,下一条执行的指令将是在新的PC地址上执行。这只是一个无条件跳转,所有的处理器都有这样的指令。
通常情况下没有LD PC,addr
指令,但这正是JMP addr
所做的,因此不正确的说法是你不能直接修改它的值。 但是你不能修改它的值而不修改代码的执行路径 - 执行将从指定的地址继续。
在大多数情况下,也可以通过间接方式进行修改,例如将堆栈指针设置为包含新地址的位置并调用RET返回指令。
不同的处理器和体系结构可能会以多种方式表现出不同的行为,我提供的指令助记符是“通用”的,不适用于任何特定的指令集。
call
指令和条件跳转也会修改程序计数器。你还可以使用jmp eax
(跳转到EAX指向的地址)和jmp [eax]
(跳转到EAX指向的内存中存储的地址)。在x86上,int
指令类似于call
。有很多方法可以修改程序计数器。 - Jim Mischel