.global main
main:
jmp go
func:
pop %ebx ; %ebx에 "/bin/sh" 문자열 시작하는 주소 값 들어감
movl $0x0, %eax
push %eax ; %eax에 0 을 넣은 뒤 스택에 PUSH (str[1]=null 구현)
push %ebx ; 문자열 시작 주소 값 스택에 PUSH (str[0]="/bin/sh" 구현)
movl %esp, %ecx ; %ecx는 문자열 배열의 시작 주소 값 (str 값 구현)
movl $0x0, %edx ; %edx에 null 값
movl $0xb, %eax ; execve의 시스템 콜 번호 11을 %eax에 넣음
int $0x80
go:
call func
.string "/bin/sh"
여기서 call 을하면, ret에 들어간다는 것 까진 알겠는데.. 설명을 보니, ret에 .string이 들어가고 esp도 ret(.string)을 가르킨다고 나오는 군요..
쉽게 설명좀 해주세요 |