我是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个字节的移位?
请解释。
答案 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