на что я смотрю, когда делаю $ esp-0xac?
Регистр $esp
указывает на границу (в памяти) между используемой и неиспользуемой частью стека.На i*86
процессорах стек увеличивается до более низких адресов, поэтому все, что находится выше (по более высоким адресам), $esp
содержит используемую часть стека (локальные переменные, адреса возврата, сохраненные регистры и т. Д.) И все, что находится ниже (по более низким адресам).содержит текущую неиспользуемую часть стека.
Затем команда x/200x $esp-0xac
проверяет содержимое 43 32-битных слов используемого в настоящее время стека и 157 слов неиспользуемой части стека.
Я также видел другие методы, такие как $ esp-0x14, но почему бы не сделать простой $ esp?
$esp-0x14
позволит вам взглянуть на последние 5 использованных словстека.Использование $esp
позволит вам взглянуть на неиспользованную часть стека.Вы могли бы сделать это, но это несколько бессмысленно.
что наиболее часто используется и почему?
Изучение стека полезно, когда вы хотитегде хранится какое-то конкретное значение (например, во время анализа переполнения буфера эксплойта / стека) или при отладке на уровне машинных инструкций.