none
함수 호출시 호출된 함수에 int형 Local Variable이 있을시 왜 Memory할당이 12Bytes가 되는걸까요?? RRS feed

  • 질문

  • 아래는 main 함수에 int형 변수를 하나 선언했을시의 코드를 수행해 disassembly 한 코드입니다.

    질문이 00413253  sub         esp,0CCh  인데요

    1. 지역변수 선언 없이도 esp가 0XC0을 sub 하는데요. 이건 Intel X86의 Stack 관리 정책인가요??

    2. int형 변수 선언시 esp가 default 대비 4Bytes 가 아닌 12Bytes를 더 감소시키는데요. 4Byte가 아닌 12Byte의 이유가 있는지요?

    void main(void)
    {
    00413250  push        ebp 
    00413251  mov         ebp,esp 
    00413253  sub         esp,0CCh 
    00413259  push        ebx 
    0041325A  push        esi 
    0041325B  push        edi 
    0041325C  lea         edi,[ebp-0CCh] 
    00413262  mov         ecx,33h 
    00413267  mov         eax,0CCCCCCCCh 
    0041326C  rep stos    dword ptr es:[edi] 
        int testVariable = 0x56;
    0041326E  mov         dword ptr [testVariable],56h 


    김순동

    2016년 11월 2일 수요일 오전 5:31

답변

  • 디버그 모드에서의 컴파일 결과를 두고 왜 그런 것인지 분석하는 것은 별로 의미가 없습니다. (컴파일러 제작자에게나 의미가 있습니다.)

    참고로, 스택 공간 내에서의 침범을 확인하기 위한 용도로 Visual C++의 경우 디버거를 위해 저런 코드를 넣어둡니다.

    • 답변으로 표시됨 sundong0724.kim 2016년 11월 8일 화요일 오전 5:04
    2016년 11월 3일 목요일 오전 1:25