Всем доброго времени суток! Недавно встретил проблему при создании exe файла небольшого размера используя линкер ld (тот что в пакете с Dev-Cpp). В общем проблема заключается в следующем: исходный код состоит из одной пустой функции, никакие стандартные библиотеки не подключены (флагом -nostdlib). Выходной ехе файл получается такой какой нужно, но с одной проблемой: он содержит две секции вместо одной (должна быть только секция кода, но присутствует секция с таблицей импорта .idata). Таблица импорта данного ехе абсолютна пуста (т.е. по сути лишь содержит ей окончание из стандартного скрипта линкера: .idata BLOCK(__section_alignment__) : { /* This cannot currently be handled with grouped sections. See pe.em:sort_sections. */ SORT(*)(.idata$2) SORT(*)(.idata$3) /* These zeroes mark the end of the import list. - Вот собственно только это и содержится */ LONG (0); LONG (0); LONG (0); LONG (0); LONG (0); SORT(*)(.idata$4) SORT(*)(.idata$5) SORT(*)(.idata$6) SORT(*)(.idata$7) } По идее, линкер на заключительной стадии сборки удаляет все пустые секции, но в данном случае эта секция оказывается не пустой (т.к. есть эти пять значений LONG) и не удаляется из ехе хотя она по сути бесполезна. Если создать собственный скрипт линкера без этой секции то все работает. Собственно вопрос1: можно ли решить данную проблему без использования собственного скрипта? и вопрос2: Обязательны ли эти zeroes mark в окончании таблицы импорта, без них она будет работать корректно? Всем заранее спасибо за ответы.
Ну так попробуй с мерджить её с секцией text Если в MSVC это делалось через #pragma comment(linker, "/MERGE:.idata=.text") то должно быть подобие и для gcc
Эм ну вобщем то ничем, но их пишешь под конкретные нужды, а стандартный скрипт кажется универсален, но выдает в исходник пустую секцию (в случае отсустсвия импортируемых функций). Можно ли удалить нулевые LONG из секции импорта но чтобы она работала корректно в случае её наличия?
Попробуйте objcopy --remove-section=sectionname infile [outfile] Утилита должна быть в комплекте с dev-cpp. Хотя она, наверное, и непустую секцию удалит...