강의정리/Z0FCourse_Re

[x64] C++ 코드 리버싱할 때, printf와 stdout의 차이

우와해커 2020. 1. 22. 14:56

Z0FCourse_ReverseEngineering/Chapter 5 - BasicReversing/5.3 HelloWorld.md

 

C++ 코드 리버싱할 때,

 

std::cout 함수 호출시, C함수의 printf와 모양이 조금 다른데,
이것은 우리가 정의한 함수가 아닌 라이브러리의 함수를 호출하는 것이기 때문이다.
그리고 한번만 호출하면 인라인 기능이 작동된다. (컴파일러가 최적화 시킴)

 

두번째 호출로 KernelBaseDLLInitialize 라이브러리 함수를 호출하는 것을 확인할 수 있는데,
이것은 std::endl (\n 개행)기능을 호출한 것이다.

프로그램에서 std::cout이 두번 이상 호출되면 인라인 기능은 작동하지 않기 때문에 printf와 유사한 형태로 보인다.

 

인라인 기능의 예시

 

최적화 전
int Add(int num1, int num2){
return num1+num2;
}
int main(){
int total = Add(2, 3);
}

 

최적화 후
int main(){
int total = 2 + 3;
}