본문 바로가기

코딩

memcpy, memset 구현

구현하게 된 계기

  • code injection을 진행하다보니, 해당 함수를 많이 사용하게되는데 이를 macro함수로 구현하게 되면 API호출을 줄일 수 있습니다.

  • assembly를 사용하여 구현이 가능하지만, 이는 환경에 영향을 받기 때문에 macro함수로 구현하였습니다

  • call이 제한된 상황에서 유용하게 사용 할 수 있습니다.

  • 어떤 운영체제에서도 동일한 작동을 보장 받을 수 있는 함수가 필요하였습니다.

구현을 위해 참고 한 문서

구현한 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#ifndef _MEMIO_H
#define _MEMIO_H
 
#define TEMP(n) TEMP ## n  
 
#define MEMCOPY(Destination, Source, Size) \
do \
{ \
    int LINE = __LINE__; \
    int TEMP(LINE) = 0; \
    for(; TEMP(LINE) != Size; TEMP(LINE)++) \
    { \
        ((unsigned char *)Destination)[TEMP(LINE)] = ((unsigned char *)Source)[TEMP(LINE)]; \
    } \
while(0);
 
 
#define MEMSET(Destination, Source, Size) \
do \
{ \
    int LINE = __LINE__; \
    int TEMP(LINE) = 0; \
    for(; TEMP(LINE) != Size; TEMP(LINE)++) \
    { \
        ((unsigned char *)Destination)[TEMP(LINE)] = Source \
    } \
while(0);
 
#endif
cs

'코딩' 카테고리의 다른 글

비주얼스튜디오 2019, 64비트에서 어셈블리 컴파일  (0) 2020.03.31
파일 버퍼링 구현 (C/CPP)  (0) 2019.09.16