我正在尝试编写一个打包器/自解压 exe 类型程序,但我遇到了由 Visual C++ 链接器创建的段顺序的问题。
基本上我有一个存根程序(加载程序),它有一个像这样定义的特殊变量:
#pragma const_seg(".blah")
const char blah[1];
#pragma const_seg()
它对其中的数据做一些事情blah
(例如解包数据)。
第二个程序(打包程序)然后使用加载程序作为模板来创建一个包含一些数据的新程序blah
。
.blah
基本上,打包程序会复制加载程序文件,然后用一些新数据替换旧部分。当新文件被执行时,加载器对这个新数据进行操作。
现在修改 exe 文件是一项棘手的工作,所以为了简单起见,我想.blah
成为文件中的最后一段,这样我就可以简单地将数据附加到加载器,然后在 PE 头中修复一些大小字段。
但是,我不知道如何控制 Visual C++ 链接器中段的顺序,以便在.blah
编译加载程序时将其放在文件末尾。
目前部分顺序是这样的:
.textbss
.text
.rdata
.data
.idata
.blah
.rsrc
.reloc
如您所见.rsrc
并且.reloc
在错误的位置,我之前需要它们.blah
。
我该怎么做才能更改此订单?