메모리 바이트 관련
name이랑 cammand가 76바이트 차이가 나는데 왜 idx에 19를 넣는건가여..?
char형은 1바이트 단위 아닌가여?
#pwnable
작성자 정보
답변
1
KnightChaser
공부벌레
문제에서는 32비트 환경에서 컴파일 되어 있기 때문에 포인터 한 개의 크기가 4바이트입니다. 그래서 name
과 command
가 76바이트 떨어져 있다고 하면, 실제로 index로 따지면 76/4 = 19가 됩니다.
p.s.)
코드를 보면 배열은 포인터 배열로 되어 있고,
char *command[10] = { "cat",
"ls",
"id",
"ps",
"file ./oob" };
리눅스의 file
명령어 등을 통해 해당 파일이 32비트 환경에서 컴파일 된 것을 알 수 있습니다. 따라서 포인터 한 개의 크기는 32비트, 즉 4바이트입니다.
$ file out_of_bound
out_of_bound: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=d83d8fb5458a8e0b408a23c97dfed327c1a8462c, not stripped