Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
В ответ получаем:
0xc0110deb <inter_module_register+11>: 0x010e48e8
Первый байт равен e8 – это опкод инструкции call. Найдем значение аргумента этой команды:
x/xw (inter_module_register+12)
Получим:
0xc0110deс <inter_module_register+12>: 0x00010e48
Теперь если мы сложим текущий адрес 0xc0110deb, смещение 0x00010e48 и 5 байт команды (1 байт инструкции call и 4 байта смещения), то получим искомый адрес функции kmalloc:
0xc0110deb + 0x00010e48 + 5 = 0xc0121c38
На этом завершим теоретические выкладки и, используя вышеприведенную методику, осуществим перехват системного вызова sys_mkdir.
Пример перехвата системного вызова
В начале, как всегда, заголовочные файлы:
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <linux/module.h>
#include <linux/unistd.h>
Определим имя файла устройства виртуальной памяти:
#define KMEM_FILE "/dev/kmem"
int main() {
Структура, описывающая формат регистра IDTR:
struct {
unsigned short limit;
unsigned int base;
} __attribute__ ((packed)) idtr;
Структура, описывающая формат шлюза прерывания таблицы IDT:
struct {
unsigned short off1;
unsigned short sel;
unsigned char none, flags;
unsigned short off2;
} __attribute__ ((packed)) idt;
Номер вызова, который мы будем перехватывать:
#define _SYS_MKDIR_ 39