调试时如何调用函数

逆向工程 艾达 数据库
2021-06-26 22:57:37

当我使用 gdb-server 和 Ida 调试远程进程,并在代码中放置断点时,当进程在此断点处停止时,我如何调用函数,然后返回到我的代码?

2个回答

在 IDA 中,您可以使用Appcall 功能

在 GDB 中,可以使用printcall命令:https : //sourceware.org/gdb/onlinedocs/gdb/Calling.html

(这仅在使用实际gdb程序时有效)

在汇编中,不再有真正的自包含函数(如在 C++ 等编程语言中)。尤其是局部变量和参数的概念并不真正存在。相反,所有内容都存储在寄存器或堆栈中。现在假设有一种方法来调用一个函数(我稍后会谈到它是如何可能的),你可能会冒着覆盖其他东西使用的寄存器的风险。这样做会导致数据损坏,并且您可能会面临程序产生意外结果的风险。参数也存储在特定寄存器或堆栈中,因此您可能需要修改它们。

现在,当您确定函数并预加载所有寄存器并准备好堆栈时,您需要做的就是将指令指针更改为要运行的函数,执行它并在完成后将指令指针设置回原位.