x86 実行可能ファイルから関数をフックしたい。これは、IDA の hex-rays プラグインで逆コンパイルされた関数プロトタイプです。
int __userpurge sub_43CE70<eax>(int a1<eax>, int a2, char a3, int a4, int a5, int a6)
そのため、関数は最初のパラメーターとして eax を受け入れ、同じレジスターに戻ります。
ラッパーとして次の関数を試しました:
int the_wrapper(int a2, unsigned a3, int a4, int a5, int a6)
{
int a1;
_asm
{
mov [a1], eax
};
char bString[50];
sprintf(bString,"a1: %u, a2: %u, a3: %d, a4: %d, a5: %d, a6: %d",a1,a2,a3,a4,a5,a6);
logs(bString);
int rtn;
_asm{
push a6
push a5
push a4
push a3
push a2
mov eax, [a1]
call the_function
mov [rtn], eax
};
return rtn;
}
何らかの理由で機能せず、関数が呼び出されるたびにクラッシュしました。