【发布时间】:2020-04-28 15:37:43
【问题描述】:
我正在尝试验证共享对象库中函数的功能。在带有 main 函数的程序中,我会简单地 start 程序和 gdb 会自动在 main 上断点,但这显然在这里不可用。
假设我有一些add.c:
long add(long x, long y) {
return x + y;
}
我用 gcc -shared -o libadd.so -fPIC add.c 编译它并将它加载到 GDB 中:
(gdb) file libadd.so
Reading symbols from libadd.so...(no debugging symbols found)...done.
(gdb) start
Function "main" not defined.
Make breakpoint pending on future shared library load? (y or [n])
Starting program: /tmp/minimal/libadd.so
Program received signal SIGSEGV, Segmentation fault.
0x0000000000000001 in ?? ()
我希望能够使用类似于以下的 gdb:
(gdb) file libadd.so
Reading symbols from libadd.so...(no debugging symbols found)...done.
(gdb) call (long)add(5,6)
$1 = 11
但是这个调用的结果是You can't do that without a process to debug。
我可以在 GDB 中调试这样的库吗?
【问题讨论】:
-
很好的规范问题。两者都 +1。
-
@JL2210 昨天我花了 3 到 4 个小时才弄清楚这一点。认为它可能在未来对其他人有用,因为这让我觉得这是一个相当普遍的问题。
-
您现在应该接受自己的答案,以使该问题看起来与问题列表中的答案相同。
标签: c debugging gdb reverse-engineering