ring 3에서 작성된 fopen, ptrace 등은 내부적으로 libc.so->syscall 방식으로 호출되는데, 직접 호출하면 libc.so를 거치지 않습니다. (후킹 등에 안전)

플랫폼 등에 따라 사용되는 레지스터가 달라질수 있으므로 gdb, ida 같은 툴에서 libc.so 열어 확인해야 합니다.

해당 플랫폼은 i386인데 ebx, ecx, edx, esi 순서대로 들어가고 있네요. 다른 머신에서의 libc도 확인해봤는데 레지스터 순서가 같은 것으로 보아 고정일 가능성이 큽니다. (아닐 수도 있으니 댓글 달아주시면 감사..추후 수정 사항이 생기면 수정하겠습니다.)

upx의 syscall 매크로를 보면, 거의 저 순서대로 들어가는 것을 확인할 수 있습니다.

https://github.com/upx/upx/blob/master/src/stub/src/include/linux.h 



+ Recent posts