c - 通过 AS 的 incbin 指令包含的字符串上的 NULL 终止符

标签 c embedded-resource ld null-terminated

我在可执行文件中包含的文件中有一些大型字符串资源。我使用以下命令将它们包含在可执行文件中。 *.S 允许 GCC 调用 as 来生成目标文件,而无需任何特殊处理。

    ;; ca_conf.S
    .section .rodata

    ;; OpenSSL's CA configuration
    .global ca_conf
    .type   ca_conf, @object
    .align  8
ca_conf:
ca_conf_start:
    .incbin "res/openssl-ca.cnf"
ca_conf_end:
    .byte 0

    ;; The string's size (if needed)
    .global ca_conf_size
    .type   ca_conf_size, @object
    .align  4
ca_conf_size:
    .int    ca_conf_end - ca_conf_start

我在包含字符串后添加了 .byte 0 以确保字符串以 NULL 终止。这使我可以使用 ca_conf 作为 C const char*,或 {ca_conf,ca_conf_size} 作为 C++ 字符串。

汇编器或链接器是否会重新排列内容,以便 NULL 终止符可以与其终止字符串分开?或者汇编器和链接器总是将它们保持在一起吗?

最佳答案

因为您使用的是汇编程序,所以它们将保留在一起。 另一点,由于 ALIGN 4 ca_conf_size 可能不是您期望的长度,因此它最多可以包含 3 个填充字节。

关于c - 通过 AS 的 incbin 指令包含的字符串上的 NULL 终止符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21493504/

相关文章:

c - 自己写的web服务器无法被别人电脑访问

c - 使用变量按名称搜索枚举?

macos - 编译用于链接 OSX 的二进制文件

c - 如何从 C 语言的文件中读取行?

c - 我怎样才能得到一个非常大的整数的平方根?

delphi - H2161 警告 : Duplicate resource: Type 10 (RCDATA)

javascript - YouTube嵌入动态尺寸调整

java - JAR 文件在 Eclipse 播放时不播放声音

c++ - 在多个 Cpp 文件中使用变量

c - 如何将 2 个部分放入 1 个部分(使用 ld 脚本)