如何使用 GCC 编译 EXE,以便将 .idata 和 .text 部分合并在一起?

问题描述 投票:0回答:1

VC (Visual C++) 有一个非常有用的 /MERGE: 选项,它允许在 VC2010 之前的版本中将所有节合并为单个段。

但是,GCC(MinGW)没有这样的命令。在线资源表明这只能通过自定义链接器脚本来实现。

但是我发现将 .text 和 .rdata 部分合并在一起很好,但是一旦 .idata 也包含在合并中,程序将无法运行。

任何人都可以帮助确定问题吗?是否有可能链接描述文件(LDS)写得不正确?

OUTPUT_FORMAT(pei-i386)
SECTIONS
{
  . = SIZEOF_HEADERS;
  . = ALIGN(__section_alignment__);
  .text  __image_base__ + ( __section_alignment__ < 0x1000 ? . : __section_alignment__ ) :
  {
    *(.text) *(.data) *(.rdata) *(SORT(.rdata$*)) KEEP(*(.pdata*)) *(.bss) *(.idata) *(SORT(.idata$*))
  }
}

或者,有没有一种方法可以在不使用 LDS 链接器脚本的情况下仅使用 GCC MinGW 编译器来实现此目的?不包括手动修改。

windows gcc ld portable-executable
1个回答
0
投票

不要使用任何导入..如果你没有idate,你最终可以在十六进制编辑器中将其删除..但是你不会有导入..

如果您想单独将其移动到rdata,则可能(通过将其内容复制到rdata)并在pe标头中设置一些字段..但我不是100%确定...

一般来说,正如我所说,这将是一些步骤,例如在 rdata 中保留一些空间,将 idata 内容复制到其中,在 pe 标头中设置适当的字段......但这是一个沉重的黑客行为

© www.soinside.com 2019 - 2024. All rights reserved.