리버스 엔지니어링(Reverse Engineering)
리버싱(Reversing) 또는 역공학이라고 함
어느 특정 물건, 장치의 구조, 기능, 동작을 역으로 분석하는 것
리버싱 종류
정적분석
파일을 실행하지 않고 파일의 종류, 크기 등의 기본적인 내용을 확인하는 것
디스어셈블러를 통해서 내부코드와 그 구조를 확인하는 것
동적방법
파일을 실행하여 동작, 메모리의 변화, 레지스트리, 네트워크 등을 확인하는 것
디버거를 이용하여 프로그램 내부구조와 동작을 분석하는것
프로그램 진입점(Entry Point)
프로그램 시작점
기본적으로 시작지점은 C 런타임 라이브러리의 함수 이름
C언어의 프로그램 시작지점은 int main(void)이고 런타임 라이브러리를 초기화 함
(프로그램 시작 지점 진입전 런타임 라이브러리 초기화)
main은 특수함수
C Run-Time Library(C 러타임 라이브러리)_CRT
각종 C언어의 표준 함수들을 포함하고 있는 라이브러리
단일 스레드
libc.lib
단일 스레드 전용 CRT
멀티 스레드에 비해서 빠름
다일 스레드에 포함된 일부 함수들은 멀티 스레드에서 정상적으로 동작하지 않음
Visual Studio 2005부터는 지원하지 않음
멀티 스레드
libcmt.lib
모든 함수가 멀티 스레드 환경에서도 정상적으로 동작함
멀티 스레드 DLL
msvcrt.lib
멀티 스레드 CRT와 동일
함수들이 별도의 DLL에 존재
(CRT를 공유하는 모듈이 많을 경우 용량을 줄일 수 있음, 별도의 DLL에 CRT함수가 존재하므로 배포시 CRT DLL같이 배포해야함)
main 함수 호출전
main함수 호출전 mainCRTStartup()함수를 거친다
런타임 라이브러리와 관련된 소스 코드를 CRT Startup Code(런타임 시작 코드)라고 함
Visual Studio 런타임 라이브러리 확인 및 선택
프로젝트 속성 - C/C++ - 코드생성 - 런타임 라이브러리
return 0;의 의미
프로그램이 어떤 형태로 종료되었는지(정상적으로, 비정상적으로) 값을 반환하여 알려주는 것
0 - 프로그램이 정상적으로 종료되었음을 알림
0 이외의 값 - 프로그램이 비정상적으로 종료되었음을 알림(코드형식으로 사용할 수 있음)
프로그램을 직접적으로 종료시키는 함수는 exit()
'공부 > C' 카테고리의 다른 글
C_변수(Variable), 상수(Constant) (0) | 2023.03.20 |
---|---|
C_이스케이프 시퀀스(Escape Sequences) (0) | 2023.03.17 |
C_주석(Comments) (0) | 2023.03.17 |
C_여러가지 (0) | 2023.03.13 |
C 언어_출력 (0) | 2020.04.03 |