汇编语言学习2---GNU Debugger (GDB)
学习记录,在汇编语言 ,我们面对的是机器码(以汇编指令形式展现),所以断点要设置在机器码被加载到内存中的位置。
GEF插件使用
安装插件
wget -O ~/.gdbinit-gef.py -q https://gef.blah.cat/pyecho source ~/.gdbinit-gef.py >> ~/.gdbinit
GDB支持第三方插件,GEF是一个专为逆向工程和二进制开发而构建的插件。
GEF学习文档
https://hugsy.github.io/gef/
加载ELF程序
gdb -q ./helloWorld
也可以在编译的过程中使用,下面是一个编译和构建的bash脚本
#!/bin/bashfileName="${1%%.*}"nasm -f elf64 ${fileName}".s"
ld ${fileName}".o" -o ${fileName}
[ "$2" == "-g" ] && gdb -q ${fileName} || ./${fileName}
通过这个脚本,可以快速编译elf可执行文件
./assembler.sh helloWorld.s -g
枚举信息
info functions
得到了_start函数
info variables
可以看到,程序里定义的 message 变量被列出来了和其他一些默认段变量。
反汇编
disas _start
包括内存地址(比如 0x401000)和偏移量(比如 <+0>)