Для конкретного требования мне нужно, чтобы мой двоичный файл упал ниже 510 байт.
Делая программу на ассемблере, я получаю <100 байт, при добавлении того же кода в C ++, результирующий код превышает 1 КБ. Если посмотреть получившийся двоичный файл, то в основном все (+ 90%) заполнены 0x00 символами (только несколько символов в начале и в конце заполнены).
В данный момент строим команды:
gcc -Wall -Os -s -Wl,--stack,32 -nostdinc -nostdinc++ -fno-ident -fno-builtin -I. -c -o cppFile.coff cppFile.cpp
nasm -f elf -o main.elf main.asm
ld -T link.ld -o out.elf main.elf cppFile.coff
objcopy -O binary out.elf out.bin
Размер сгенерированных файлов:
Когда нет связи с cppFile.coff (только с одной пустой функцией)
Почему GCC или LD добавляют так много нулевых символов?
Как убрать это пустое место?
ENTRY(start)
phys = 0x7c00;
HEAP_SIZE = 0;
SECTIONS
{
.text phys : AT(phys) {
code = .;
*(.text)
*(.rodata)
}
.data : AT(phys + (data - code))
{
data = .;
*(.data)
}
.bss : AT(phys + (bss - code))
{
bss = .;
*(.bss)
}
end = .;
}
Задача ещё не решена.
Других решений пока нет …