interactive함수와 hexdump함수를 구현했다. 이 과정에서 interactive함수가 잘 동작하지 않아 gdb로 디버깅하는데 많이 애를 먹었다. 해킹할 프로그램도 디버깅해보면서 공격방법을 구상하였는데 hexdump()함수를 완성하여서 디버깅하기에 수월했다.
void interactive(){
char * input = (char * ) malloc(INPUT_LIMIT); // 사용자의 입력 저장. 최대 크기 : INPUT_LIMIT 매크로 상수(기본 : 0x1000)
printf("Switching to interactive mode\n");
while(1){
Recv(RECV_LIMIT, 1); // 입력받을 최대크기 : RECV_LIMIT 매크로 상수(기본 : 0x1000)
write(1, "$", 1);
*(input + read(0, input, INPUT_LIMIT)) = '\0';
Send(input);
}
}
void hexdump(void * target, int size){
unsigned long long * t1;
unsigned long long mask;
unsigned long long tmp;
for(long unsigned int i = 0; i < size / 16 + 1; i++){
mask = 0xff;
t1 = (unsigned long long *)target + i;
printf("%08lx ", i);
for(int j = 0; j < 16; j++){
if(j % 4 == 0)printf(" ");
tmp = *t1 & mask;
printf("%02llx ", tmp >> (8 * j));
mask = mask << 8;
}
printf(" ");
mask = 0xff;
t1 = (unsigned long long *)target + i;
for(int j = 0; j < 16; j++){
if(j % 4 == 0)printf("|");
tmp = *t1 & mask;
printf("%c", (char) (tmp >> (8 * j)));
mask = mask << 8;
}
printf("\n");
}
}