[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. 해당 변수를 지역변수가 아닌 전역이나 멤버변수로 뺀다.
위 지역변수를 전역이나 멤버변수로 위치를 바꾸면
스택 예약크기 변경 없이도 해결이 됩니다.
반응형
'Programming > C++_C#' 카테고리의 다른 글
[C++] friend 클래스 / 함수 (0) | 2022.09.09 |
---|---|
[c++] LPCTSTR -> LPTSTR 변환 (0) | 2022.09.08 |
[C++] priority_queue (오름차순/내림차순 큐) (0) | 2021.08.31 |
[C++] string 기능 - substr/find/rfind (0) | 2021.03.30 |
[C++] C++ 코드로 Windows버전 알아오는 방법 (0) | 2020.07.19 |
댓글()