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

posted @ 2019-01-11 17:43  beiweisanshidu  阅读(1634)  评论(0编辑  收藏  举报