objdump&gdb-peda调试
objdump&gdb-peda调试
一、前言:
熟悉一下简单的调试工具。
二、代码:
#include<stdlib.h>
#include<stdio.h>
int func(int a){
printf("%d\n",a);
return 0;
}
int main(){
printf("hello,world\n");
func(100);
return 0;
}
三、objdump静态调试:
1、objdump -f test:显示文件头信息
2、objdump -d test :反汇编中需要执行指令的部分
汇编指令:
push:压入栈
mov: mov a,b 将b值送给a值
sub:减法算术运算指令
lea、lds、les: LEA r,m LDS r,m LES r,m 取地址至寄存器
callq:调用子程序
leaveq:将EBP寄存器的内容复制到ESP寄存器
retq:返回主程序
pop:弹出栈
xchg:交换字或字节
3、 objdump -D test:反汇编中所有的部分
4、objdump -h test 显示文件的部分头部信息
5、objdump -x test 显示文件的全部头部信息
6、objdump -s test 显示文件的全部头部信息,和对应的十六进制代码
7、objdump -T test 查看调用的函数
8、objdump -R test 查看函数的got表的值
四、gdp-peda动态调试:
1、加载:
1 gdb ./test
2、在main函数下断点:
1 gdb-peda$ b main
2 Breakpoint 1 at 0x555555555171
3、重新运行:
1 gdb-peda$ r
PS:继续运行
1 gdb-peda$ c
4、单步步过:
1 gdb-peda$ ni
5、单步步入:
1 gdb-peda$ si
6、运行至函数刚结束处:
1 gdb-peda$ fini
7、查看当前栈帧:
1 gdb-peda$ bt
2 gdb-peda$ info f
3 gdb-peda$ stack
8、查看运行上下文:
1 gdb-peda$ context
9、查看虚拟地址分布:
1 gdb-peda$ vmmap
10、 强制函数调用:
1 call func
五、参考:
https://www.cnblogs.com/liuyimin/p/7344439.html
https://www.cnblogs.com/DismalSnail/p/8743466.html
https://blog.csdn.net/bjbz_cxy/article/details/79467688