Board.KolibriOS.org
https://board.kolibrios.org/

@KERNEL
https://board.kolibrios.org/viewtopic.php?f=1&t=3743
Page 2 of 2

Author:  punk_joker [ Tue Aug 28, 2018 6:49 pm ]
Post subject:  Re: @KERNEL

pavelyakov wrote:
Автор ни хера не смыслит в программировании просто. - ну ок тебе виднее. Странно, только почему-то работает все..

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

Author:  0CodErr [ Wed Aug 29, 2018 9:18 am ]
Post subject:  Re: @KERNEL

punk_joker wrote:
pavelyakov wrote:
Автор ни хера не смыслит в программировании просто. - ну ок тебе виднее. Странно, только почему-то работает все..

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

pavelyakov, ты почему-то не хочешь читать, что тебе пишут.
Может быть тебе кое-что поможет понять. Возьмём твой же "вроде бы" работающий пример:
Code:
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
}
Для чего тебе копировать вот это
Code:
dword callback = 0;
там ведь изначально никаких нужных данных не содержится!?
Может быть тебе всё-таки не копировать нужно, а выделить память?
Так, а теперь подумай, как ты будешь к ней адресоваться?
Ты ведь заранее не знаешь, что вернёт тебе
Code:
        stdcall kernel_alloc, esi
        mov     dword [tempPointerAlloc], eax
то есть, ты не знаешь, по какому адресу будет загружен твой код и данные(однако приложение собрано с ImageBase 0).
Получается, что будет происходить запись не понятно куда и чтение не понятно откуда. Вполне вероятно, что из-за этого могут затереться какие-то данные или код в ядре, а это может привести к чему-то нехорошему(порче пользовательских данных, например, или ещё хуже оборудования).

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

Page 2 of 2 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/