問題タブ [calling-convention]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - cの呼び出し規約
誰かがcのデフォルトの呼び出し規約を変更する方法を教えてください。
c - C 関数呼び出しに対するカスタム X86_64 呼び出し規約
X86_64アセンブリコードからC関数への呼び出し規約を使用して、他の呼び出し規約で呼び出しを許可するインターフェイス(ラッパーなど)を作成する必要があります。最善の方法は、かなり「コンパイラに依存しない」ことです(ラッパーを変更するだけです)ので、レジスタ/スタックをコンパイラに戻すものを探しています。私はすでにここを見てきました: P/Invoke と C#のカスタム呼び出し規約。現在、私は GCC を使用していますが、他のコンパイラからのヒントは大歓迎です!
したがって、問題を最もよく理解するために、次のことを示します(カスタムコーディング規則は奇妙です):
「特別な」(ラッパー) C 関数を呼び出せるようにする必要があります。ここでの仕事は、他の C 関数間の呼び出しをディスパッチすることです。そのため、このラッパーは %r11 を見つけ、すべてのレジスタを保存し、さらに呼び出すためにスタックを準備する必要があります。Cでこれを行う適切な方法はありますか(インラインasmを使用)?
どうもありがとう
c - C コンパイラは、大きな構造体を返す関数をどのように実装しますか?
関数の戻り値は通常、スタックまたはレジスタに格納されます。しかし、大きな構造体の場合、スタック上になければなりません。このコードを実際のコンパイラでコピーする必要があるのはどれくらいですか? それとも最適化されていますか?
例えば:
(関数をインライン化できないと仮定します..)
c++ - fastcallは本当に速いですか?
fastcall呼び出し規約は、cdeclなどの他の呼び出し規約よりも本当に高速ですか?呼び出し規約によってパフォーマンスがどのように影響を受けるかを示すベンチマークはありますか?
c++ - 関数の現在の状態をC/C++の別の関数に渡します
関数の現在の状態をC/C ++の別の関数に渡す方法はありますか?私は現在の状態によってすべてのパラメータとローカル変数を意味します。例えば:
funcB()
ある種の関数が必要な場合、コードの状態は良くありません。しかし、それは達成できますか?
これは、誰かが複数のパラメーターを使用して長いメソッドをリファクタリングし始めている場合に役立ちます。
c++ - C ++ dllで使用される呼び出し規約をプログラムで推測できますか?
c++dllファイルの関数をテストするプログラムを作成したいとします。ユーザーがdllを選択できるようにする必要があります(c ++ dllについて話していると想定しています)。彼は、dllによってエクスポートされたすべての関数のリストを取得できるはずです。次に、ユーザーはリストから関数名を選択し、引数のリストを手動で入力して(引数はすべて、int、double、bool、char配列(c型文字列など)などの基本型)、次のことを実行できる必要があります。指定された引数を使用して、選択された関数を実行します。彼は、関数が指定された引数で実行されるかどうか、または関数がクラッシュする原因になるかどうかを知りたいと考えています(たとえば、署名と一致しないため)。
主な問題は、強い型の言語であるC ++では、コンパイル時に関数呼び出しの引数の数と型を知っている必要があることです。私の場合、これらの引数が何であるかは、ユーザーは実行時にそれらを選択します。
私が思いついた唯一の解決策は、アセンブリを使用して手動で引数を呼び出しスタックにプッシュすることでした。
ただし、アセンブリをいじりたい場合は、どの呼び出し規約がdllで使用されている関数であるかを確認したほうがよいことを理解するようになりました。
それで(最後に:)ここに私の質問があります:プログラムで呼び出し規約を推測できますか?Dependency Walkerは役に立ちません。また、PE形式を手動で読み取る方法がわかりません。
c++ - カスタム呼び出し規約とは何ですか?
これは何?また、開発者としてこれらの影響をどのように受けますか?
iphone - Question about Objective C calling convention and argument passing on ARM
I want to know how objective C runtime handle arguments when I call a objective C method like
There are three arguments for this objective C call, how does it work compared to typical way on a ARM system. I have known register r0, r1, r2, r3 will hold first 4 arguments, how about there are additional arguments? How does it put them on a stack and pop them later?
c++ - nasm / yasm引数、C++へのリンク
nasmとC++へのリンクについて質問があります。litteテスト関数を次のように宣言します
extern "C" void __cdecl myTest( byte i1, byte i2, int stride, int *width );
そして私はそれをこのように呼びます:
このメソッドは、アセンブリをデバッグし、スタックポインタを使用して引数を取得する方法を確認するためにのみ機能します。それを超えると、ポインタ引数の値を7に設定して、それがどのように機能するかを理解する必要があります。これは次のように実装されます。
経由してコンパイル
、次にc++アプリにリンクします。デバッグモードでは、すべてが正常に機能します。関数は数回呼び出され、期待どおりに機能しますが、リリースモードでは、関数は1回機能しますが、後続のプログラム操作は失敗します。スタック/フレームポインタの近く/遠くに何か問題があるように思えますが、私はこの主題にまったく慣れておらず、少し助けが必要です。前もって感謝します!a。
linux - i386 および x86-64 での UNIX および Linux システム コール (およびユーザー空間関数) の呼び出し規則は何ですか?
次のリンクでは、UNIX (BSD フレーバー) と Linux の両方の x86-32 システム コール規則について説明しています。
しかし、UNIX と Linux の両方での x86-64 システム コールの規則は何ですか?