0

我在可执行文件中包含的文件中有一些大型字符串资源。我使用以下内容将它们包含在可执行文件中。*.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终止符与其终止的字符串分开?还是汇编器和链接器总是将它们保持在一起?

4

1 回答 1

1

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

于 2014-02-01T12:20:24.193 回答