我在可执行文件中包含的文件中有一些大型字符串资源。我使用以下内容将它们包含在可执行文件中。*.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
用作 Cconst char*
或{ca_conf,ca_conf_size}
C++ 字符串。
汇编器或链接器是否会重新排列事物以使NULL
终止符与其终止的字符串分开?还是汇编器和链接器总是将它们保持在一起?