如何在gdb中调用函数(void)

问题描述 投票:0回答:3

我是一个完全的逆向工程初学者。 最近我一直在学习 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中给出“好吧,你得到了这个”输出我尽了最大努力并浏览博客来获得答案,但我最终失败了希望我能得到解决方案并提出建议我缺少什么以及我需要知道它是如何工作的

c++ c gdb void function-call
3个回答
1
投票

您的意思是如何调用

flag()
并跳过
puts
中的
main
?,在这种情况下:

(gdb) break main
(gdb) run
(gdb) print flag()
okay you got this
(gdb) break 10
(gdb) jump 10
(gdb) quit

0
投票

这真的很简单。您只需使用断点和跳转命令即可:

  1. 使用 gdb 运行文件:

    gdb ./<filename>, or ./<python_file> dbg

  2. 设置断点:

    break main

  3. 运行程序:

    run

  4. 使用跳转命令调用任何随机函数:

    jump <function_name>
    (在您的情况下,命令将是
    jump flag


-2
投票

函数

flag
未被调用,并且很可能不会因为不需要而出现在可执行文件中

这就是所谓的死代码消除

© www.soinside.com 2019 - 2024. All rights reserved.