[질문] Arm 환경에서 system call 후킹에 대해서
안녕하세요
제가 요즘에 x86 환경이 아닌 arm 환경에서 system call table 를 후킹할 일이 생겨서 시도해 보고 있습니다.
보통 아래와 같은 방식으로 후킹을 할 수 있는데요
//save pointer to original function
orig_execve = sys_call_table[__NR_execve];
//point sys_fork to my fm_fork function
sys_call_table[__NR_execve] = hook_execve;
(sys_call_table 주소는 systemp.map 에서 직접 찾거나 다른 방법으로 찾을수 있다고 가정합니다)
그런데 arm 환경에서는 특정 몇몇의 함수는 대응되는 wrapper 함수를 사용하고 있더군요 예를 들어서
sys_execve() 함수를 후킹 한다고 가정한다면 arm 환경에서는 sys_execve() 함수 직전에 아래와 같은 wrapper 함수가 한번 더 호출됩니다.
( execve(..) ---> sys_execve_warpper() ---> sys_execve() ---> do_execve() )
(http://lxr.linux.no/linux+v2.6.37/arch/arm/kernel/entry-common.S#L466)
sys_execve_wrapper:
add r3, sp, #S_OFF
b sys_execve
이렇게 wrapper 함수에서 sys_execve() 함수를 호출하는 하는 형식으로 구성된것이 arm 환경에 몇가지 있더군요.
후킹 함수를 정의할 때 함수의 인자 종류와 인자 개수도 정확히 맞쳐줘야하는데 sys_execve_wrapper() 함수가 호출 될 때 함수 인수가 정확하게 어떤 것이 필요하며 몇개가 필요한지 알 수가 없는 상태입니다.
조언 부탁드리겠습니다.
감사합니다 수고하세요~
댓글 달기