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

时间:2017-02-03 21:08:43

标签: c gdb

我是GDB的新手,以及软件如何在低级别上运行。 目前我正在阅读Jon Erickson所着的书“HACKING the expoitation of the expoitation”。 我知道什么是堆栈,什么是堆栈指针,基指针等等。我可以轻松地查找void release() { if( BOOST_SP_INTERLOCKED_DECREMENT( &use_count_ ) == 0 ) //Here { dispose(); weak_release(); } } 命令,但什么是info stack? 书中的例子:

x/[n][x] $[reg]
那是什么?据我所知,此命令显示存储在堆栈中的16个最后var的地址 但是什么是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 ?怎么看?为什么总是有10个字节的移位?

请解释。

1 个答案:

答案 0 :(得分:1)

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

一般来说:

 x/nfu addr 
  

n f u 都是可选参数,用于指定要显示的内存量以及格式化方式; addr 是一个表达式   给出要开始显示内存的地址。如果你   使用nfu的默认值,你不需要键入斜杠`/'。一些   命令为addr设置了方便的默认值。

阅读摩尔here