[C++] test dword ptr [eax],eax ; probe page. 오류 해결

Programming/C++_C#|2021. 9. 24. 09:34
반응형

 

안녕하세요.

playground입니다.

얼마전에 버그를 찾다가 어쎔블리에서 아래와 같은 곳에서 호출스택이 걸리더라구요.

 

 

; Find next lower page and probe
cs20:
        sub     eax, _PAGESIZE_         ; decrease by PAGESIZE
        test    dword ptr [eax],eax     ; probe page.
        jmp     short cs10

_chkstk endp

        end

 

 

 

찾아보니까 지역변수를 잡을 때 Stack Overflow가 발생되서 생기는 문제더라구요.

Visual Studio로 지역변수를 메모리 잡았을 때 프로젝트에서 예약 설정해둔 스택 메모리 공간이

넘어가서 생기는 문제입니다.

 

 

 

보통 비쥬얼 스튜디오에서 스택 예약공간은 1MB로 잡혀있는데요.

1MB = 1024 * 1024 = 1,048,576 바이트입니다.

위와 같이 지역변수 iArr의 크기가 1MB를 넘어갈때

문제가 발생돼 에러를 발생합니다.

아래는 해결방법입니다.

 


 

1. 스택 예약 공간의 크기는 늘려줍니다.

 

 

속성페이지 - 구성속성 - 링커 - 시스템 - 스택 예약 크기

기본값이 1MB인데 2MB나 원하는 MB로 써주면 됩니다.

단, 바이트로 써줘야됩니다.

(2MB일 경우 2,097,152로 써주면 됩니다.)

 

 

 

 

 

2. 해당 변수를 지역변수가 아닌 전역이나 멤버변수로 뺀다.

 

위 지역변수를 전역이나 멤버변수로 위치를 바꾸면

스택 예약크기 변경 없이도 해결이 됩니다.

 

 

 

 

 

반응형

댓글()