IDA Hexray 反编译器到 C 问题,负位置查找

问题描述

我现在正在做一些关于 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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...