C프로그램의 디컴파일
C에 대해서는 아는 바가 없어서 상무님께 여쭤보고 간단하게 기록해둔다.
자바 클래스는 jd gui 등으로 디컴파일을 해서 열어볼 수 있는데, c는 그럴 수 없는지 궁금했다.
컴파일할 때 뒤에 -d 옵션을 주면 디버그를 할 수 있도록 컴파일된다.
만약 해당 옵션을 주지 않는거나, 일반적인 컴파일일 경우에는 해당 파일을 GDB 로 디버그하며 쫓아갈 수 있다. 컴파일된 파일이 관련된 링크의 어드레스 정보를 갖고 있기 때문이다.
상용 배포하는 프로그램이라면 이러한 디컴파일, 디버그가 안되기를 바랄 것이다. 그럴 때 컴파일된 파일에 스트립 명령을 주면 된다.
기존 컴파일된 파일의 바이너리가 상당히 큰데, 이렇게 스트립 명령을 주면 바이너리가 확 줄어든다. 링크 어드레스 정보를 지우기 때문이다.
과거에 mfc 프로그래밍을 할 때 mfc42.dll 이라는 파일이 필요했는데, mfc 내부 로직이 어떻게 돌아가나 궁금할 수가 있다. 그럴 때 mfc42d.dll 파일을 system32 폴더 밑에 갖다놓고 돌리면 로직을 쫓아갈 수 있었다. mfc42.dll 파일은 스트립된 파일이고, mfc42d파일은 디버그용으로 컴파일 시킨 파일이다.