TECH 으로 돌아가기
TECH HACKER NEWS 오늘 2분 읽기 25 READS

syscall을 가로채는 가장 빠른 방법, 왜 인텔에선 막혔나

리눅스에서 프로그램이 호출하는 시스템 콜을 가로채 계측(instrumentation)하려면 보통 ptrace나 seccomp를 씁니다. 하지만 이 방식은 커널을 오가는 트랩 비용이 커서 호출이 잦을수록 성능이 무너집니다. 그래서 저자는 더 빠른 길을 시도합니다. 실행 파일 안의 syscall 명령어 자체를 바이너리 재작성으로 바꿔, 커널 트랩 대신 사용자 공간의 핸들러로 직접 점프시키는 것이죠. 문제는 x86-64의 syscall 명령어가 단 2바이트(0F 05)라는 점입니다. 보통의 call이나 jmp는 5바이트 이상이라 2바이트 자리에 끼워 넣을 수 없습니다. 여기서 등장하는 묘수가 메모리 간접 호출(memory-indirect call)입니다. 짧은 인코딩으로 메모리에 저장된 주소를 통해 핸들러를 부르려는 시도죠. 하지만 제목의 'negative result'가 말하듯, 인텔 CPU의 명령어 인코딩과 길이 제약 탓에 이 접근은 깔끔하게 들어맞지 않았습니다. 흥미로운 건 실패 그 자체가 아니라, 명령어 인코딩과 원자적 패치라는 저수준 제약을 파고드는 사고 과정입니다. 시스템 콜 후킹이나 샌드박싱을 고민하는 엔지니어라면 한 번쯤 따라가 볼 만한 기록입니다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://www.humprog.org/~stephen/blog/2026/06/15/#system-cal...
SHARE
처리 중...