0
.data
  ENTRY(sys_call_table)
    .long SYMBOL_NAME(sys_ni_call)           /* 0 */
    .long SYMBOL_NAME(sys_exit)
    .long SYMBOL_NAME(sys_fork)
    ...
    .long SYMBOL_NAME(sys_vfork)             /* 190 */

このソースコードを読みました。ソースに定義が見つかりません.data.long

4

1 に答える 1

3

それらはアセンブラ ディレクティブです。つまり、コンパイルされたマシン コードにプロセッサ命令を挿入するのではなく、別のことを行うようアセンブラに指示する特別な指示です。

この.dataディレクティブは、実行可能ファイルのセクションのサブセクションの 1 つの末尾に次の命令を発行するようにアセンブラーに指示しdataます。通常、マシンコードは実行可能ファイルのいわゆるtextセクションに出力されますが、グローバル変数などの非実行可能データは、いわゆるdataセクションの 1 つに格納されます。異なるセクションは、他の機能の中でも特に、実行時に異なるメモリ許可を持っています。

このディレクティブは、リテラル数値をマシン コードに挿入することを指示するディレクティブ.longと同等です。そのため、シンボルの位置の数値を挿入します。.int.long SYMBOL_NAME(sys_ni_call)sys_ni_call

したがって、これらをまとめると、.dataディレクティブの後にディレクティブが続く.longと、アセンブラーは特定の整数値をdata結果のオブジェクト コードのセクションの 1 つに配置します。sys_call_tableこれらの値は実行不可になり、セクションのサブセクションの権限がどのように構成されているかに応じて、読み取り専用または読み書き可能になりdataます。

于 2013-06-08T04:31:25.890 に答える