GCC(MingW)+ LD生成几乎空的可执行文件。为什么?

时间:2017-01-20 17:31:17

标签: c++ gcc ld boot

对于特定要求,我需要我的二进制值低于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

生成的文件大小:

  1. cppFile.coff = 684字节
  2. main.elf = 640
  3. out.elf = 2707
  4. out.bin = 1112
  5. 当没有链接到cppFile.coff(只有一个空函数)时

    1. out.elf = 1984
    2. out.bin = 31 (已测试并正常工作)
    3. 为什么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 = .;
      }
      

0 个答案:

没有答案