2012-02-15 3 views
1

Может ли кто-нибудь помочь мне объяснить этот код?Буфер в x86 Сборка

.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 

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

ответ

2

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

+0

Упс, предназначенный для ввода ebp. Да, я забыл, что стек построен вниз, поэтому отрицательный val имеет смысл, и я должен был просто посмотреть на sub esp, 80 и увидел бы, что буфер выделяется чуть ниже ebp. Спасибо, что поняли. – user1210446

Смежные вопросы