问题描述
我现在正在做一些关于 fltmgr.sys
的研究,在使用 IDA 反编译 FltPerformSynchronousIo
函数时有一个我无法弄清楚的问题。
正如 MSDN 所说的 FltPerformSynchronousIo,原型是:
VOID FLTAPI FltPerformSynchronousIo(
PFLT_CALLBACK_DATA CallbackData
);
但是 IDA 反编译器给了我如下代码:
void __stdcall FltPerformSynchronousIo(PFLT_CALLBACK_DATA CallbackData)
{
// [COLLAPSED LOCAL DECLARATIONS. PRESS KEYPAD CTRL-"+" TO EXPAND]
v2 = *(_DWORD *)(CallbackData[-1].Iopb->Parameters.Create.AllocationSize.HighPart + 44);
v10[0] = -1;
v8 = CallbackData[-2].QueueLinks.Flink;
v3 = CallbackData->Iopb;
v9 = &CallbackData[-3].QueueContext[1];
v10[1] = 0;
v11 = 0;
....
问题:
当参数是指针类型时,参数 CallbackData[-1].Iopb
怎么会出现负(CallbackData
???)查找?
当将其转换为 C 代码时,这段代码实际上是什么?
补充说明:该函数的反汇编代码:
.text:00017008 push ebp
.text:00017009 mov ebp,esp
.text:0001700B sub esp,18h
.text:0001700E push esi
.text:0001700F mov esi,[ebp+CallbackData]
.text:00017012 lea eax,[esi-60h]
.text:00017015 mov ecx,[eax+3Ch]
.text:00017018 mov ecx,[ecx+28h]
.text:0001701B mov ecx,[ecx+2Ch]
.text:0001701E or [ebp+var_C],0FFFFFFFFh
.text:00017022 mov [ebp+var_18],ecx
.text:00017025 mov ecx,[eax+20h]
.text:00017028 mov [ebp+var_14],ecx
.text:0001702B mov ecx,[esi+8]
.text:0001702E push edi
.text:0001702F xor edi,edi
.text:00017031 mov [ebp+var_10],eax
.text:00017034 mov [ebp+var_8],edi
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)