x86汇编中的缓冲区

时间:2012-02-15 08:37:14

标签: assembly 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设置为负值?

1 个答案:

答案 0 :(得分:2)

它是ebp,而不是edp;它被用来访问esp指向之前的堆栈,然后将 80字节缓冲区放在它上面。然后添加Dst,-80,它指向缓冲区的开始(低字节)。在汇编中没有必要这样做,这些构造是编译器对C代码的再现。