c언어로 작성된 짧은 예제를 디버깅해서 나온 어셈블리어에 대한
void main(int argc, char *argv[])
{
int a = 0;
a = a + 1;
return;
}
이러한 c언어 예제를 컴파일한후 디버깅해서 나온 어셈블리어에 주석을 달아야하는데요
제가 해봤는데 맞는것인지 모르겠습니다.
고수님들의 .. 검토부탁드립니다.
--- C:\My Documents\Cpp1.cpp ----------------------------------------------------------------------------------------------
1: #include<stdio.h>
2:
3: void main(int argc, char *argv[])
4: {
00401010 push ebp ;ebp에 값을 저장
00401011 mov ebp,esp ;ebp의 값을 esp로 이동
00401013 sub esp,44h ;esp - 44h 를 esp로 저장
00401016 push ebx ;?
00401017 push esi ;?
00401018 push edi ;?
00401019 lea edi,[ebp-44h] ;?
0040101C mov ecx,11h ;ecx에 11h 저장
00401021 mov eax,0CCCCCCCCh ;eax에 OCCCCCCCCh 저장
00401026 rep stos dword ptr [edi] ;?
5: int a = 0;
00401028 mov dword ptr [ebp-4],0 ;?
6: a = a + 1;
0040102F mov eax,dword ptr [ebp-4] ;eax에 dword형태로 ptr[ebp-4] 저장
00401032 add eax,1 ;eax 에 1증가
00401035 mov dword ptr [ebp-4],eax ;?
7: return ;
8:
9: }
00401038 pop edi ; edi에서 값을 불러옴
00401039 pop esi ; esi에서 값을 불러옴
0040103A pop ebx ; ebx에서 값을 불러옴
0040103B mov esp,ebp ; esp에 ebp값을 저장
0040103D pop ebp ; ebp에서 값을 불러옴
0040103E ret ; ?
--- No source file -------------
아무래도 거의다 틀렸다고 생각합니다.
이해도 edi esi ebx esp ebp등등이 어떤때에 쓰이는지는 잘모르겠습니다.
완벽한 답이 아니더라도 조언부탁드립니다.
Re: c언어로 작성된 짧은 예제를 디버깅해서 나온 어셈블리어에
용어는 틀릴 수 있습니다.
gcc 에 수반되는 assembler와 Windows debugger에 수반되는 disassembler가 mov 방향이 다릅니다.
---
http://coolengineer.com
댓글 달기