二进制前置基础

常用寄存器及一些汇编指令

R开头的,64位

E开头的,32位

寄存器 命令
RIP 存放当前执行的指令的地址
RSP 存放当前栈帧的栈顶地址
RBP 存放当前栈帧的栈底地址
RAX 通用寄存器。存放函数返回值
汇编指令 解释
add add rax,0x20 : rax=rax+0x20
sub sub rbp,0x18 : rbp=rbp-0x18
xor xor ebx,ebx : ebx^ebx=0
lea lea rax,[rbp-0x18] : rax=rbp-0x18 (取地址给rax
test test eax,eax : eax&eax // eax=0->0 eax!=0->!0
cmp cmp a1,0x61 : a1-0x61
JE 相等时跳转
JNE 不相等时跳转
push 压栈,eg:push ebp : esp-4,把ebp放入esp指向的地方
pop 弹栈,eg:pop ebp : 把esp指的地方赋值给ebp,esp+4
leave 相当于:mov esp,ebp;pop ebp
ret pop eip
call push eip;jmp func
mov mov a ,b : 将b中的值写入a

gdb调试及常用命令

命令 含义
b * 设置断点
d 删除断点
disable b id 断点失效
enable b id 断点生效
i r 查看寄存器
i b 查看寄存器
c 继续执行到断点,没断点就一直执行下去
r 重新开始执行
start 类似于r,停在main函数的开始
ni 不进入函数体执行
si 进入函数体执行
finish 步出
vmmap 查看内存情况
stack 也是查看寄存器
cyclic 生成指定number长度的字符串
cyclic -l 给出该字符串当前的padding(不好用
distance 计算num1和num2的距离(算padding
set 修改指定地址的值
x/<n/f/u>
表示打印的数量
设定打印格式,参数可为o(八进制),x(十六进制),d(十进制),u(无符号十进制),t(二进制),f(浮点类型),a(地址类型),i(解析成命令并反编译,显示地址上的指令信息),c(字符)和s(字符串)
设定输出长度,b(byte),h(halfword),w(word),giant(8bytes)