通过前面的分析,我们可以得到此函数的逆向代码:
void __stdcall SetInternalErrorHandler(fnCallback113 param1)
{
uint32_t esp_0 = 0;
fnCallback113 eax_0 = 0;
struct CStack_0x30001020
{
fnCallback113 Offset_0x0004;
}stack;
stack.Offset_0x0004 = param1;
/* 0x30001020 */ eax_0 = stack.Offset_0x0004;
/* 0x30001024 */ g_pInternalErrorHandler = eax_0;
/* 0x30001029 */ return ;
}
通过简单的文本替换可以得到:
void __stdcall SetInternalErrorHandler(fnCallback113 param1)
{
struct CStack_0x30001020
{
fnCallback113 Offset_0x0004;
}stack;
/* 0x30001024 */ g_pInternalErrorHandler = param1;
/* 0x30001029 */ return ;
}
再去掉没有使用的stack变量:
void __stdcall yfcstd::SetInternalErrorHandler(fnCallback113 param1)
{
/* 0x30001024 */ g_pInternalErrorHandler = param1;
/* 0x30001029 */ return ;
}
除了函数中的参数名称丢失,已经和原始代码一致了。