Здравствуйте, jazzer, Вы писали:
J>Здравствуйте, PanychY, Вы писали:
J> ну а в объектном файле что лежит, по-твоему, если не raw-машинный код? открой его дизассемблером и все будет
ни разу не raw. да еще в перемешку со структурами самого объектного файла. зачем открывать дизассемблером? тогда уже компилятор просить сгенерить асм-листинг. как минимум мы устраняем дизассемблер.
J>А если компилируешь с -fPIC (position-independent code),
не все компиляторы поддерживают такую фичу.
J> то в коде не будет привязок по конкретным адресам
J> и его можно будет загружать по любом адресу и запускать без изменений.
сказки. чем вам поможет -fPIC? там все равно сырого кода не будет. ну то есть будет, конечно, но не одиним куском. как .com файл его не загрузишь. исключение составляет вырожденный случай, когда нет глобальных/статических переменных и нет ссылок на внешние (по отношению к данному файлу) функции. но в этом случае и ms vc без всякий ключей сгенериует такой же позиционно-независимый код, ибо вызовы функций данного модуля и условные переходы в x86 относительны. базовые библиотечные вызовы ms vc лихо внедряет в код по месту вызова. но это не дает гарантий, что при создании локального массива компилятор не дернет RTL функцию для аллокации стековой памяти.
J>На линуксе objdump тебе поможет, там и адреса прописаны для каждой функции будут.
здравый смысл подсказывает юзать objcopy или man ld. а дальше --oformat=binary. как-то так...
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.