C++ 存储只读数据混合组件和C++;
我正在设计一些跨平台的工具,我想存储一些只读数据,比如:C++ 存储只读数据混合组件和C++;,c++,c,assembly,cross-platform,C++,C,Assembly,Cross Platform,我正在设计一些跨平台的工具,我想存储一些只读数据,比如: 程序图标 图像 弦 “制造商…”信息 文件版本信息 我正在尝试编写这个工具,或者是“纯c”或者“c++” 我希望使用汇编程序存储资源数据,因此,可以通过两种方式读取数据: (1) 程序或共享库本身读取其数据,作为变量或汇编程序数据段 (2) 其他程序可以读取可执行文件或共享库文件,而无需运行或加载 编译代码时,数据将只写入一次 我找到了两种可能的方法 (1) 内联汇编。将asm指令直接添加到“纯c”或“c++”文件中,一些编译器,如B
- 程序图标
- 图像
- 弦
- “制造商…”信息
- 文件版本信息
谢谢。这可能有点难看,但有一件事你可以做,它应该是相对可移植的:将数据的全部内容存储为
char
数组,以一个神奇的序列开始和结束。可能是校验和
e、 g
在我熟悉的所有平台上,这些字节将连续存储在文件中(您可以扫描文件以加载资源)。当然,当程序运行时,数据在内存中是连续的(并且可以作为“数据”访问)
如果这样的东西不是一个选项,你可能需要更多地了解你的操作系统的可执行文件格式。这可能有点难看,但这里有一件事你可以做,它应该是相对可移植的:将数据的全部内容存储为
char
数组,以一个神奇的序列开始和结束。可能是校验和
e、 g
在我熟悉的所有平台上,这些字节将连续存储在文件中(您可以扫描文件以加载资源)。当然,当程序运行时,数据在内存中是连续的(并且可以作为“数据”访问)
如果这样的选项不可用,您可能需要更多地了解操作系统的可执行文件格式。一种方法是将要存储的数据附加到已编译二进制文件的末尾(可能在编译后的步骤中),然后直接在数据之后,以32位或64位整数存储大小 然后在代码中,打开二进制文件,搜索到底,读取大小,然后向后读取,直到获得所有数据
简单且可移植。一种方法是将要存储的数据附加到已编译二进制文件的末尾(可能在编译后的步骤中),然后直接在数据之后,以32位或64位整数存储大小 然后在代码中,打开二进制文件,搜索到底,读取大小,然后向后读取,直到获得所有数据
简单且可移植。这个答案可能有您想要的信息:一个方法只适用于GCC工具链,而另一个方法适用于任何C编译器。要允许共享库读取数据,您需要有一些方法将指向数据的指针获取到共享库(如果这对您来说可行的话,可以通过函数轻松实现)。这个答案可能包含您想要的信息:一个方法仅适用于GCC工具链,而另一个方法适用于任何C编译器。要允许共享库读取数据,您需要有一些方法来获取指向共享库的数据指针(如果对您来说可行的话,通过函数很容易做到)。使用开始标记和结束标记。第三种,可供选择的,但实际可行的方法。我会考虑的。谢谢。如果它是只读的,它可以是
const
,因此可以进入.rodata
部分。使用开始标记和结束标记。第三种,可供选择的,但实际可行的方法。我会考虑的。谢谢。如果它是只读的,它可以是const
,这样就可以进入.rodata
部分。我也会检查这个选项。谢谢。我也会检查这个替代方案。谢谢
char data[]={
't','h','e','_','s','t','a','r','t',0,
// resource data here
....
't','h','e','_','e','n','d',0,
// maybe a checksum here
...
};