@KERNEL

Internal structure and you change requests/suggestions
  • 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
    Как думаешь, для чего она? Или по твоему она лишняя :)
  • Who is online

    Users browsing this forum: No registered users and 4 guests