Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Номер 39 соответствует системному вызову sys_mkdir.
Переменные и их назначение:
int kmem;
ulong get_kmalloc_size; – размер функции get_kmalloc
ulong get_kmalloc_addr; – адрес функции get_kmalloc
ulong new_mkdir_size; – размер функции-перехватчика
ulong new_mkdir_addr; – адрес функции-перехватчика вызова sys_mkdir
ulong sys_mkdir_addr; – адрес системного вызова sys_mkdir
ulong page_offset; – нижняя граница адресного пространства ядра
ulong sct; – адрес таблицы sys_call_table
ulong kma; – адрес функции kmalloc
unsigned char tmp[1024];
Значения адресов функций get_kmalloc и new_mkdir_call и их размеры нам предстоит определить. Пока что оставим эти поля пустыми.
struct kma_struc {
ulong (*kmalloc) (uint, int);
int size;
int flags;
ulong mem;
} __attribute__ ((packed)) kmalloc;
int get_kmalloc(struct kma_struc *k)
{
k->mem = k->kmalloc(k->size, k->flags);
return 0;
}
Структура struct kma_struc и функция get_kmalloc и их назначение уже были рассмотрены.
int new_mkdir(const char *path)
{
return 0;
}
Функция new_mkdir перехватывает системный вызов sys_mkdir. Она ничего не делает, просто возвращает нулевое значение.
Определим несколько функций для работы с файлом устройства /dev/kmem.
Функция чтения данных из kmem:
static inline int rkm(int fd, uint offset, void *buf, uint size)
{
if (lseek(fd, offset, 0) != offset) return 0;