NASM / yasm引数、C ++へのリンク
-
21-09-2019 - |
質問
私はNASMとC ++へのリンケージに関する質問を持っています。私は
としてリッテテスト機能を宣言します extern "C" void __cdecl myTest( byte i1, byte i2, int stride, int *width );
と、私はこのようにそれを呼び出します:
byte i1 = 1, i2 = 2;
int stride = 3, width = 4;
myTest( i1, i2, stride, &width );
メソッドは、アセンブリのデバッグとスタックポインタが引数を取得するために使用される方法を見てするのに役立ちます。それを超えて、ポインタ引数の値がどのように作品を理解するために、7に設定されなければなりません。これは、このように実装されます:
global _myTest
_myTest:
mov eax, [esp+4] ; 1
mov ebx, [esp+8] ; 2
mov ecx, dword [esp+16] ; width
mov edx, dword [esp+12] ; stride
mov eax, dword [esp+16]
mov dword [eax], 7
ret
と
を経由してコンパイルyasm -f win32 -g cv8 -m x86 -o "$(IntDir)\$(InputName).obj" "$(InputPath)"
、その後、C ++アプリにリンクされています。デバッグモードでは、すべてが正常に動作します。期待通りリリースモードで機能が一度動作しますが、その後のプログラムの開発作業が失敗するのに対し、関数は、時間と作品のカップルと呼ばれています。それは近い/遠い、スタック/フレームポインタとその何かの間違った私には思われるが、私はこの主題に非常に新たなんだと少しの助けを必要としています。前もって感謝します! ます。
解決
まあ、それは私がポップ/プッシュ経由ebx
を維持しなければならないと思われます。
他のヒント
がある可能性がありますができます: FLAC にはNASMでコンパイルされることを意図し、アセンブラでのいくつかのソースを使用しています<。 / P>
所属していません StackOverflow