읽기전용으로 sys_call_table이 수정되어서, 바로 수정한 후 insmod를 하게 되면
>> 죽었음
이라는 커널의 짧고 강렬한 멘트와 함께.. 모듈은 정상작동을 하지 못한다.
즉 sys_call_table[index] = our_func 이런식으로 수정하기 전에 아래와 같은 함수를 호출해주어야 한다.
static void disable_page_protection(void)
{
unsigned long value;
asm volatile("mov %%cr0, %0" : "=r" (value));
if ( value & 0x00010000) {
value &= ~0x00010000;
asm volatile("mov %0, %%cr0": : "r" (value));
}
}
static void enable_page_protection(void)
{
unsigned long value;
asm volatile("mov %%cr0, %0" : "=r" (value));
if (!(value & 0x00010000)) {
value |= 0x00010000;
asm volatile("mov %0, %%cr0": : "r" (value));
}
}
사용예)
disable_page_protection();
sys_call_table[__NR_open] = our_open;
enable_page_protection();
참고 : http://blog.naver.com/kkn2988?Redirect=Log&logNo=138441227
'Linux' 카테고리의 다른 글
커널 수정 없이, system call hooking 하기. (0) | 2012.05.27 |
---|---|
시스템콜만 후킹 가능한거 아니였어?!!! (0) | 2012.05.26 |
리눅스 커널 전체 소스 분석 사이트 (0) | 2012.05.24 |
커널 2.6에서 sys_call_table 의 위치를 어떻게 찾지?! (0) | 2012.05.23 |
우분투 grub 설정 및 커널 변경(원하는 커널로 선택하여 부팅) (0) | 2012.05.23 |