2012-02-15 8 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 

サイズが0x80のバッファが作成され、_memsetが呼び出されると値が0で埋められます。しかし私はポインタ[ebp + Dst]の使い方を理解していません。基本ポインタ(ebp)が全く関与しているのはなぜですか?さらに、Dstが負の値に設定されているのはなぜですか?

答えて

2

edpではなくebpです。スタックにアクセスするために使用されています。ここでは、の前には、の80バイトのバッファが置かれています。バッファの先頭(下位バイト)を指すDst、-80が追加されます。アセンブリでこのようにする必要はありませんが、これらの構文はコンパイラのCコードの解釈です。

+0

これは、ebpと入力するためのものです。うん、私はちょっとスタックが下向きに作られていることを忘れていますので、負の値が意味をなさないので、ちょうどsub esp、80を見て、バッファがebpの直下に割り当てられているのを見てください。それを明確にしてくれてありがとう。 – user1210446

関連する問題