우리가 Main 함수를 작성할 때, 딱히 정해진 방식이 있는 것은 아니다.
- 메인함수 선언 방식
1. int main()
2. int main(void)
3. int main(int argc, char *argv[], char *envp[])
main함수 원형은 3번과 같이 인자와 환경변수 전달을 같이 받는다.
-컴파일 과정에서의 메인 구성
int main(int argc, char *argv[], char *envp[])
사용자가 어떻게 작성하던 간에 컴파일 과정에서는 원형이 지켜지게 된다.
즉, main 호출은 인자를 3개 전달한다.
CALL 00401000이 이 실행파일의 main 함수이다.
main 함수를 찾지 못하겠을 때 이와 같은 방법이 조금 도움이 될 수 있겠다.
*참고 : Visual Studio 6.0 에서 작성된 실행파일의 Stub 코드
Stub 코드의 흐름을 보고 main() 호출이 어느 지점에서 일어날 지 예측할 수 있다.
ex:) main()함수가 GetCommandLineA() 호출보단 뒤에, exit() 호출보단 앞에 있을 것으로 예측하며
main()함수의 위치를 대략 예상할 수 있다.
'Study > Reversing' 카테고리의 다른 글
CodeEngn Challenge : Basic RCE L15 (0) | 2021.03.30 |
---|---|
Reversing.kr 1번 풀이 (0) | 2021.03.24 |
OllyDBG, 어셈블리어 (0) | 2021.02.04 |
IAT & EAT (0) | 2021.01.25 |
PE 헤더 (0) | 2021.01.24 |