我是一个完全的逆向工程初学者。 最近我一直在学习 gdb 以及如何调试程序。
我很怀疑这是否是一个简单的问题
#include <stdio.h>
#include <stdlib.h>
int flag(void){
puts("okay you got this");
}
int main(void){
puts("nope try again");
}
所以我成功编译了这个程序,当我尝试运行这个程序时,它给了我主函数输出
nope try again
那么现在我如何调用标志函数来在gdb中给出“好吧,你得到了这个”输出我尽了最大努力并浏览博客来获得答案,但我最终失败了希望我能得到解决方案并提出建议我缺少什么以及我需要知道它是如何工作的
您的意思是如何调用
flag()
并跳过puts
中的main
?,在这种情况下:
(gdb) break main
(gdb) run
(gdb) print flag()
okay you got this
(gdb) break 10
(gdb) jump 10
(gdb) quit
这真的很简单。您只需使用断点和跳转命令即可:
使用 gdb 运行文件:
gdb ./<filename>, or ./<python_file> dbg
设置断点:
break main
运行程序:
run
使用跳转命令调用任何随机函数:
jump <function_name>
(在您的情况下,命令将是jump flag
)
函数
flag
未被调用,并且很可能不会因为不需要而出现在可执行文件中
这就是所谓的死代码消除