<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /root/ctest/printf...(no debugging symbols found)...done.
(gdb) disas main
Dump of assembler code for function main:
0x0000000000400498 <main+0>: push %rbp
0x0000000000400499 <main+1>: mov %rsp,%rbp
0x000000000040049c <main+4>: sub $0x10,%rsp
当没有加载调试符号时,gdb 如何解释 main
?
最佳答案
GDB 不会“解释”main
。
如果您的问题是“GDB 如何知道 main 在哪里”,答案是:“因为它的地址在符号表中”(参见 nm/root/ctest/printf
的输出) .在 UNIX(与 Windows 不同)上,不需要调试符号在可执行文件(或共享库)中具有函数和全局变量名称——默认情况下会保留它们(以使调试更容易)。如果你想隐藏你的 main
,你可以运行 strip printf
从可执行文件中删除它(和所有其他符号)。
对于你的第二个问题,main
没有被破坏,因为它有 extern "C"
链接。它必须具有该链接,以便可以从程序集调用它(它由 C 运行时启动调用,通常是 crt1.o
)。
关于c - 没有加载调试符号时,gdb 如何解释 `main`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5931558/