在剥离的ELF可执行文件中设置断点

时间:2011-01-15 06:18:09

标签: gdb reverse-engineering elf disassembly

我有一个ELF 32位动态链接,剥离文件,我想调试。尝试在地址处设置断点时,会显示一条消息,指出未加载符号表。

我的问题是:

  1. 当你说ELF文件是stripped究竟发生了什么?
  2. 如何删除ELF文件?
  3. 是否有可能以某种方式重建符号表?
  4. 是否无法在剥离的可执行文件中在gdb中设置断点?

1 个答案:

答案 0 :(得分:6)

使用gnu binutils工具条从条带手册页中完成剥离ELF:

  

GNU strip丢弃所有符号   对象文件objfile。清单   目标文件可能包括档案。在   必须至少提供一个目标文件。

当你说ELF文件被剥离时究竟发生了什么?

剥离从二进制文件中删除非必要信息。这可能只是调试数据或未导出的符号。

如何剥离ELF文件?

您可以使用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.

是否有可能以某种方式重建符号表?

据我所知,这是不可能的。但是,可以在剥离之前从可执行文件创建一种映射文件,以便保留调试所需的信息。

是否无法在剥离的可执行文件中在gdb中设置断点?

有可能。它只是一个可执行文件 - 剥夺了它的符号名称。但是,由于没有符号,除了具有为您提供地址< - >名称映射的地图文件之外,唯一的事情仍然是在特定地址设置断点。但是,您可以在有问题的可执行文件使用的共享库的任何函数中设置断点。

在地图文件

您可以使用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/