Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

        if (read(fd, buf, size) != size) return 0;

        return size;

}

Функция записи данных в kmem:

static inline int wkm(int fd, uint offset, void *buf, uint size)

{

        if (lseek(fd, offset, 0) != offset) return 0;

        if (write(fd, buf, size) != size) return 0;

        return size;

}

Функция чтения 4-х байтового значения (int, unsigned long) из kmem:

static inline int rkml(int fd, uint offset, ulong *buf)

{

        return rkm(fd, offset, buf, sizeof(ulong));

}

Функция записи 4-х байтового значения в kmem:

static inline int wkml(int fd, uint offset, ulong buf)

{

        return wkm(fd, offset, &buf, sizeof(ulong));

}

Функция определения адреса таблицы sys_call_table:

ulong   get_sct()

{

 int       kmem;

  ulong    sys_call_off; – адрес обработчика прерывания int $0x80 (функция system_call)

  char     *p;

  char     sc_asm[128];

Командой SIDT получаем содержимое регистра таблицы дескрипторов прерываний. Результат команды поместим в структуру idtr:

asm("sidt %0" : "=m" (idtr));

В поле base структуры idtr находится адрес таблицы IDT. Зная этот адрес и размер шлюза в этой таблице (8 байт), получим содержимое шлюза прерывания int $0x80 и извлечем из него адрес обработчика:

 if (!rkm(kmem, idtr.base+(8*0x80), &idt, sizeof(idt)))

                return 0;

Содержимое шлюза поместим в структуру idt. Два поля этой структуры, off1 и off2, содержат адрес обработчика (функции system_call). В поле off1 находятся младшие 16 бит, а в поле off2 – старшие 16 бит адреса обработчика. Для получения адреса обработчика сложим содержимое этих полей следующим образом:

 sys_call_off = (idt.off2 << 16) | idt.off1;


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148] [149] [150]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2023 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100