用GDB调试c程序

 gcc -g test.c -o test

set disassembly-flavor intel

 
 gdb的使用
 break    main        设置断点    
 run    运行
 next    单步运行
 p    显示变量
 info b 显示断点信息
 info register 显示寄存器信息
 disass    显示汇编
 print a    显示变量
 print &a    显示这个变量在内存的地址
 print sizeof(a) 显示这个变量占用内存的大小
 用ptype命令查看类型

Ptype也许是我最喜欢的命令了。它告诉你一个C表达式的类型:

(gdb) ptype i

type = int

(gdb) ptype &i

type = int *

(gdb) ptype main

type = int (void)

这意味着,至少在你的机器上,int变量占用4个字节的空间,double占用8个。
使用GDB中的x命令,将会使它变成一个直接测试内存的强大的工具。X命令测量内存开始与一个特定的地址。它配备了一些格式化命令,提供精确的控制来实现你想检查多少字节,以及如何你想将它们打印出来。如果有疑问,在GDB prompt中执行help x。

&操作可以得到一个变量的地址,所以这意味着我们可以用x来执行&i并且来观察i值的原始字节。

(gdb) x/4xb &i

0x7fff5fbff584: 0x39    0x05    0x00    0x00

这个标志表示我想以4 个16进制数,一次一个字节的格式来显示。我已经选择查看4个字节,因为i的内存大小就是4个字节。输出信息中逐字节显示i的原始地址。

一个需要紧记于心的细节是如果在intel机器上的逐字节测试,其字节是按“little-endian”排序的。

一种更能清楚认识到这个特性的方法是赋予i一个更有趣的值,然后重新测试它的内存块:

(gdb) set var i = 0x12345678

(gdb) x/4xb &i

0x7fff5fbff584: 0x78    0x56    0x34    0x12

猜你喜欢

转载自blog.csdn.net/s98/article/details/87084429