小摸一下二进制~
寄存器 | 命令 |
---|---|
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 |
命令 | 含义 |
---|---|
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/num<n/f> | |
num | 表示打印的数量 |
n | 设定打印格式,参数可为o(八进制),x(十六进制),d(十进制),u(无符号十进制),t(二进制),f(浮点类型),a(地址类型),i(解析成命令并反编译,显示地址上的指令信息),c(字符)和s(字符串) |
f | 设定输出长度,b(byte),h(halfword),w(word),giant(8bytes) |