使用 gdb 的堆栈地址

Stack addresses using gdb

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

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序列的起始地址是什么,但我不知道如何计算它。

有人可以帮忙吗?

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

0xbfffca94:     0x006369676f6c656d      0x4141414100000000

给我们:

0xbfffca94:     6d 65 6c 6f 67 69 63 00      00 00 00 00 41 41 41 41

第一个41是从头开始的12(0xc)个字节,所以它的地址是0xbfffcaa0 (0xbfffca94 + 0xc)

此外 - 如果您对字节感兴趣,而不是更大的整数,您可以使用不同的格式转储它,例如x /400bx $esp