我一直在使用gdb-peda来学习调试(不是用于漏洞利用),在运行OS X 10.10的64位Mac Pro上,堆栈跟踪显示每8个字节,如下所示:
0000| 0x7fff5fbff8b0 --> 0x0
0008| 0x7fff5fbff8b8 --> 0x0
0016| 0x7fff5fbff8c0 --> 0x7fff5fbff8e8 --> 0x0
0024| 0x7fff5fbff8c8 --> 0x40e9999a5fc01036
0032| 0x7fff5fbff8d0 --> 0x7fff5fbff8e8 --> 0x0
0040| 0x7fff5fbff8d8 --> 0x7fff8ced25c9 (<start+1>: mov edi,eax)
0048| 0x7fff5fbff8e0 --> 0x7fff8ced25c9 (<start+1>: mov edi,eax)
0056| 0x7fff5fbff8e8 --> 0x0
我已经看到它在不同网站上的几个图片中每行打印4个字节,但是寄存器名称都以&#39; e&#39;在那些照片中,我假设它们在32位模式下运行或在32位机器上运行。
我不了解Python,但我通过peda代码搜索了所有对“堆栈”的引用。或数字4和8或32/64位模式,并且当我更改它时,找不到任何看起来可能或有任何影响的东西。我也无法在网上找到任何有关设置或修改peda的详细说明。我想他们认为你是一个严肃的黑客,应该能够自己解决。
实际上,我必须查看中间的&#39;手动记忆,如下:
gdb-peda$ x/xw 0x7fff5fbff8a4 // 4 bytes in from rbp
0x7fff5fbff8a4: 0x00007fff // showing data which wasn't visible in
// the stack backtrace
(现在这个与0x7fff5fbff8a0的4字节偏移没有任何关系,但有时会有。)
如何让peda显示堆栈的每四个字节?我错过了一些明显或非常迟钝的东西吗?
我想它背后的想法是,在64位模式下,你期望看到8字节(64位)的数据块,所以读取每4个字节意味着读取会重叠(交错?),并且每8个字节读取似乎更有意义。但数据似乎不一定是64位/ 8字节块。我想这取决于帧变量大小等,所以一些数据块仍然以4字节而不是8字节间隔开始。
我不确定我是否在这里做得非常清楚。我是这个领域的初学者,所以请随时纠正我可能犯的任何嚎叫错误!