Буфер в сборке x86 - PullRequest
       23

Буфер в сборке x86

1 голос
/ 15 февраля 2012

Может ли кто-нибудь помочь мне объяснить этот код?

.text:00401270 ; int __cdecl main(int argc,const char **argv,const char *envp)
.text:00401270 Dst = byte ptr −80h

...More Code...

.text:00401270 push ebp
.text:00401271 mov ebp, esp
.text:00401273 sub esp, 80h
.text:00401293 push 80h
.text:00401298 push 0
.text:0040129A lea eax, [ebp+Dst]
.text:0040129D push eax
.text:0040129E call _memset

Я получаю, что буфер размера 0x80 создается и заполняется значением 0 при вызове _memset.Однако я не понимаю использование указателя [ebp + Dst].Почему базовый указатель (ebp) вообще задействован?Кроме того, почему для Dst установлено отрицательное значение?

1 Ответ

2 голосов
/ 15 февраля 2012

это ebp, а не edp; он используется для доступа к стеку, где esp указал до 80-байтового буфера. затем добавляется Dst, -80, который указывает на начало (младший байт) буфера. нет необходимости делать это таким образом при сборке, эти конструкции представляют собой компилятор кода C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...