使用 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
我在 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