Что значит {....} внутри меча [...]? - PullRequest
0 голосов
/ 27 августа 2018

В частности edx, dword [ebp-0x10 {var_14}]

Я понял, что ebp-0x10 - это ebp-16, но почему включен {var_14}, что указывает на -14?

Когда я смотрю в GDB на ebp-16, то, что я ищу, есть, но какое отношение это имеет к -14?

enter image description here

1 Ответ

0 голосов
/ 28 августа 2018

Это просто аннотация, добавленная вашим дизассемблером, чтобы помочь вам отслеживать «именованные» переменные. Возможно, если бы были символы отладки, вы бы получили имена для них, например [ebp-0x10 {passcode}].

Рассматривайте это как комментарий, потому что это все, что есть. [ebp - 0x10] без {} является полным представлением режима адресации.

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


Аннотация frame_offset - 14 к определению в шестнадцатеричном виде. Обратите внимание, что есть один на -2c. Адрес возврата находится в «смещении кадра» 0 в соответствии с теми же аннотациями, а сохраненный EBP - в -4, потому что это традиционный кадр стека, использующий EBP в качестве указателя кадра.

Поскольку это означает, что EBP указывает на сохраненный EBP, смещения от EBP отличаются на 4 от смещений frame_offset. Таким образом, frame_offset - 0x14 есть ebp - 0x10.

...