尝试对 64 位汇编的 C 代码进行逆向工程

逆向工程 C 部件 数据库
2021-06-14 06:18:55

这是我正在查看的代码

0x0000000000401048 <+70>:   mov    0x401ba0(,%rax,4),%eax

这是一个包含 15 个整数的数组。只是想知道如何在 gdb 中访问索引 0 到 15

谢谢

3个回答

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