gdb call 函数调用

在 gdb 里可以用 call 命令来调用函数,跟代码里调用效果是一样的。在任一断点处都可以用 call 来调用函数,但不知是否需要debug 信息来支持,我这里实际操作的都是带debug信息的程序。首先打一个断点,如:

当断点触发时,我们可以用 call function 来看一个这个函数的原型,如:

其实如果我们要用call 来调用函数,我们是应该先知道该函数原型的,且知道函数的作用的,同时了解哪人是入参,哪个是出参。所以我要调用这个函数时,因为有两个指针参数,我打断点的这个函数里也没有可以直接用的变量,所以用 call malloc 来申请内存变量,如:

申请的内存变量为 $12,具体申请的大小,根据结构体参数大小而定。因为入参需要有数据,所以这里就需要强制转换,并且赋值。而出参也是需要一个指针变量的,所以也申请了一个临时变量:

申请的出参变量的大小也是根据结构体变量来定,可以申请比期望的大,如 call malloc(128) ,其实我只需要 24 字节。申请成功后,直接调用,返回值为 0 表示函数执行成功了,同时出参 $13 里保存了想要的数据,然后就可以转换成结构体查看数据内容了。

相关推荐
Zevalin爱灰灰4 天前
JTAG/SWD是什么
gdb·调试
ttkwzyttk17 天前
GDB TUI窗口管理
gdb
ttkwzyttk17 天前
GDB观察点与捕获点使用
gdb
ttkwzyttk23 天前
GDB函数调用栈管理
gdb
ttkwzyttk23 天前
GDB调试变量、内存与寄存器查看与修改
gdb
ttkwzyttk24 天前
GDB调试简介与调试配置
gdb
modelmd1 个月前
GDB 摘要
gdb
源分享1 个月前
GDB下载和安装保姆级教程
gdb
modelmd2 个月前
翻译 GDB 官方文档
gdb
kidwjb2 个月前
一次多进程信号量同步失效的排查实录
gdb·进程通信·信号量