Здравствуйте, мыщъх, Вы писали:
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. как-то так...
ну так все равно их надо на объектный файл натравливать, от объектника не уйти никуда по-любому, а ТС-то хотел, чтоб объектников не было.