If you wanted to set the instruction pointer to a known value, say hex value 4020h, you could jump directly to that address:
jmp 4020h
Or if some memory location, myVariable
, held the value you wanted to store in IP
you could do an indirect jump:
jmp [myVariable]
The result of a jmp (indirect or direct) modifies the instruction pointer.
Reading the instruction pointer is problematic. Position independent code on Linux used to work by using a set of code something like:
call getIP
with
:getIP
mov bx, [sp] ; Read the return address into BX.
ret
For other methods of reading IP, see Stack Overflow: reading IP.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…