структура объектных файлов

у меня возникли некоторые проблемы со связыванием моей сборки. Я использую NASM для сборки, а затем связываю его с ld. Одна небольшая проблема заключается в том, что директива GLOBAL работает только в том случае, если я определяю раздел .data, который... Я считаю, что за ним стоит что-то разумное, но все же как это важно для экспорта символов? (я решил использовать coff так как это был наиболее похожий формат с тем, что вышло из g++ с опцией -c). Основная проблема в том, что даже после того, как мне удалось связать его, звонки ведут на какой-то адрес, а функции там нет. Спасибо за ваше время чтения, и если у вас есть несколько советов или, может быть, ключевые слова, я должен погуглить, чтобы получить что-то о ссылках и символах, это было бы совершенно здорово.


person Pyjong    schedule 12.09.2010    source источник
comment
Под какой ОС и архитектурой вы работаете?   -  person llasram    schedule 12.09.2010
comment
Windows XP, архитектура... ну... это x86, что вы имели в виду?   -  person Pyjong    schedule 12.09.2010
comment
Как вы упомянули nasm, я в основном думал о x86 против x86-64 - после XP я предполагаю 32-битный x86?   -  person llasram    schedule 12.09.2010


Ответы (1)


Я не использовал nasm в Windows, но, глядя на вывод nasm -hf, я предполагаю, что вам нужен формат win32, а не coff. Формат COFF — это более старый формат объектных файлов, более новой версией которого является формат PE-COFF (или просто «PE»), который сейчас используется в Windows.

Что касается того, почему вам нужно указать SECTION до того, как ваши директивы GLOBAL вступят в силу, я не вижу такого поведения. Возможно ли, что вы не объявляли свой GLOBAL до лейбла? Или, возможно, символ испускается, но не может обеспечить правильную связь, если, например. он был задуман как переменная данных, но для него было выделено место в разделе .text.

person llasram    schedule 12.09.2010
comment
да, формат win32 в значительной степени экономит день ... который я бы провел методом проб и ошибок. большое спасибо. что касается глобальной директивы, возможно ли, что nasm генерирует какой-то раздел по умолчанию? Я где-то читал, что это делает masm.. в любом случае, хотя моя проблема решена, я все еще открыт для более подробной информации о том, как работают форматы объектов. - person Pyjong; 12.09.2010