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 编译器来实现此目的?不包括手动修改。
不要使用任何导入..如果你没有idate,你最终可以在十六进制编辑器中将其删除..但是你不会有导入..
如果您想单独将其移动到rdata,则可能(通过将其内容复制到rdata)并在pe标头中设置一些字段..但我不是100%确定...
一般来说,正如我所说,这将是一些步骤,例如在 rdata 中保留一些空间,将 idata 内容复制到其中,在 pe 标头中设置适当的字段......但这是一个沉重的黑客行为