まとめ-g++とnasmのクロスコンパイル相互参照インタフェース


  • g++関数名修飾規則1)グローバル関数:Z+関数名長+関数名+関数パラメータテーブルgccコンパイル後の対応するシンボルテーブルには、識別子に対する修飾はほとんどなく、g++グローバル変数に対する処理も同様に修飾しないが、関数使用_Z先頭(C 99標準).関数名の後の一連のアルファベットは、iがint i n tを表し、bがbool b o lを表すなどのパラメータリストである.例えば、C++モジュールはfoo(int, char)関数を定義し、修飾ラベルは_Z3fooicである.異なるパラメータリスト接尾辞により,C++はリロードメカニズムを実現したが,関数の戻り値はラベル名の一部として現れず,戻り値がリロードのフラグとして機能しない理由を説明した.以下に、一般的なタイプの接尾辞を示します.
    を選択します.
    に飾りを付ける
    void
    v
    bool
    b
    int
    i
    char
    c
    short
    s
    unsigned
    j
    long
    l
    float
    f
    double
    d
    クラス#クラス#
    クラス名の長さ+クラス名
    定数
    K
    参照
    R
    ししん
    P
    2)ネーミングスペース/クラス関数
    関数の種類
    書式設定
    コンストラクタ
    _Z+N+クラス名長+クラス名+C 2+E+パラメータテーブル(C-constructor、NE-namespace)
    コピーコンストラクタ
    _Z+N+クラス名長+クラス名+C 2+E+R[オプションK]S(RKS_はそのクラスオブジェクトへの一般参照、R-reference、K-const)
    こうぞうかんすう
    _Z+N+クラス名長+クラス名+D 2+E+v(D-destructor)
    演算子関数
    _Z+N+クラス名長+クラス名+演算子英文簡写+E+パラメータテーブル
    一般メンバー関数、クラス静的関数、ネーミングスペースの関数
    _Z+N+ネーミングスペース/クラス名長+ネーミングスペース/クラス名+関数名長+関数名+E+パラメータテーブル
  • g++変数修飾規則
    変数の種類
    書式設定
    クラス静的変数、ネーミングスペースグローバル変数
    _Z+N+ネーミングスペース/クラス名長+ネーミングスペース/クラス名+変数名長+変数名+E
    クラスメンバー変数
    メンバー変数は、シンボルとして現れるのではなく、クラスオブジェクトのシンボルとオフセット量の方法でアクセスします.