首页
论坛
课程
招聘
IDA Hexray反汇编后的代码, 标准数据结构的负值索引问题
2021-1-20 11:14 1380

IDA Hexray反汇编后的代码, 标准数据结构的负值索引问题

2021-1-20 11:14
1380

背景

最近在研究fltmgr.sys遇到个问题想不明白。

 

FltPerformSynchronousIo函数为例吧, 下面是MSDN的函数原型:

1
2
3
VOID FLTAPI FltPerformSynchronousIo(
  PFLT_CALLBACK_DATA CallbackData
);

下面是IDA反编译后的代码:

1
2
3
4
5
6
7
8
9
10
11
12
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;
  ....

问题

  1. 上面的和这个负值索引是什么情况(CallbackData[-1])?
  2. 实际的C代码应该是什么样子的?

附上原始汇编

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
.text:00017006 ; void __stdcall FltPerformSynchronousIo(PFLT_CALLBACK_DATA CallbackData)
.text:00017006                 public _FltPerformSynchronousIo@4
.text:00017006 _FltPerformSynchronousIo@4 proc near    ; CODE XREF: FltReadFile(x,x,x,x,x,x,x,x,x)+2E8↓p
.text:00017006                                         ; FltWriteFile(x,x,x,x,x,x,x,x,x)+2FB↓p ...
.text:00017006
.text:00017006 var_18          = dword ptr -18h
.text:00017006 var_14          = dword ptr -14h
.text:00017006 var_10          = dword ptr -10h
.text:00017006 var_C           = dword ptr -0Ch
.text:00017006 var_8           = dword ptr -8
.text:00017006 var_4           = dword ptr -4
.text:00017006 CallbackData    = dword ptr  8
.text:00017006
.text:00017006                 mov     edi, edi
.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:000170A4                 push    edi
.text:000170A5                 lea     eax, [ebp+var_18]
.text:000170A8                 push    eax
.text:000170A9                 call    _FltpPassThroughInternal@8 ; FltpPassThroughInternal(x,x)
…………省略部分…………

[2022夏季班]《安卓高级研修班(网课)》月薪两万班招生中~

收藏
点赞0
打赏
分享
最新回复 (2)
雪    币: 177
活跃值: 活跃值 (431)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cooolie 活跃值 2021-1-20 15:09
2
0
.text:00000001C000BD90 loc_1C000BD90:                          ; CODE XREF: FltAllocateCallbackDataEx+31↑j
.text:00000001C000BD90                 and     [rsp+48h+var_20], 0
.text:00000001C000BD96                 lea     r9, [rsp+48h+arg_0]
.text:00000001C000BD9B                 xor     r8d, r8d
.text:00000001C000BD9E                 xor     edx, edx
.text:00000001C000BDA0                 mov     rcx, rdi
.text:00000001C000BDA3                 call    FltpAllocateIrpCtrlInternal
.text:00000001C000BDA8                 mov     edi, eax
.text:00000001C000BDAA                 test    eax, eax
.text:00000001C000BDAC                 js      loc_1C00132A4
.text:00000001C000BDB2                 mov     rcx, [rsp+48h+arg_0]
.text:00000001C000BDB7                 lea     rax, [rcx+0E8h]        <<
.text:00000001C000BDBE                 mov     [r14], rax

黝黑尼,鸟飞

雪    币: 1170
活跃值: 活跃值 (874)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
Hacksign 活跃值 1 2021-1-20 16:33
3
0
cooolie .text:00000001C000BD90&nbsp;loc_1C000BD90:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& ...
我曹
所以杨大侠是下内存写断点找到这个地方的?
游客
登录 | 注册 方可回帖
返回