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
