0

私はアセンブリ コードに非常に慣れていないため、コマンド ライン引数 (argc、argv、env) を関数引数として渡す方法を知る必要があります。2 行目 (#RIGHT HERE) は、実装がわからない場所であり、3 つの引数をメインに渡す必要があります。誰でも助けてもらえますか?

以下を実行してコンパイルしています: gcc -m32 tc ss 以下のコードは ss で、mymain は tc にあります。

main:    
    #RIGHT HERE
    call   mymain
    ret
4

1 に答える 1

1

引数とスタックの使用を渡すための呼び出し規則を説明する 32 ビット Linux ABI (アプリケーション バイナリ インターフェイス) を理解する必要があります。ここにすべての詳細を記載するつもりはありませんが、Web 上で簡単にアクセスできます。

簡単な要約: 32 ビット Linux では、呼び出しの前にスタックに格納された引数が必要になります。引数を格納する、または引数を「プッシュ」するには、十分なスタック スペースが必要です。これにより、スタック ポインターが自動的に減少します。このスペースは、通話が戻った後にクリーンアップする必要があります。

ABI の調査に時間を費やしたくない場合、簡単な代替手段として、すべての引数を渡す関数を呼び出す C プログラムを作成し、それをコンパイルしてアセンブリを調べて、それがどのように行われたかを確認します。コピー。

于 2014-09-25T18:08:49.067 に答える