使用GDB进行堆栈检查。x / [n] [x] $ [reg]是什么?

谢格利

我是GDB的新手,而且软件是如何在较低水平上工作的。目前,我正在阅读乔恩·埃里克森(Jon Erickson)的著作《黑客技术》。我知道什么是堆栈,什么是堆栈指针,基本指针等。我可以很容易地执行understarndinfo stack命令,但是什么是x/[n][x] $[reg]书中的示例:

0x08048344 <test_function+0>: push ebp  
0x08048345 <test_function+1>: mov ebp,esp  
0x08048347 <test_function+3>: sub esp,0x28  
0x0804834a <test_function+6>: mov DWORD PTR [ebp-12],0x7a69  
0x08048351 <test_function+13>: mov BYTE PTR [ebp-40],0x41  
0x08048355 <test_function+17>: leave  
0x08048356 <test_function+18>: ret  
...  
(gdb) x/16xw $esp  
0xbffff7c0: 0x00000000 0x08049548 0xbffff7d8 0x08048249
0xbffff7d0: 0xb7f9f729 0xb7fd6ff4 0xbffff808 0x080483b9
0xbffff7e0: 0xb7fd6ff4 0xbffff89c 0xbffff808 0x0804838b
0xbffff7f0: 0x00000001 0x00000002 0x00000003 0x00000004

那是什么?据我所知,该命令显示了存储在堆栈中的16个最后一个var的地址。
但是什么0xbffff7c0 0xbffff7d0 0xbffff7ce呢?怎么看?为什么总是有10个字节的移位?

请解释。

Phiber
 0xbffff7c0 is memory address
 0x00000000 0x08049548 0xbffff7d8 0x08048249 is the content of the 0xbffff7c0 in hexa format

一般来说 :

 x/nfu addr 

nfu是所有可选参数,它们指定要显示多少内存以及如何格式化它;addr是一个表达式,提供了您要开始显示内存的地址。如果对nfu使用默认值,则无需键入斜杠“ /”。几个命令为addr设置了方便的默认值。

在这里阅读摩尔

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章