Стек изучения с GDB. Что такое x/[n][x] $[reg]?

Я новичок в GDB и как программное обеспечение работает на низком уровне. В настоящее время читаю книгу Джона Эриксона "HACKING the art of expoitation". Я знаю, что такое стек, что такое указатель стека, базовый указатель и т. Д. Я легко могу понять info 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-байтовый сдвиг?

Объясните пожалуйста.

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.

Читайте Мур здесь

Другие вопросы по тегам