ELF文件调试工具

linux工具

nm

用来列出目标文件(object files)的符号表(symbols)
nm返回的格式, 共3列,分别是”符号在文件里的偏移”,”符号的类型”,”符号名称”。

  • -C : 加上此参数, 会让符号变成”适合阅读”的样式;
  • -A 在每个符号信息的前面打印所在对象文件名称;
  • -l 使用对象文件中的调试信息打印出所在源文件及行号, gcc -g参数可以让打印更为详尽;

objdump

nm的增强版。
objdump -d out:反汇编test中的需要执行指令的那些section;
objdump -x out:以某种分类信息的形式把目标文件的数据组成输出;
objdump -t out:输出目标文件的符号表;
objdump -h out:输出目标文件的所有段概括;
objdump -j ./text/.data -S out: 输出指定段的信息(反汇编源代码);
objdump -S out:输出目标文件的符号表() 当gcc -g时打印更明显;
objdump -j .text -Sl stack1 | more:

  • -S尽可能反汇编出源代码,尤其当编译的时候指定了-g这种调试参数时,效果比较明显。隐含了-d参数。
  • -l用文件名和行号标注相应的目标代码,仅仅和-d、-D或者-r一起使用。使用-ld和使用-d的区别不是很大,在源码级调试的时候有用,要求编译时使用了-g之类的调试编译选项。

objdump /home/ams/Documents/glibc/libc-2.16/src/lib/x86_64-linux-gnu/libc-2.16.so -D -M intel | grep __malloc_hook查看glibc某函数的偏移量。

readelf

用来分析elf文件。
readelf -a file 显示全部信息
readelf -ahW file方便的查看elf文件的布局

ldd

用来分析程序运行时需要依赖的动态库ldd file

ldd获得的libc基址可能存在错误,在gdb中使用info proc mapping可以较为准确的获取libc的基址。

pwngdb

显示内存内容x/10x 0x602000
显示内存内容hexdump 0x602000
显示堆块信息heap -v
显示bin信息bins
显示arena信息arena
修改寄存器set $rbp = 0x10
修改内存set {int}0x602000=0x10
修改libcset environment LD_PRELOAD /lib/x86_64-linux-gnu/libc.so.6
查看libc 基址info proc mapping

🖊gef

显示所有堆块 heap chunks
显示某个堆块 heap chunk 0x602000
显示bins heap bins
显示fastbins heap bins fast
显示smallbins heap bins small
显示largebins heap bins large
显示unsortedbins heap bins unsorted

🔗参考文章

关于不同版本 glibc 更换的一些问题
CTF-PWN常规题个人实战笔记
Gef 使用手册

posted @ 2021-03-30 19:59  HiRose  阅读(477)  评论(0编辑  收藏  举报