기본적으로 옵티마이징의 차이. 디버그는 최적화를 전혀 안하고 릴리즈는 /O2 가 디폴트 옵션이라 차이가 많이 나지
clas..(175.121)2013-09-29 23:45
그리고 디버그에는 기본적으로 심볼이나 관련 정보 모두 포함되어 있고
clas..(175.121)2013-09-29 23:46
디버깅을 위해서 stack overflow check 라든가 기타 등등에서 SEH 관련 루틴들이 전부 포함되어있고
clas..(175.121)2013-09-29 23:46
하다못해 STL 코드만 봐도 #ifdef 같은걸로(디버그 모드일때만 #define 되는 매크로가 있어서 그걸로 판별) _DEBUG_XX 같은 매크로가 모든 코드에 포함되어 있다
clas..(175.121)2013-09-29 23:47
이런 부분들이 전부 코드를 늘리지
clas..(175.121)2013-09-29 23:47
out_of_range 라든가 여러 예외를 단순히 프로그램 종료되는게 아니라 정확히 어떤 에러인지 친절히 표시까지 해주기 위한 장치들이지
clas..(175.121)2013-09-29 23:47
그래도 역시 가장 큰 차이는 옵티마이징이니까, 실질적으로 자기가 짠 루틴의 코드가 어떻게 달라지는지 비교해보면 여러모로 많은 공부가 됨. 리버스 엔지니어링에 있어서 이건 어쩌면 상당히 중요하기도 한건데 대부분 사실 많이 하진 않고 있지. 나도 vs, gcc 에 대해서 어느 정도만 직접 분석해봤지 clang 이나 llvm c 계열에 대해서는 분석해보지 않았음
windbg 문제가 아니라 그냥 바이너리 디버깅을 해봤냐고 물어야지
디버그 릴리즈의 문제라기보다 그 둘의 디폴트 옵션이 중요하지
기본적으로 옵티마이징의 차이. 디버그는 최적화를 전혀 안하고 릴리즈는 /O2 가 디폴트 옵션이라 차이가 많이 나지
그리고 디버그에는 기본적으로 심볼이나 관련 정보 모두 포함되어 있고
디버깅을 위해서 stack overflow check 라든가 기타 등등에서 SEH 관련 루틴들이 전부 포함되어있고
하다못해 STL 코드만 봐도 #ifdef 같은걸로(디버그 모드일때만 #define 되는 매크로가 있어서 그걸로 판별) _DEBUG_XX 같은 매크로가 모든 코드에 포함되어 있다
이런 부분들이 전부 코드를 늘리지
out_of_range 라든가 여러 예외를 단순히 프로그램 종료되는게 아니라 정확히 어떤 에러인지 친절히 표시까지 해주기 위한 장치들이지
그래도 역시 가장 큰 차이는 옵티마이징이니까, 실질적으로 자기가 짠 루틴의 코드가 어떻게 달라지는지 비교해보면 여러모로 많은 공부가 됨. 리버스 엔지니어링에 있어서 이건 어쩌면 상당히 중요하기도 한건데 대부분 사실 많이 하진 않고 있지. 나도 vs, gcc 에 대해서 어느 정도만 직접 분석해봤지 clang 이나 llvm c 계열에 대해서는 분석해보지 않았음