Как тупо выполнить код из объектного файла?

Тема в разделе "WASM.HEAP", создана пользователем device, 28 янв 2008.

  1. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Типа ClassLoader, только в C++...

    Есть запущенная прога, которая что-то делает. Её пересобирать нельзя. Как подключить во время выполнения объектный файл? В ядре же это как-то реализовано...
     
  2. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    я так понял ты хочешь взять .obj и выполнить его?!
    ну "тупо" сделать это не получится однозначно, т.к. тебе придется не только распарсить obj, найти нужны код, но еще и разобраться со всеми ссылками на данные и функции, которые он вызывает. конечно, если взять функцию вида xor eax,eax/mov ecx,69/xxx: add eax,eax/dec ecx/jnz xxx, то ее можно выполнить и по тупому, просто загрузив в блок памяти с атрибутом исполняемого. вот только боюсь я, что тебе совсем не такую функцию грузить надо. а раз так - тебе фактически потребуется написать свой линкер ;) ну или значительную его часть.
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    так речь про линупс?
     
  4. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Да.
    Как ядро грузит модули? Туда объектный файл устанавливается ВО ВРЕМЯ ВЫПОЛНЕНИЯ. Видел еще проги, только без сорцов. Плагины к ним - не библиотеки, а объектные файлы. Как это можно слинковать без линкера?
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Ну так этот объектник импортирует только из самого ядра, как я помню архитектуру installable modules в лине. Видимо, там действительно реализован линкер, т.к. такой объектный файл аналогичен, практически, DLL/.so
     
  6. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Вот именно, что SharedObject загрузить - не проблема...
    Буду копать инет - может кто-то уже реализовал, правда по теме в гугле пока ниче нет.
     
  7. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Короче у GCC есть такая фича, только она не работает.

    При вызове, мне говорят что PARAMS[] не того типа. Я там 0 ставлю. Буду копать дальше
     
  8. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    http://www.linux-m32r.org/lxr/http/source/kernel/module.c#L1955
    если не разберешься, могу ответить на вопросы
     
  9. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    device
    придется подключаться к процессу и внедрять что-то наподобие компоновщика объектных файлов
    посмотри ссылку, что я дал
    там процесс отображения в принципе не сложный