Re[3]: Отранслировать C-код в BLOB
От: jazzer Россия Skype: enerjazzer
Дата: 17.04.12 06:00
Оценка:
Здравствуйте, мыщъх, Вы писали:

J>> ну а в объектном файле что лежит, по-твоему, если не raw-машинный код? открой его дизассемблером и все будет

М>ни разу не raw. да еще в перемешку со структурами самого объектного файла. зачем открывать дизассемблером?
чтоб посмотреть, что компилятор нагенерил, вестимо

J>>А если компилируешь с -fPIC (position-independent code),

М>не все компиляторы поддерживают такую фичу.
ну я с gcc работаю, про него и говорю.
У других что-то похожее должно быть тоже, иначе как DLL-ки выпекать?

J>> то в коде не будет привязок по конкретным адресам

J>> и его можно будет загружать по любом адресу и запускать без изменений.
М>сказки. чем вам поможет -fPIC? там все равно сырого кода не будет. ну то есть будет, конечно, но не одиним куском. как .com файл его не загрузишь. исключение составляет вырожденный случай, когда нет глобальных/статических переменных и нет ссылок на внешние (по отношению к данному файлу) функции.
У меня такое подозрение, что ТС как раз такой вырожденный случай и нужен. Иначе проще и прямее либу собрать и линковать по-честному.

М>но в этом случае и ms vc без всякий ключей сгенериует такой же позиционно-независимый код, ибо вызовы функций данного модуля и условные переходы в x86 относительны. базовые библиотечные вызовы ms vc лихо внедряет в код по месту вызова.

хз, про мс ничего не могу сказать, не пользуюсь.

М>но это не дает гарантий, что при создании локального массива компилятор не дернет RTL функцию для аллокации стековой памяти.

Поэтому я и говорил про дизассемблер — надо всегда проверять, что там компилятор нагенерил

Просто без внятной формулировки задачи не очень понятно, что именно нужно ТС.
Как вариант — он просто генерит функции типа "умножить на 2" и потом собрается дергать их, типа плагины для бедных.
Но, имхо, все это гораздо прямее длл-ками делается.

J>>На линуксе objdump тебе поможет, там и адреса прописаны для каждой функции будут.

М>здравый смысл подсказывает юзать objcopy или man ld. а дальше --oformat=binary. как-то так...
ну так все равно их надо на объектный файл натравливать, от объектника не уйти никуда по-любому, а ТС-то хотел, чтоб объектников не было.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.