私はNASMでWindowsでいくつかのx86プログラミングを行ってきましたが、私は混乱しました。私はこれを行う必要があります理由として混乱しています:NASMでDLLを使用
extern [email protected]
具体的に私は「_」と「@ 4」について混乱しています。私は '@ 4'がスタックのサイズだが、なぜそれが必要なのか知っていますか?私が16進エディタでkernel32.dllを見たとき、私は 'ExitProcess'が '_ExitProcess @ 4'ではないことがわかりました。
私はCの関数は、アンダースコアとこのようなスタックサイズ必要としない理由としても混乱しています:C関数は装飾を必要としないのはなぜ
extern printf
を?
私の3番目の質問は、「これは私がこれらの機能を使用する方法ですか?」です。今、私は実際のdllファイル自体にリンクしています。
'extern _printf'のように 'printf'の前にアンダースコアを入れようとしましたが、コンパイルしませんでした。理由は何ですか?私はprintfへのすべての呼び出しを 'call _printf'に変更しました。 –
@Hudson: 'extern printf/call printf'と動作しますか?私は驚いています、これは私のNASMのインストールでは当てはまりません。あなたのNASMは実際に呼び出し規約を知っているのでしょうか? '-fwin32'フラグを使いましたか? –
はい、それは私が考えていることです。答えを見つけるためにNASMの文書を見に行きます。 –