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