[- Disclaimer -]
아래 내용은 정보보안 공부 목적으로 작성된 것이나, 이를 토대로 허가되지 않은 대상에 실습을 진행할 경우 해킹 시도로 간주하여 법적 처벌을 받을 수 있음을 알려 드립니다.
memset()
✦ <memory.h> 혹은 <string.h>
✦ Destination 주소에 지정한 크기만큼 지정한 값으로 채움
✦ Parameter1에 전달되는 Argument1
✧ Destination 주소
✦ Parameter2에 전달되는 Argument2
✧ 값
✦ Parameter3에 전달되는 Argument3
✧ Byte 단위 범위
✦ Return 값
✧ 없음
void *memset(void *dest, int c, size_t count);
Plain Text
복사
Ex) - 1
✦ 동적 할당 후 메모리 초기화 시
int *p = malloc(200 *sizeof(int));
memset(p, 0, 200 *sizeof(int));
Plain Text
복사
Ex) - 2
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
char arr[12];
memset(arr, 'a', 12);
arr[11] = '\0';
printf("%s", arr);
return 0;
}
Plain Text
복사
aaaaaaaaaaa
--------------------------------
Process exited after 0.05821 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
Plain Text
복사
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
int i = 0;
char arr[12];
memset(arr, 1, 12);
for(i = 0; i < 12; i++)
printf("%hhd\n", arr[i]);
return 0;
}
Plain Text
복사
1
1
1
1
1
1
1
1
1
1
1
1
--------------------------------
Process exited after 0.1759 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
Plain Text
복사
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
int i = 0;
int arr[12];
memset(arr, 1, 12 * sizeof(int));
for(i = 0; i < 12; i++)
printf("%d\n", arr[i]);
return 0;
}
Plain Text
복사
16843009
16843009
16843009
16843009
16843009
16843009
16843009
16843009
16843009
16843009
16843009
16843009
--------------------------------
Process exited after 0.07984 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
Plain Text
복사
memset() 기능 구현
#include <stdio.h>
void *memset(void *ptr, int value, size_t num);
int main(int argc, char* argv[]) {
int i = 0;
int arr[12];
memset(arr, 1, 12 * sizeof(int));
for(i = 0; i < 12; i++)
printf("%d\n", arr[i]);
return 0;
}
void *memset(void *ptr, int value, size_t num) {
size_t i=0;
for(i = 0; i < num; i++)
*((unsigned char*)ptr+i) = (unsigned char) value;
// ((unsigned char*)ptr[i] = (unsigned char) value; 포인터로 쓰나 배열로 쓰나 같다.
return ptr;
}
Plain Text
복사
16843009
16843009
16843009
16843009
16843009
16843009
16843009
16843009
16843009
16843009
16843009
16843009
--------------------------------
Process exited after 0.2009 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
Plain Text
복사



