これはC++のx86インラインアセンブリを使用して、[インテル構文]コールは戻らない正しく[X86_ASM]
機能:
DWORD *Call (size_t lArgs, ...){
DWORD *_ret = new DWORD[lArgs];
__asm {
xor edx, edx
xor esi, esi
xor edi, edi
inc edx
start:
cmp edx, lArgs
je end
push eax
push edx
push esi
mov esi, 0x04
imul esi, edx
mov ecx, esi
add ecx, _ret
push ecx
call dword ptr[ebp+esi] //Doesn't return to the next instruction, returns to the caller of the parent function.
pop ecx
mov [ecx], eax
pop eax
pop edx
pop esi
inc edx
jmp start
end:
mov eax, _ret
ret
}
}
この関数の目的は、個別に呼び出すことなく、複数の機能/アドレスを呼び出すことです。
なぜ私はそれをデバッグしていますか? 私はその日に学校を始めなければなりません。そして、私はそれを夜までにやる必要があります。
おかげでたくさん、iDomo
どのコンパイラ? Visual C++?また、私はあなたが知りたいことを理解していません。 –
関数が呼び出されていないという問題はありますか?問題は最初の呼び出しで発生するか、それ以降に発生しますか? –
プッシュ/ポップペアが混在しています( 'eax'と' esi')。おそらく 'mov esi、edx;を使うほうが速いでしょう。 'mov esi、4;の代わりに' shl esi、2'を使います。 imul esi、edx'。機能全体を逆アセンブルしてレビューしましたか?スコット氏のように、呼び出される関数は実際にあなたが期待するシグネチャを持っていますか? – DCoder