Читаем статью "Перехват системных вызовов в OS Linux" раздел, посвященную сабжу: Выполняем те же самые действия на 2.6.19 ядре: Код (Text): (gdb) disassemble system_call Dump of assembler code for function system_call: 0xc0102c68 <system_call+0>: push %eax 0xc0102c69 <system_call+1>: cld 0xc0102c6a <system_call+2>: push %es 0xc0102c6b <system_call+3>: push %ds 0xc0102c6c <system_call+4>: push %eax 0xc0102c6d <system_call+5>: push %ebp 0xc0102c6e <system_call+6>: push %edi 0xc0102c6f <system_call+7>: push %esi 0xc0102c70 <system_call+8>: push %edx 0xc0102c71 <system_call+9>: push %ecx 0xc0102c72 <system_call+10>: push %ebx 0xc0102c73 <system_call+11>: mov $0x7b,%edx 0xc0102c78 <system_call+16>: movl %edx,%ds 0xc0102c7a <system_call+18>: movl %edx,%es 0xc0102c7c <system_call+20>: mov $0xfffff000,%ebp 0xc0102c81 <system_call+25>: and %esp,%ebp 0xc0102c83 <system_call+27>: testl $0x100,0x30(%esp) 0xc0102c8b <system_call+35>: je 0xc0102c91 <no_singlestep> 0xc0102c8d <system_call+37>: orl $0x10,0x8(%ebp) End of assembler dump. Я не знаток ассемблера, посему вопрос: Работает ли данный метод в 2.6.x Ядрах и если работает, то как быть здесь. Линки на источники где почитать по теме особо приветствуются.
метод работает, в некоторых rootkit-ах используется. Сделай disas syscall_call и посмотри entry.S, ф-ия ENTRY(system_call).
на некоторых дистрах kmem вообще отсутсвует как класс, а на других к нему не имеет доступа даже root.
Bob "тенденция, однако" (с) kmem обречен на вымирание. это факт. да он и не сильно нужен. ведь есть /dev/mem
Да, Вы правы (а кто бы сомневался). Кстати, всем заинтересованным рекомендую статью Криса http://www.insidepro.com/kk/043/043r.shtml Там рассказано как работать с /dev/mem. Крис, спасибо Вам за этот качественный материал
Кстати насчёт статьи: а она в журнале Хакер не публиковалась? И ещё мне всегда интересно было почему именно "thunk"? =)
ShadOS > И ещё мне всегда интересно было почему именно "thunk"? =) а почему бы и нет? см. http://en.wikipedia.org/wiki/Thunk