Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Ср дек 12, 2018 10:06 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 17 сообщений ]  На страницу Пред. 1 2
Автор Сообщение
 Заголовок сообщения: Re: @KERNEL
СообщениеДобавлено: Вт авг 28, 2018 6:49 pm 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1137
pavelyakov писал(а):
Автор ни хера не смыслит в программировании просто. - ну ок тебе виднее. Странно, только почему-то работает все..

Работает - это далеко не показатель, особенно в ядерных делах.

_________________
я лишь учусь


Вернуться к началу
 Заголовок сообщения: Re: @KERNEL
СообщениеДобавлено: Ср авг 29, 2018 9:18 am 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1499
punk_joker писал(а):
pavelyakov писал(а):
Автор ни хера не смыслит в программировании просто. - ну ок тебе виднее. Странно, только почему-то работает все..

Работает - это далеко не показатель, особенно в ядерных делах.
Вот-вот.
Правильнее сказать "выполняется какой-то код и по счастливой случайности вроде бы ничего не падает: ни приложение, ни ядро" — по факту же как раз таки НЕ работает.

pavelyakov, ты почему-то не хочешь читать, что тебе пишут.
Может быть тебе кое-что поможет понять. Возьмём твой же "вроде бы" работающий пример:
Код:
beginWindow:
dword callback = 0;
void window(){
callback = EAX; // указатель на функцию окна в ядре
EBX+=100; // сдвинуть координату X всех окон на 100 пикселей.
callback(); // вызов функции
}
endWindow:
void main(){
EAX = 81;
EBX = 0; // номер переопределяемой функции
ECX = #window; // указатель на стартовый адрес функции
EDX = #beginWindow; // начальный адрес загрузки скомпилированной функции в память ядра
ESI = #endWindow; // конечный адрес
$int 0x40
}
Для чего тебе копировать вот это
Код:
dword callback = 0;
там ведь изначально никаких нужных данных не содержится!?
Может быть тебе всё-таки не копировать нужно, а выделить память?
Так, а теперь подумай, как ты будешь к ней адресоваться?
Ты ведь заранее не знаешь, что вернёт тебе
Код:
        stdcall kernel_alloc, esi
        mov     dword [tempPointerAlloc], eax
то есть, ты не знаешь, по какому адресу будет загружен твой код и данные(однако приложение собрано с ImageBase 0).
Получается, что будет происходить запись не понятно куда и чтение не понятно откуда. Вполне вероятно, что из-за этого могут затереться какие-то данные или код в ядре, а это может привести к чему-то нехорошему(порче пользовательских данных, например, или ещё хуже оборудования).

Если было бы всё так просто, то и не выдумывали бы ни какие релокации, а они нужны.
Вот, к примеру, процедура fix_coff_relocs http://websvn.kolibrios.org/filedetails ... c#line-786
Как думаешь, для чего она? Или по твоему она лишняя :)


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 17 сообщений ]  На страницу Пред. 1 2

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB