Re[2]: Отранслировать C-код в BLOB
От: мыщъх США http://nezumi-lab.org
Дата: 17.04.12 01:24
Оценка:
Здравствуйте, 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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.