main에서 코드 주소
system("/bin/sh") 주소가 0x400a11인 이유가 뭘까요?
system 함수를 call 하는 부분인 그 다음 주소 0x400a16이 아닌 이유가 뭘까요?
#pwnable
작성자 정보
답변
2
이무쿤
대표 업적 없음
여기서 보면
call system 하는 부분의 주소는 0x400a16 인데 그 전 주소인 mov edi를 하는 0x400a11 주소를 system call을 호출하는데 사용하는 이유가 뭘까요?
Hmin
강의 수강: 10
https://learn.dreamhack.io/54#6
위의 강의를 보면 sysv 호출규약의 경우 레지스터와 스택을 통해 인자를 전달합니다.
"rdi, rsi, rdx, rcx, r8, r9, 스택" 이렇게요
system("/bin/sh") 에서 system함수의 첫번째 인자는 "/bin/sh"이기 때문에
rdi의 32비트 버전인 edi로 /bin/sh를 넘기는 겁니다.