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
'Android Linux' 카테고리의 다른 글
안드로이드 후킹, 메모리 변조 : frida framework를 활용한 dex 함수 후킹 (0) | 2018.07.01 |
---|---|
[KERNEL MODULE] linux kernel 4.6 이상에서 file hash 구하기 (0) | 2017.11.27 |
kdress x86 빌드 (0) | 2017.10.17 |
Visual Studio에서 ARM-Android 라이브러리를 쉽게 빌드해보자 (0) | 2014.10.17 |
Simple Stack Buffer Overflow in ARM (0) | 2014.08.01 |