【发布时间】:2012-02-02 01:26:28
【问题描述】:
我正在设计一些跨平台工具,我想存储一些只读数据,比如资源数据:
- 程序图标
- 图片
- 字符串
- “由...制造”信息
- 文件版本信息
我正在尝试编写工具,“纯 c”或“c++”。
我想用汇编器存储资源数据,因此,可以通过两种方式读取数据:
(1) 程序或共享库本身读取其数据,作为变量或汇编数据段。
(2)可执行文件或共享库文件可以被其他程序读取而无需运行或加载。
在编译代码时,数据只会被写入一次。
我找到了两种可能的方法。
(1) 内联汇编。将 asm 指令直接添加到“纯 c”或“c++”文件中,一些编译器,如 Borland、MS、GNU,都有这种形式。
(2) 在单独的文件中生成代码和汇编代码,并使用编译器工具,如链接器、构建器或编译器来编译所有文件。
我不想存储汇编指令,只存储数据。
我的目标是 x86-32 位处理器、Windows、Linux 和 BSD,但如果可能的话,可以扩展到其他平台或架构。
我知道 Windows 和 Linux 使用不同的文件格式,例如 PE、COFF 或 ELF 二进制文件。
还有其他或替代的想法吗? 有关如何执行此操作的任何建议、手册、链接?
谢谢。
【问题讨论】:
-
此答案可能包含您想要的信息:stackoverflow.com/a/4158997/12711 一种方法仅适用于 GCC 工具链,但另一种方法适用于任何 C 编译器。要允许共享库读取数据,您需要有一些方法来获取指向共享库的数据的指针(如果这对您可行,可以通过函数轻松完成)。
标签: c++ c assembly cross-platform