반응형

_tmain(), main(), wmain()

 

리버싱을 공부할려고 리버싱의 정석책이라고 불리는 "리버싱 핵심원리" 라는 책을 펼쳤다.

 

처음 디버깅하는 프로그램은 우리 모두가 아는 hello world 프로그램이었다.

 

그런데 소스코드를 보니 main함수를 써야 하는데 main함수는 보이지도 않고 대신 _tmain함수가 있었다.

 

나는 궁금해서 바로 구글링을 해봤고 정리하자면 이러하다.

 

-

 

※ _tmain() VS main()

 

C언어로 작성된 모든 프로그램은 프로그램의 시작을 의미하는 함수인 main함수가 존재한다.

 

그렇지만 그 main함수도 Microsoft에서는 확장된 형태의 main함수를 만들었는데 

 

그게 바로 _tmain이다. 그렇다면 _tmain과 main은 뭐가 다를까?

 

main() : C++ standrard 즉, C++ 표준 함수이다.

 

_tmain : Microsoft에서 확장된 형태의 main이다.

 

이 둘의 차이는 멀티 바이트를 사용하냐, 유니코드를 사용하냐로 구분지을 수 있다.

 

좀 더 간략하게 설명하자면 유니코드를 사용하냐 안하냐로 구분지을 수 있다.

 

_tmain함수는 유니코드를 지원하는 프로그램은 컴파일 시 

 

main함수의 와이드 문자 버전인 wmain함수로 바뀌고

 

유니코드를 지원하지 않는 프로그램은 컴파일 시 main함수로 바뀐다고 한다.

 

 

 

다음은 main함수와 _tmain함수 그리고 wmain함수의 원형이다.

 

int main(int argc, char* argv[])

 

int wmain(int argc, wchar_t* argv[])

 

int _tmain(int argc, _TCHAR *argv[])

 

 

그리고 무엇보다도 _tamin함수를 사용하기 위해서는 tchar.h 헤더파일을 포함시켜줘야 한다.

반응형

+ Recent posts