0

実行可能ファイルに含めるファイルに大きな文字列リソースがいくつかあります。以下を使用して、それらを実行可能ファイルに含めます。を使用すると、特別な処理を行わずに*.SGCC を呼び出してオブジェクト ファイルを生成できます。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

アセンブラを使用しているため、それらは一緒に保持されます。もう 1 つのポイントは、ALIGN 4ca_conf_size が期待する長さではない可能性があるため、最大 3 つのパディング バイトを含めることができることです。

于 2014-02-01T12:20:24.193 に答える