호출 스택

CJB_ny·2022년 8월 2일
0

C++ 정리

목록 보기
27/95
post-thumbnail
post-custom-banner

호출 스택

컴파일 에러 ❗

지금 Func1부터 호출을 하면 에러가 난다.

이유는 CPP같은 경우 코드를 위에서부터 아래로 하나씩 하나씩

분석을 한다고 보면된다.

지금Func1을 분석을 했는데

Func2를 호출하라고 하니까 모르는 것이다... => 식별자 에러!

그래서 먼저 "전방 선언" 하든가 다른 방법있으면 다른 방법 쓰든가..

아니면 이렇게 거꾸로 선언 해주면 정상적으로 잘 된다.

함수 호출 어셈블리 ❗

어셈블리 언어를 볼때 먼저 Func2를 호출하기 위해서 먼저 만들어 주는 부분이...

push 1, push 2 하고나서

call Func2() 를 한다.

이렇게 일련의 코드를 만들어 주어야 하는데

push하는 것까지는 무리 없이 만들어지는데

"call Func2"라는 부분 => 어딘가로 이동을 해야한다는 부분을 만들어

주어야지만 어디로 어디로 타고타고 들어가는데

Func2 가 위치한 주소로 가가지고 함수를 실행할 수 있게 된다.

그래서 Func2라는 녀석의 "존재"에 대해서는 반드시 알아야 한다는 것이다.

그래서 모두가 동의하게끔 "위치"가 중요하다.

함수 선언

구현부는 관심이 없고 먼저 전방선언 해버린다.

(C#은 어디든지 만들어도 잘 찾아준다)

이렇게만 만들어줘도 됨. (근데 가독성은?)

호출스택이란?

Func1에서도 Func2, Func3를 호출할 수 있을 텐데

나중에 함수가 많아지면

Func3가 호출이 되었는데 어디에서부터 호출 되었는지 찾기가 힘들다...

=>

반환 주소값을 오른쪽에서부터 타고타고 들어가면 찾을 수 있다.

그래서 대부분의 디버거에서

호출 스택 보여준다.

이게 지금 어떤 경로를 통해서 왔는지 보여주는 것이다.

profile
https://cjbworld.tistory.com/ <- 이사중
post-custom-banner

0개의 댓글