繁体   English   中英

如何在没有调用或跳转的情况下调用ASM中的函数?

[英]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

由于这听起来像是一项家庭作业,所以我不会给您确切的答案,但我会尽力为您指明正确的方向。

您说不能使用jmpcall ,但是函数末尾的ret也会更新程序计数器。 您如何影响将程序计数器更新为的值?

注意您自己的示例代码及其注释:

        ret       # pop the instruction pointer into %rip

ret指令将弹出%rip的数据在哪里?

修复了在%rax中加载地址后,弹出%rbp之后,在ret之前我将%rax压入堆栈的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM