代替x86汇编'call'指令?

ric*_*ick 17 x86 assembly call

x86调用指令有哪些替代方案?也许类似于推送返回地址然后跳转?

他们也是获取内存当前位置的命令吗?

Jes*_*mos 20

例如,CALL实际上是为你做的

CALL my_func
Run Code Online (Sandbox Code Playgroud)

会做点什么的

push ret_address
jmp my_func
Run Code Online (Sandbox Code Playgroud)

在某种意义上,后续的RET调用只会使用刚刚推送到JMP的地址.是否有特定原因导致您不想使用CALL或者它不适合您?对于内存中的当前位置,您可以尝试读取EIP寄存器(无法写入).

  • 你**可以**写入EIP寄存器,该指令不是MOV而是JMP. (8认同)

Spy*_*ros 6

您只需将dword值和jmp推送到该过程即可.推送将是返回地址:

push return_address (push eax if address in eax)
jmp call_address
Run Code Online (Sandbox Code Playgroud)

如果存在针对该特定调用的参数,请记住也推送参数.

目前在记忆中的位置是什么意思?我想你的意思是当前的指令指针.您不能直接获得它,但是您可以使用seh处理程序(结构化异常处理程序)在导致处理异常时获取该值.