본문 바로가기

TIL/잡다한

[코드마커삽입]Insert marker in C/C++ Source Code, Inline assembly

반응형

// markers

#define XM_START "\xEB\x0D\x78\x38\x36\x6F\x62\x66\x2D\x66\x6C\x61\x67\x73\x2D"

#define XM_END "\xEB\x0F\x78\x38\x36\x6F\x62\x66\x2D\x65\x6E\x64\x2D\x61\x72\x65\x61"


C/C++ 에 소스코드에 마커를 삽입하라는 프로그램을 보았는데

한번도 적용해본적이 없어서 적용하기가 매우 힘들었다


마커삽입은 다음과 같이 하면 된다


위와 같은 마커를 삽입하라고 했을 때:


// markers

#define X_START _asm _emit 0xEB _asm _emit 0x0D _asm _emit 0x78 _asm _emit 0x38 _asm _emit 0x36 _asm _emit 0x6F _asm _emit 0x62 _asm _emit 0x66 _asm _emit 0x2D _asm _emit 0x66 _asm _emit 0x6C _asm _emit 0x61 _asm _emit 0x67 _asm _emit 0x73 _asm { _emit 0x2D }

#define X_END _asm _emit 0xEB _asm _emit 0x0F _asm _emit 0x78 _asm _emit 0x38 _asm _emit 0x36 _asm _emit 0x6F _asm _emit 0x62 _asm _emit 0x66 _asm _emit 0x2D _asm _emit 0x65 _asm _emit 0x6E _asm _emit 0x64 _asm _emit 0x2D _asm _emit 0x61 _asm _emit 0x72 _asm _emit 0x65 __asm { _emit 0x61 }


바이너리 형식으로 코드안에 삽입을 해야해서


_asm _emit을 사용하여 마커를 선언을 했다, 이는 코드안에 삽입하기위해서 자주 쓰이는 방법이라고 한다

*맨 마지막에만 {, } 괄호를 썻는데, 직접해본 결과로는 괄호가 없어도 똑같이 작용한다


실제 소스코드에는 다음과 같이 사용하면 된다


X_START

printf("hi!\n");

X_END


이렇게 한뒤, 컴파일하고 생성된 EXE파일의 바이너리를 보면 밑과 같은 마커가 삽입이 되어있다.



출처:

[1] https://www.codeproject.com/Articles/15971/Using-Inline-Assembly-in-C-C

[2] http://dumpcookie.tistory.com/entry/%EC%9D%B8%EB%9D%BC%EC%9D%B8-%EC%96%B4%EC%85%88%EB%B8%94%EB%A6%AC-%EA%B8%B0%EC%B4%88-x86-%EC%96%B4%EC%85%88%EB%B8%94%EB%A6%AC%EC%96%B4-%EC%98%88%EC%A0%9C%EB%A5%BC-%ED%86%B5%ED%95%B4%EC%84%9C-%EB%B0%B0%EC%9A%B0%EA%B8%B0

[3] https://msdn.microsoft.com/ko-kr/library/1b80826t.aspx

반응형