にASM機能を呼び出します私はこれを必要とは思いませんがあなたは私が欠けていると思うどのような種類の機能のこれは..です__cdecl、__stdcall、または__thiscall</p> <p>求めることができる通常の関数</p> <p>.. C++でASM関数を呼び出すしようとするとC++
push ebp
mov ebp, esp
のようなものは、誰かが一度私に言ったが、私はので、私は同じ問題で立ち往生しています忘れてしまいました。私は通常、デバッガを接続してこれを修正しますが、私の場合はプログラムがデバッガを許可しません。
私はこの機能を持っている、それはこれが、私が試したものです
int testFuncAddr = 0x00421520;
__declspec(naked) void Test(int buffer, int key)
{
__asm{
push edx
push ecx
mov edx, key
mov ecx, buffer
call [testFuncAddr]
ret
}
}
が本当にに関することを何をするか分からないのです動作しませんでした
00458BDE 90 NOP
00458BDF 90 NOP
00458BE0 /$ 8B5424 04 MOV EDX,DWORD PTR SS:[ESP+4]
00458BE4 |. 8B09 MOV ECX,DWORD PTR DS:[ECX]
00458BE6 |. E8 3589FCFF CALL Continuu.00421520
00458BEB \. C2 0400 RETN 4
00458BEE 90 NOP
00458BEF 90 NOP
__thiscall機能ですそれを合計。
ありがとう私は物事を頻繁に忘れています。今は私のSOアカウントでこれを保持します。また、 'typedef関数' **は正しく動作します** ..しかし、アセンブリの同等物は動作しません、私はもはやそれを望んでいない..私は今、 'ret'もそこに属していないと思います。 mov movx、buffer' 'call [testFuncAddr]'はうまくいくはずですか?もし私が今思い出したのであれば、それが本当にうまくいっている 'pushad''popad'を本当に必要と思ったのですか? – SSpoke
@SSpoke: 'mov edx、key';' mov ecx、buffer'; 'call [testFuncAddr]'; 'retn'(あなたは' CALL'の代わりに 'JMP'だけで、' RETN ')。その2番目のスニペットは正しいレジスタの保存を実証するだけでした(ただし、動作するはずです) – Necrolis