GDB基本使用及pwn常用命令

i r查看寄存器

image-20241231155811614

start 运行程序,停在 main 函数的第一行

run 从程序的入口点开始执行,并会一直运行,直到.程序正常结束。

b main ,b *(0xdsds)设置断点

i b查看断点,d main删除断电,disable b 2,让断点失效。enable b 3

image-20241231160905631

si会进入xx方法实现的里面

ni是下一步。finish步出

c继续

image-20241231161159178

image-20241231165234278

  1. 显示从地址0x100开始的10个十六进制数:x/10x 0x100

  2. 显示从寄存器$rax开始的4个无符号十进制数:x/4uw $rax

  3. 显示字符数组str的内容,直到遇到’\0’结束:x/s str

image-20241231165702673

  1. x/20g $rbp-0x20:这个命令表示从地址$rbp-0x20开始,以十六进制格式打印20个g大小的内存单元。这里的g通常代表8字节(64位)的巨量(giant word)。所以它会打印20个8字节的值,总共160字节的数据。这种格式通常用于查看较大数值或指针地址(在64位系统上指针也是8字节)。

  2. x/20b $rbp-0x20:这个命令表示从地址$rbp-0x20开始,以十六进制格式打印20个b大小的内存单元。这里的b代表字节(byte)。因此它会打印20个1字节的值,总共20字节的数据。这种格式常用于查看单个字节的内容,比如字符数据或者要逐字节分析的二进制数据。

  3. x/20i含义:这个命令表示从指定地址开始,以指令的形式显示接下来的20条汇编指令

  4. x/20s含义:该命令表示从指定地址开始,以字符串的形式显示接下来的20个字符串项。

  5. 命令 x/20gx 0x404018 是 GDB 调试器中用于检查内存内容的指令,具体含义如下:

    • x:这是 examine(检查)命令的缩写,用来查看内存中的数据。
    • /20g:这部分指定了要显示的数据项的数量和格式。其中 20 表示要显示20个数据项,g 表示每个数据项是64位巨量(giant word),即8字节的数据。所以总共会显示20 * 8 = 160字节的数据。
    • x:这里的 x 指定输出格式为十六进制(hexadecimal)。这意味着每个8字节的数据将被解释并以十六进制的形式显示。
    • 0x404018:这是你想要检查的起始内存地址。它是一个具体的内存位置,从这里开始读取数据。

    因此,x/20gx 0x404018 的意思是:从内存地址 0x404018 开始,以十六进制格式显示接下来的20个8字节(64位)的数据值。这对于查看指针、长整数或其他占用8字节空间的数据类型非常有用,尤其是在调试涉及64位架构的程序时。

查看内存使用情况:

1
2
ps -a|grep questio	
cat /proc/10679/maps

file xx查看文件

ldd查看库函数位置

image-20241231153725581

objdump 是一个强大的 二进制分析工具,它用于反汇编查看二进制文件的内容。主要用于分析可执行文件、目标文件、库文件(如 .so)以及其他二进制格式文件(如 ELF、PE 等)。

1
objdump -d  xxx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
objdump -t filename
# 可以查看程序中使用到的函数,查看是否使用一些危险函数
objdump -t .text 3.exe |grep read
# 可以查看是否使用某一个特定的函数
objdump -d filename
# 查看程序中函数的汇编代码
objdump -d -M intel 3.exe
# 可以采用这条命令把它换为因特尔格式的汇编
objdump -d -j .plt filename
# 可以使用这条命令查看可以利用的函数
objdump -R filename
# 可以使用这条命令查看对应 got 表

# 溢出的话,一般会调用system函数,我们可以通过查看是否存在这些函数的反汇编,来判断,
# 如下,找出了system函数的地址
objdump -d -M intel file|grep system
#利用objdump来找system函数
objdump -d 0 | grep system