我想知道我是否可以在8086汇编中操作(读取和更改值)指令指针(IP).
例如,
说IP当前正在存储0200h.我想读取这个值并将其更改为其他内容4020h.我怎么能这样做?
如果要将指令指针设置为已知值,例如十六进制值4020h,则可以直接跳转到该地址:
jmp 4020h
Run Code Online (Sandbox Code Playgroud)
或者,如果某个内存位置myVariable保存了您想要存储的值,则IP可以进行间接跳转:
jmp [myVariable]
Run Code Online (Sandbox Code Playgroud)
jmp(间接或直接)的结果修改指令指针.
读取指令指针是有问题的.Linux上的位置独立代码通常使用一组代码来工作:
call getIP
Run Code Online (Sandbox Code Playgroud)
同
:getIP
mov bx, [sp] ; Read the return address into BX.
ret
Run Code Online (Sandbox Code Playgroud)
有关读取IP的其他方法,请参阅堆栈溢出:读取IP.