首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用gdb调试链接库中的函数时遇到问题

使用gdb调试链接库中的函数时遇到问题
EN

Stack Overflow用户
提问于 2017-11-25 10:52:24
回答 1查看 591关注 0票数 1

我正在阅读一些关于gdb的资料,但我在让gdb (我运行的是7.11.1)从库中调试函数时遇到了问题。

用于了解调试器的示例代码非常简单:

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>

int main() {
    char str_a[20];

    strcpy(str_a, "Hello, world!\n");
    printf(str_a);
}

我编译它时启用了调试符号,启动了GDB,并设置了一些断点:

代码语言:javascript
复制
(gdb) list
1   #include <stdio.h>
2   #include <string.h>
3   
4   int main() {
5       char str_a[20];
6   
7       strcpy(str_a, "Hello, world!\n");
8       printf(str_a);
9   }
(gdb) break 7
Breakpoint 1 at 0x4005ad: file char_array2.c, line 7.
(gdb) break strcpy
Function "strcpy" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 2 (strcpy) pending.
(gdb) break 8
Breakpoint 3 at 0x4005cf: file char_array2.c, line 8.
(gdb) run
Starting program: /home/david/hacking_the_art_of_exploitation/Chapter_2/char_array2 

Breakpoint 1, main () at char_array2.c:7
7       strcpy(str_a, "Hello, world!\n");
(gdb) continue
Continuing.

Breakpoint 3, main () at char_array2.c:8
8       printf(str_a);
(gdb) continue
Continuing.
Hello, world!
[Inferior 1 (process 7061) exited normally]

如您所见,调试器永远不会深入到strcpy函数。

我尝试将set stop-on-solib-events 1添加到我的.gdbinit中。这会导致不同但仍然不受欢迎的结果:

代码语言:javascript
复制
(gdb) run
Starting program: /home/david/hacking_the_art_of_exploitation/Chapter_2/char_array2 
Stopped due to shared library event (no libraries added or removed)

我有点不知所措。提前感谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2017-11-25 18:28:59

我相信您需要libc-dbg包和libc源码包来调试libc函数。在Ubuntu上,你可以通过

代码语言:javascript
复制
sudo apt-get install libc6-dbg
mkdir ~/libc ; cd ~/libc
apt-get source libc6
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47482211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档