对于特定要求,我需要我的二进制值低于510bytes。
在汇编程序中执行程序,我得到< 100字节,而在C ++中添加相同的代码,结果代码超过1K。查看生成的二进制文件,大多数(+ 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会添加这么多nul charactres?
如何删除此空白区域?
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 = .;
}