C++프로그래밍/C 와 C++ 기초실습

스택 프레임과 호출스택 (디버그)

season97 2024. 9. 16. 14:23

※ C / C++을 이미 알고 있으나 개인적인 공부를 위해 포스팅 하는 글이므로

C++에 대한 구체적인 정보를 담고 있지 않습니다.

 

ㆍ 스택 영역은 용량이 한정되어있고, 이게 초과되면 스택 오버플로우 발생.

 

※ 디버깅을 해보자 

ㆍ 위 사진같은 코드가 있는데 중단점을 저쯤 찍어두고 디버깅을 돌려보자.

 

ㆍ 어셈블리에선 우리가 찾고싶은 함수에 대한 정보는 없다??

-> 레지스터 창을 열어주자

레지스터 창 여는법

 

ㆍ ESP라고 되어있는게 스택포인터다. ※ 복습 eax ebx... 등등E인건 32비트로 디버깅을 돌리기 때문 (64비트였으면 R)

 

ㆍ 해당 주소를 복사해서 메모리 창을 열어주자

메모리에 스택포인터 주소 복사

ㆍ 메모리에 스택 포인터 주소를 복사해줘서 찍어봤더니 뭔가가 나온다!

 

ㆍ 눈으로 보기 편하게 4바이트 정수로 바꿔주고

ㆍ F11버튼을 통해 하나씩 실행 해보면 3 5 전달 등 함수포인터의 역할이 잘 되고있다.

ㆍ 낮은 주소로 값이 들어간걸 확인할 수 있다.

 

더보기

※ 이런식으로 디버깅을 돌리는 방법만 확인해두고 추후에 더 공부해보도록 하자

 

 

ㆍ 위 과정이 그림과 같은 과정을 디버깅을 통해 확인하는 과정이다.

ㆍ 즉 함수가 동작하는 방식을 그림으로 쉽게 표현해준 그림이다. 

 

->알아야 하는 이유는 프로그램이 크래쉬나고 터졌을때 디버그를 돌려서 어디서 왜 오류가 났는지 판단할 수 있다.


 호출스택

ㆍ 디버그를 돌려서 함수의 호출스택을 확인할 수 있다.

 

더보기

※ 개인적으로 cocos2d-x 공부할 때 많이 제일 많이 해봤던거네 단축키 F10 F11 등등

★ 버그가 났을때 혹은 분석할때 디버그는 매우 중요하다

'C++프로그래밍 > C 와 C++ 기초실습' 카테고리의 다른 글

포인터 연산  (0) 2024.09.17
포인터  (0) 2024.09.17
const와 메모리 구조  (3) 2024.09.16
비트연산과 비트플래그  (1) 2024.09.16
비교연산과 논리연산 (디스어셈블리 디버그)  (0) 2024.09.15