[英]How to call a function in ASM without call or jump?
我目前正在尝试将此函数称为“ super_secret_function”,该函数在文件main.c中的main外部定义。 我正在使用ASM,并且无法使用jmp或调用来达到此“ super_secret_function”。 main内部是一个名为stack_hack的函数,该函数是我能够操纵以更改地址以达到超级机密功能的函数。
使用GDB,我已经能够确定“ super_secret_function”的地址,并通过从函数跳转到它来成功调用它。 如何操纵指针的返回值以返回该地址?
.globl stack_hack
stack_hack:
pushq %rbp # push the base pointer on the stack
movq %rsp, %rbp # move the previous stack pointer to the new base poi
##MyCode
movq $0x00000000004005b4, %rbp
jmp *%rbp
##EndMyCode
movq %rbp, %rsp # move the stack pointer to the base pointer
popq %rbp # pop the base pointer and load it into %rbp
ret # pop the instruction pointer into %rip
由于这听起来像是一项家庭作业,所以我不会给您确切的答案,但我会尽力为您指明正确的方向。
您说不能使用jmp
或call
,但是函数末尾的ret
也会更新程序计数器。 您如何影响将程序计数器更新为的值?
注意您自己的示例代码及其注释:
ret # pop the instruction pointer into %rip
ret指令将弹出%rip的数据在哪里?
修复了在%rax中加载地址后,弹出%rbp之后,在ret之前我将%rax压入堆栈的问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.