При сборке с использованием ассемблера GNU я могу использовать параметр командной строки --x32
, чтобы он выводил 32-битный код в объектный файл x86_64. Затем я могу с радостью связать его с 64-битным кодом, созданным gcc, и они увидят символы друг друга.
Однако я бы хотел написать большую часть 32-битного кода на C вместо сборки. Могу ли я заставить gcc выводить 32-битный код в объектные файлы x86_64?
@LightnessRacesinOrbit, спасибо, это досадное столкновение имен, эта библиотека по-прежнему x86_64, за исключением коротких длинных и указателей.
В любом случае, как вы сообщите процессору, что теперь он выполняет 32-битный код?
@avakar: Какие еще отличия вы ищете? Ваша программа все еще должна быть написана с использованием правильного набора команд; нет способа обойти это
ЦП запустится в 32-битном режиме, но я переключу его в 64-битный режим (из 32-битной части кода), а затем передаю управление 64-битному коду. Думаю, ядро. Таким образом, две части двоичного файла должны видеть символы друг друга. Это легко сделать, если я напишу 32-битную часть в ассемблере, но я бы предпочел, чтобы был доступен C.
Я ничего об этом не знаю, кроме интуиции, и быстрый поиск в Google подсказывает, что это не обязательно тривиально. Просмотрите sourceware.org/glibc/wiki/x32, чтобы увидеть, на правильном ли я пути.