使用gdb堆栈地址

时间:2015-12-11 11:00:06

标签: assembly gdb stack memory-address

我使用命令" x / 50gx $ exp"得到了这个十六进制地址。在gdb上:

0xbfffca44:     0xbfffdaa800279ff4      0x0804869008048583
0xbfffca54:     0x00000004bfffcaa0      0x0000000000000000
0xbfffca64:     0x0000000000000000      0x0000000000000000
0xbfffca74:     0x0000000000000000      0x6b63736600000000
0xbfffca84:     0x006369676f6c656d      0x6b63736600000000
0xbfffca94:     0x006369676f6c656d      0x4141414100000000
0xbfffcaa4:     0x4141414141414141      0x0000000041414141
0xbfffcab4:     0x0000000000000000      0x0000000000000000

我想弄清楚41序列的起始地址是什么,但我不知道如何计算它。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

假设这是一个小端机器,每个整数中字节的实际顺序是相反的,因此反转行中的每个整数值:

or

给我们:

0xbfffca94:     0x006369676f6c656d      0x4141414100000000

前41个是从开始的12个(0xc)字节,所以它的地址是0xbfffca94: 6d 65 6c 6f 67 69 63 00 00 00 00 00 41 41 41 41

另外 - 如果您对字节感兴趣,而不是更大的整数,则可以使用不同的格式转储它,例如0xbfffcaa0 (0xbfffca94 + 0xc)