execve를 사용해서 쉘 코드를 만들어보겠다. execve 시스템콜이다. rax, rdi, rsi, rdx순서다. 기본적으로 execve를 쓸 때 커널은 filename을 통해서 파일을 열어준다. filename이 /bin/ls의 경우에는 뒤에 argv가 없으면 중단되어서 실행되지 않는다. 하지만 /bin/sh는 argv와 envp에 NULL을 넣어줘도 잘 동작한다. 그 이유에 대해서 찾아봤는데, 아래 글을 발견할 수 있었다. https://stackoverflow.com/questions/36673765/why-can-the-execve-system-call-run-bin-sh-without-any-argv-arguments-but-not Why can the execve system call run..