Доброе время суток! Мне нужно собрать coff объектник, после чего пихнуть в lib фаил. всё что я знаю так это то что такой фаил должен содержать секции: .idata$2, .idata$4, etc... и что все данные о импорте раскинуты по этим секциям (.idata$n), в итоге компоновщик сам собирет одну секцию idata с нормальными RVA адресами. Допустим: библиотека: crtdll.dll функции: printf, getchar, isalnum как реализовать такой coff объектник(к примеру на fasm или nasm)?
Booster Нет, fasm как раз таки собирает объектники (elf, coff, ну кроме omf). К примеру на fasm, при создании PE программы секция idata собирается вручную (кратко и изящно благодаря макросам library/import), но при создании coff, rva не поддерживается, так как в coff не задаются основные адреса. Поэтому для компоновщика нужна либа, которая содержит один или несколько coff-объектников, те в свою очередь содержат специально организованные секции (.idata$2, .idata$4, .data$5, .idata$6) в этих секциях содержатся порции данных о импорте (секция .idata), с помощью которых в итоге компоновщик строит одну секцию импорта. Так вот мне нужен небольшой example, ручной сборки такого coff объектника, желательно на fasm/nasm.
Asterix Спасибо за ссылку, чувствую то что нужно, будем ковырять Jupiter Спасибо, сейчас тоже закачаю, посмотрю.
Asterix Вещь крутая, сразу собирает lib файл Quantum молодца _basmp_ Непонял. Мне нужен простой исходник(на ассемблере fasm/nasm) coff объектника(получаемого после ассемблирования) содержащий правильную информацию в секциях .idata$n. Мне не нужна спецификация самого COFF формата (если вы об этом).
Arthur теперь я не понял. Вам машкодовый образец нужен? А при чем тут фасм? В фасмовом форматере оч простая реализация нескольких форматеров (??). И рабочая. (правда в бсс признак неправильно ставит или уже поправлено?) только что про идату заметил. беру свои слова назад. про импортовые либы недавно вопрос поднимался. было простое решение предложено.
Мне нужно знать что, где находится: Код (Text): format ms coff section '.idata$2' data ; что здесь должно быть? section '.idata$4' data ; а что здесь? section '.idata$n' data ; и т. д.
наскоко помню, секции с номерками после $ в названии собираются компоновщиком в одну (если признаки у них совпадают). Секции могут элиминироваться, если символы в них не востребовались. В описании формата от мс это описано.
_basmp_ Смотрю вот "Microsoft Portable Executable and Common Object File Format Specification" и впритык не вижу инфу о том где и что должно располагаться в этих секциях
-- параграф 6.2 - про .идату (вообще импорт может лежать где попало, кроме вектора адресов ImportAddressTable, тк в него пишутся адреса функов) -- параграф 4.2 - про группируемые секции ($ <номер>) (но вообщето секции объединяются по флагам)