这是我正在查看的代码
0x0000000000401048 <+70>: mov 0x401ba0(,%rax,4),%eax
这是一个包含 15 个整数的数组。只是想知道如何在 gdb 中访问索引 0 到 15
谢谢
这是我正在查看的代码
0x0000000000401048 <+70>: mov 0x401ba0(,%rax,4),%eax
这是一个包含 15 个整数的数组。只是想知道如何在 gdb 中访问索引 0 到 15
谢谢
GDB 允许您使用 C 风格的强制转换,所以只要知道地址,就可以这样做:
(gdb) print/x (int[15])(*0x401ba0)
一个示例输出是:
$1 = {0x5241c031, 0x41535341, 0x41554154, 0x55574156, 0x48e58948, 0x31f0e483, 0x31f631ff, 0xe8c931d2, 0xfffffb08, 0xc0314850, 0x580f0174, 0x7c00f883, 0xec8948c7, 0x415f415d, 0x415d415e}
如果您在寄存器中有数组的地址,您还可以使用相应的变量($eax
等)。
(gdb) dump binary memory dump.raw 0x401ba0 0x401bdc
将内存dump.raw
从地址转储到文件中,0x401ba0
直到地址0x401bdc
另一种选择是检查:
x/nfu <address>
Print memory.
n: How many units to print (default 1).
f: Format character (like „print“).
u: Unit.
Unit is one of:
b: Byte,
h: Half-word (two bytes)
w: Word (four bytes)
g: Giant word (eight bytes)).
读取和写入数组中的 15 个元素:
(gdb) set variable $A = (int*)0x401ba0
(gdb) p $A[0] = 1
...
(gdb) p $A[14]
为了检查它们的当前值,
(gdb) x/15dw $A