第一节:基本命令
命令 | 介绍 |
---|---|
readelf | 查看elf |
nm | |
hexdump | 查看十六进制 |
strings | |
ldd | 查看库函数的位置 |
objdump | 反编译成汇编 objdump [-d] [file] [-M] [intel] 查看intel下的汇编 |
gcc | [-S] 直接编译成汇编代码 |
ROPgadget | 获取 |
ropper | 效果同ROPgadget |
第二节:gdb
gdb命令 | 介绍 |
---|---|
i | i r :查看寄存器 |
b | 下断点 |
d | 删除断点 |
disable | 断点失效 disable b [id] |
enable | 断点生效 enable b [id] |
disass | 显示汇编代码 |
ni | 步入 |
si | 强制步入 |
finish | 步出 |
x | x/20b $rip 以bit的形式形式20个rip上的内容 |
x/20b | bit查看 |
x/20gx | 16进制查看 |
x/20xb | 16进制 bit查看 |
**x/20i $rip | 显示接下来的20行汇编代码 |
search | 寻找字符串的地址 |
第三节:汇编基础
汇编命令 | 介绍 |
---|---|
rip | 存放当前的执行的指令的地址 |
rsp | 存放当前栈帧的栈顶地址 |
rbp | 存放当前栈帧的栈底地址 |
rax | 通用寄存器-保存函数返回值 |
lea | load effective adderss 现在已经不用lea去取有效地址了 |
lea rax,[rbp-0x18] | rax=rbp-0x18 优点:opcode比较短 |
xor ebx.ebx | 使ebx=0 |
movzx | movzx eax,BYTE PTR [rbp-0x10]:把rbp-0x10地址中存放的数据放入eax中 BYTE代表第一个bit PTR是指针 |
cmp | JCC指令 满足一定条件跳转 |
cmp al,0x61 | 相当于执行了 sub al,0x61 但是不保存减法之后的数据 |
push ebp | esp-4,把ebp放入esp所指位置 |
pop ebp | 把esp所指的地方赋值给ebp,esp+4 |
leave | mov esp,ebp;pop ebp |
ret | pop eip |
call | push eip;jump func |