0%

简简单单的记录一下gdb的亿点点常用的操作

.

gdb操作:


gdb ./xxx

开始调试xxx程序,如果不能运行,需要先 chmod +x ./xxx


gdb attach [pid]

通过程序id即pid,gdb附加到一个正在运行的程序,并对其进行调试


start

运行程序并断点在第一条指令

输出寄存器,反汇编等信息


list

有源码的情况下 输出源码

1
2
3
4
5
6
7
8
9
10
11
12
pwndbg> list
warning: Source file is more recent than executable.
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<unistd.h>
4 int main(){
5 char num='0';
6 char str[10];
7 read(0,str,0x10);
8 if(num=='1'){
9 puts("great.\n");
10 fflush(stdout);

b *内存地址

在内存地址处下断点


b 函数名/*函数名

下断点

1
2
pwndbg> b main
Breakpoint 1 at 0x80484dc: file pwn05_char[]_overflow.cpp, line 5.

info b

查看断点信息

1
2
3
pwndbg> info b
Num Type Disp Enb Address What
1 breakpoint keep y 0x080484dc in main() at pwn05_char[]_overflow.cpp:5

step

step(in),步入,在有源码调试时,执行下一行源码,有函数调用时进入函数调用


next

步过,在有源码调试时,执行下一行源码,有函数调用时执行完函数并执行到函数调用的下一行


nexti/ni

next instruction,步过,执行下一行汇编指令


stepi/si

step into,步入,执行下一行汇编指令,如果有函数调用时进入函数的第一行汇编指令


finish

运行完当前的函数,停在最后一句汇编代码


info registers

寄存器信息


x/<n/f/u> <addr>

格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
f格式:
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。

u格式:
b表示单字节
h表示双字节
w表示四字节
g表示八字节。

一些GDB参考链接:

https://blog.csdn.net/tzshlyt/article/details/53668885

https://www.jianshu.com/p/b7896e9afeb7

https://blog.csdn.net/u013525455/article/details/52813637

https://www.jianshu.com/p/e6af28e2566f

https://www.cnblogs.com/xiaoshiwang/p/10755199.html

https://www.cnblogs.com/xsln/p/gdb_instructions1.html

https://man.linuxde.net/gdb

https://www.cnblogs.com/tangtangde12580/p/8045980.html

https://www.cnblogs.com/zhoug2020/p/7283169.html

https://www.jianshu.com/p/adcf474f5561

https://blog.csdn.net/songchuwang1868/article/details/86132281

坚持原创技术分享,您的支持将鼓励我继续创作!