Page 2 of 2

Re: @KERNEL

Posted: Tue Aug 28, 2018 6:49 pm
by punk_joker
pavelyakov wrote:Автор ни хера не смыслит в программировании просто. - ну ок тебе виднее. Странно, только почему-то работает все..
Работает - это далеко не показатель, особенно в ядерных делах.

Re: @KERNEL

Posted: Wed Aug 29, 2018 9:18 am
by 0CodErr
punk_joker wrote:
pavelyakov wrote:Автор ни хера не смыслит в программировании просто. - ну ок тебе виднее. Странно, только почему-то работает все..
Работает - это далеко не показатель, особенно в ядерных делах.
Вот-вот.
Правильнее сказать "выполняется какой-то код и по счастливой случайности вроде бы ничего не падает: ни приложение, ни ядро" — по факту же как раз таки НЕ работает.

pavelyakov, ты почему-то не хочешь читать, что тебе пишут.
Может быть тебе кое-что поможет понять. Возьмём твой же "вроде бы" работающий пример:

Code: Select all

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: Select all

dword callback = 0;
там ведь изначально никаких нужных данных не содержится!?
Может быть тебе всё-таки не копировать нужно, а выделить память?
Так, а теперь подумай, как ты будешь к ней адресоваться?
Ты ведь заранее не знаешь, что вернёт тебе

Code: Select all

        stdcall kernel_alloc, esi
        mov     dword [tempPointerAlloc], eax
то есть, ты не знаешь, по какому адресу будет загружен твой код и данные(однако приложение собрано с ImageBase 0).
Получается, что будет происходить запись не понятно куда и чтение не понятно откуда. Вполне вероятно, что из-за этого могут затереться какие-то данные или код в ядре, а это может привести к чему-то нехорошему(порче пользовательских данных, например, или ещё хуже оборудования).

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