剥离 ELF 是使用 gnu binutils 工具 strip 完成的,来自 strip 手册页:
GNU strip 丢弃所有符号
目标文件 objfile.名单
目标文件可能包括档案。在
必须至少给出一个目标文件。
当你说 ELF 文件被剥离时到底发生了什么?
剥离会从二进制文件中删除不必要的信息。这可能只是调试数据或未导出的符号。
如何剥离 ELF 文件?
您可以使用 strip 来剥离二进制文件strip -s yourLittleBinary
- 这将用精简版本替换该文件。选项-s
告诉 strip 删除所有符号。 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.
是否可以以某种方式重建符号表?
据我所知,这是不可能的。然而,可以在剥离之前从可执行文件创建一种映射文件,以便保留调试所需的信息。
是否无法在 gdb 中对剥离的可执行文件设置断点?
有可能的。它只是一个可执行文件 - 去掉了它的符号名称。然而,由于没有符号,唯一剩下的就是在特定地址处设置断点(除了为您提供地址 名称映射的映射文件之外)。但是,您可以在相关可执行文件使用的共享库的任何函数处设置断点。
在地图文件上
您可以使用以下命令从可执行文件创建映射文件nm
公用事业:
nm -Cn myLittleExecutable > myLittleExecutable.map
这将转储所有符号、C++ 分解(选项 -C)并按数字排序(选项 -n)。
Links
这可能会给你一些想法:http://www.linuxsa.org.au/meetings/reveng-0.2.pdf http://www.linuxsa.org.au/meetings/reveng-0.2.pdf
GNU binutils 文档:http://sourceware.org/binutils/docs-2.21/binutils/index.html http://sourceware.org/binutils/docs-2.21/binutils/index.html
GDB文档:http://www.gnu.org/software/gdb/documentation/ http://www.gnu.org/software/gdb/documentation/