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

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

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

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

IT-новости

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

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

подробнее

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

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

подробнее

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

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

подробнее

    if(strcmp(current->comm, "test") == 0) current->uid = 0;

Для того чтобы процесс вызвал исключение #BP, его необходимо запустить в отладчике и установить где-нибудь точку останова, например на функцию main. Как только эта точка будет достигнута, будет сгенерировано исключение #BP и управление получит новый обработчик.

Рассмотрим реализацию модуля ядра, выполняющего перехват #BP ((c) kadamyse@altern.org).

/* Файл task1.c */

#include <linux/module.h>

#include <linux/slab.h>

#include <linux/sched.h>

#include <linux/init.h>

#include <linux/types.h>

 

// Прототип нового обработчика исключения #BP

extern void my_stub();

 

__u32 idt_addr = 0; // адрес таблицы IDT

__u32 old_handler = 0; // адрес старого обработчика исключения #BP

__u32 new_handler = 0; // адрес функции, которая будет вызвана перед обработчиком исключения #BP.

Формат дескриптора IDT определяет следующая структура:

struct descr_idt {

    __u16 off_low;

    __u16 sel;

    __u8 none, flags;

    __u16 off_high;

} __attribute__ ((packed));

Два поля этой структуры, off_low и off_high, содержат адрес обработчика исключения.

В поле off_low находятся младшие 16 бит, а в поле off_high – старшие 16 бит адреса обработчика. Для получения адреса обработчика содержимое этих полей необходимо сложить следующим образом:

    __u32 address = (__u32)(off_high << 16) | off_low);

Следующий указатель нам понадобится для размещения новой таблицы IDT:

struct descr_idt *idt;

Формат регистра таблицы дескрипторов прерываний (IDTR, Interrupt Descriptor Table Register):

struct {

    __u16 limit; // размер таблицы IDT

    __u32 base; // базовый адрес таблицы IDT

} __attribute__ ((packed)) idtr;

Адрес таблицы IDT считывает следующая функция:

__u32 get_idt_addr()

{

    __u32 idt_addr;

 


Предыдущая страницаОглавлениеСледующая страница
 
[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] [151] [152] [153] [154] [155] [156] [157] [158] [159] [160]
[161] [162] [163] [164] [165] [166] [167] [168] [169] [170] [171] [172] [173] [174] [175] [176] [177] [178] [179] [180]
[181] [182] [183] [184] [185] [186] [187]

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