话不多说,需要的小伙伴,往下看,可以跟着我一步步地学习如何使用gdb反汇编。
#include <stdio.h>
#include <locale.h>
#include <iostream>
int main()
{
int i = 3;
int k = ++i + ++i + ++i;
std::cout << k << std::endl;
return 0;
}
~
首先,打开你的vim,输入上面的代码,然后,保存为main.cpp,退出。
然后,输入以下命令:
g++ -g -o test main.cpp
然后,输入以下命令,启动调试:
gdb ./test
先输入如下命令,列出代码:
l
然后设置断点,输入如下命令:
break 6
结果如下:
然后输入如下命令,启动调试:
r
结果如下:
输入命令,执行到第8行代码
n
结果如下:
输入反汇编命令,查看第8行代码的反汇编
disassemble $pc
结果如下:
可以看到,当前汇编代码执行到箭头=>所在位置,输入如下命令,单步执行
ni
结果如下:
输入如下命令,查看rbp的值:
info register rbp
结果如下:
打印上面地址减去8的地址的内容,输入如下命令:
x 0x7fffffffdeb8
结果如下:
通过上面的方法,就可以一步一步查看所有代码的内容,打印命令的格式如下:
x /nfu 地址
n:输出单元的个数
f:可以是下面的值:
x:16进制
t:二进制
o:八进制
d:10进制
u:单元长度,可以是下面的值:
b:代表字节
h:代表双字节
w:代表word,通常是4字节
g:代表八字节