pwnable.xyz / BabyVM
이런 타입 (VM pwn) 문제를 처음 풀어보는 거라 시간이 좀 걸렸다. 문제는 꽤 재미있다. (특히 어셈블리 코드 쓰는 부분..) 이 문제에서는 사용자가 AMD64 어셈블리 코드를 unicorn engine 위에서 직접 실행할 수 있는데, 사용할 수 있는 syscall 주소는 read, write, open으로 제한되어 있다. 설명을 시작하기 전 먼저 File 구조체가 어떻게 생겼는지 짚어보기로 한다. fd는 syscall의 리턴값 대신 전역변수 open_files를 통해 관리되고, path는 파일 경로, content는 파일 내용, size는 크기를 나타낸다. 파일 I/O 함수는 고정된 함수를 쓰지 않고 ops vtable 필드의 fops_read, fops_write로 사용한다. 파일 구조체를 초기..