Адреса памяти

Я работаю над Overthewire narnia2 (игра ctf). В настоящее время я учусь использовать GDB, и у меня есть простой вопрос.

    (gdb) x/200x $esp-0xac
0xffffd5a4: 0x08048534  0xffffd5c8  0xf7e5b7d0  0xffffd5c8
0xffffd5b4: 0xf7ffd920  0xf7e5b7d5  0x08048494  0x08048534
0xffffd5c4: 0xffffd5c8  0x6850c031  0x68732f2f  0x69622f68
0xffffd5d4: 0x50e3896e  0x89e18953  0xcd0bb0c2  0x41414180
0xffffd5e4: 0x41414141  0x41414141  0x41414141  0x41414141
0xffffd5f4: 0x41414141  0x41414141  0x41414141  0x41414141
0xffffd604: 0x41414141  0x41414141  0x41414141  0x41414141
0xffffd614: 0x41414141  0x41414141  0x41414141  0x41414141
0xffffd624: 0x41414141  0x41414141  0x41414141  0x41414141
0xffffd634: 0x41414141  0x41414141  0x41414141  0x41414141
0xffffd644: 0x41414141  0x62626262  0xf7e2a200  0x00000002
0xffffd654: 0xffffd6e4  0xffffd6f0  0x00000000  0x00000000
0xffffd664: 0x00000000  0xf7fc5000  0xf7ffdc0c  0xf7ffd000
0xffffd674: 0x00000000  0x00000002  0xf7fc5000  0x00000000
0xffffd684: 0x59e07c0a  0x6308501a  0x00000000  0x00000000



    (gdb) x/200x $esp

0xffffd7a0: 0x000036b2  0x0000000e  0x000036b2  0x00000017
0xffffd7b0: 0x00000001  0x00000019  0xffffd7eb  0x0000001a
0xffffd7c0: 0x00000000  0x0000001f  0xffffdfe8  0x0000000f
0xffffd7d0: 0xffffd7fb  0x00000000  0x00000000  0x00000000
0xffffd7e0: 0x00000000  0x00000000  0x8b000000  0xb1cfbc04
0xffffd7f0: 0x91563e77  0xcb1ff506  0x6957e20c  0x00363836
0xffffd800: 0x00000000  0x00000000  0x00000000  0x72616e2f
0xffffd810: 0x2f61696e  0x6e72616e  0x00326169  0x41414141
0xffffd820: 0x41414141  0x41414141  0x41414141  0x41414141
0xffffd830: 0x41414141  0x41414141  0x41414141  0x41414141
0xffffd840: 0x41414141  0x41414141  0x41414141  0x41414141
0xffffd850: 0x41414141  0x41414141  0x41414141  0x41414141
0xffffd860: 0x41414141  0x41414141  0x41414141  0x41414141
0xffffd870: 0x41414141  0x41414141  0x41414141  0x41414141
0xffffd880: 0x41414141  0x31414141  0x2f6850c0  0x6868732f
0xffffd890: 0x6e69622f  0x5350e389  0xc289e189  0x80cd0bb0

на что я смотрю, когда делаю $ esp-0xac? Я также видел другие методы, такие как $ esp-0x14, но почему бы не использовать простой $ esp? что наиболее часто используется и почему?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
295
1

Ответы 1

what am i looking at when i do $esp-0xac?

Регистр $esp указывает на границу (в памяти) между используемой и неиспользуемой частью стека. На процессорах i*86 стек увеличивается до более низких адресов, поэтому все, что выше (по более высоким адресам), $esp содержит используемую часть стека (локальные переменные, адреса возврата, сохраненные регистры и т. д.), А все, что ниже (по более низким адресам), содержит неиспользуемую часть В настоящее время стека.

Затем команда x/200x $esp-0xac проверяет содержимое 43 32-битных слов текущего используемого стека и 157 слов неиспользуемой части стека.

ive also seen other methods like $esp-0x14, but why not do plain $esp?

$esp-0x14 позволит вам просмотреть 5 последних использованных слов в стеке. Использование $esp позволит вам посмотреть на неиспользуемую часть стека. Вы, мог, делаете это, но это бессмысленно.

what is the most used and why?

Изучение стека полезно, когда вы хотите, где хранится какое-то конкретное значение (например, во время анализа переполнения буфера эксплойта / стека) или когда вы отлаживаете на уровне машинных инструкций.

Очень полезно. Большое спасибо за эту ясность.

Joel alexis 24.11.2018 22:45

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