【发布时间】:2023-03-22 07:01:01
【问题描述】:
我有一个包含embedded resources 的Windows native application,我想使用native API 访问它们。是否有处理资源的本机函数(类似于FindResource/LoadResource)或者我必须创建自己的PE阅读器来提取它们?
【问题讨论】:
-
如果我可能会问,您为什么要编写本机应用程序?如果资源被映射到内存中,并且我认为它们会被映射,或者您可以轻松地将其余可执行文件映射到其中,您只需知道它们的地址即可访问它们,因此不需要特殊的 API。您使用哪种嵌入式资源?
-
@KubaOber:如果您想在加载 Win32 子系统之前执行,您需要一个本机应用程序。 “您只需知道他们的地址就可以访问它们” -
FindResource将是了解地址的 API。 -
没错,就是Win32加载前需要执行的应用程序。如果包含资源的其余可执行文件未映射到内存,我该怎么办?一旦我没有事先定义资源地址,我如何以编程方式找到它(将资源放入可执行文件是链接器的工作)。
-
我想你会使用
cvtres从你的.res文件中获取一个目标文件,然后转储它以了解每个资源的符号名称,然后将它们声明为编译器的外部数据,并根据需要从 C 代码中获取它们的地址。链接器会将其全部修补,就像它对编译时未知的所有其他地址所做的那样。您还可以调整链接,以便映射 .rsrc 部分(如果不是)。 -
这是个好建议。让我看看是否有其他人有更简单的方法来解决它:)
标签: c++ c windows ntdll nt-native-api