2012-02-15 2 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를 입력해야합니다. 네, 스택이 아래로 세우므로 네거티브 val이 의미가 있다는 것을 잊어 버렸습니다. 그리고 저는 서브 esp, 80을 살펴보고 버퍼가 ebp 바로 아래에 할당 된 것을 보았을 것입니다. 그 점을 명확히 해 주셔서 감사합니다. – user1210446

관련 문제