我有一个ELF 32位动态链接,剥离文件,我想调试。尝试在地址处设置断点时,会显示一条消息,指出未加载符号表。
我的问题是:
stripped
究竟发生了什么?答案 0 :(得分:6)
使用gnu binutils工具条从条带手册页中完成剥离ELF:
GNU strip丢弃所有符号 对象文件objfile。清单 目标文件可能包括档案。在 必须至少提供一个目标文件。
剥离从二进制文件中删除非必要信息。这可能只是调试数据或未导出的符号。
您可以使用strip -s yourLittleBinary
之类的条带来剥离二进制文件 - 它将使用剥离版本替换文件。选项-s
告诉strip删除所有符号。条带可以以多种方式操作。再次,从它的手册页:
-R sectionname --remove-section=sectionname Remove any section named sectionname from the output file.
此 选项可能不止一次。请注意使用此 选项 不恰当地可能会使输出文件无法使用。
-s --strip-all Remove all symbols. -g -S -d --strip-debug Remove debugging symbols only. --strip-unneeded Remove all symbols that are not needed for relocation processing.
据我所知,这是不可能的。但是,可以在剥离之前从可执行文件创建一种映射文件,以便保留调试所需的信息。
有可能。它只是一个可执行文件 - 剥夺了它的符号名称。但是,由于没有符号,除了具有为您提供地址< - >名称映射的地图文件之外,唯一的事情仍然是在特定地址设置断点。但是,您可以在有问题的可执行文件使用的共享库的任何函数中设置断点。
您可以使用nm
实用程序
nm -Cn myLittleExecutable > myLittleExecutable.map
这将转储所有符号,C ++ - demangled(选项-C)并按数字排序(选项-n)。
这可能会给你一些想法:http://www.linuxsa.org.au/meetings/reveng-0.2.pdf
GNU binutils docs:http://sourceware.org/binutils/docs-2.21/binutils/index.html
GDB文档:http://www.gnu.org/software/gdb/documentation/