int main(int argc, char *argv[])
{
char buffer[20] = {0, }; // 0으로 초기화
int *pointer_to_ret = (int *)(buffer+24); // ret을 출력하기 위한 포인터 변수
if(argc < 2)
{
printf("argument error\n");
exit(-1);
}
// dumpcode로 메모리 덤프
dumpcode(buffer, 28);
printf("[*] BEFORE : the return address is 0x%08x\n\n", *pointer_to_ret);
// buffer overflow!!
strcpy(buffer, argv[1]);
// dumpcode로 메모리 덤프
dumpcode(buffer, 28);
printf("[*] AFTER : the return address is 0x%08x\n\n", *pointer_to_ret);
}
여기서 리턴어드레스 수정인데요,
도저히 이해가안되는게....
리턴어드레스가 멀말하는건가요??
여기서 buffer이라는 변수은데 왜 리턴어드레스가필요한지요 |