malloc이 4번있고
strcpy가 두 번있음
더블strcpy를 이용해서 winner를 샐행시켜야함
인자를 2개 주어야함
첫 malloc이후 bp를 걸어 동적 할당된 메모리 주소를 찾음
인자로 aaaa bbbb를 준고 run
2번째 strcpy가 실행된 이후 heap의 상태를 확인
4개의 malloc이후 정상적으로 aaaa와 bbbb가 삽입됨
앞의 코드에서 name은 포인터 변수이기 때문에
aaaa와 bbbb는 빨간 동그라미의 주소에 들어간 것을 알 수 있음
첫번째 인자다음 i2->name의 주소까지 20바이트
그래서 첫번째 인자로 20바이트를 채운다음
3번째로 동적할당 받은 i2->name의 주소를
printf의 got로 바꿔서 두번째 인자를 winner의 주소를 주면
두번째 strcpy로 인해 printf의 got가 winner로 변경되어서
winner가 실행됨
코드 마지막에있는 printf의 got를 winner의 주소로 변경시켜줌
원래 i2->name의 주소가 있어야 할 자리에
printf의 got가 들어감
저렇게 되면 두번째 strcpy가 실행될 때
printf의 got에 두번째 인자가 씌어질꺼임
첫번째 인자로는 'a'*20+printf의 got를 줬고
두번째 인자로는 winner의 주소를 줌
printf의 got에 winner의 주소가 들어감
continue를 해보면