甄别伪代码中被“错用”的数组

以下是IDA生成的两段伪代码:

//第一段
  _DWORD v12[24]; // [esp+150h] [ebp-2A8h] BYREF
  _DWORD Src[24]; // [esp+1B0h] [ebp-248h] BYREF

//第二段
    Src[0] = dword_28CE8A0[26 * v3];
    Src[1] = dword_28CE8A4[26 * v3];
    Src[2] = dword_28CE8A8[26 * v3];
    Src[3] = dword_28CE8AC[26 * v3];
    for ( i = 5; i <= 24; ++i )
      v12[i + 23] = 4;

第一段定义了两个数组:v12与Src。

第二段中的前4行是对Src的赋值操作。

第二段中的第6行是对v12的赋值操作。但是,所用的下标是i + 23。这样的下标超出了v12定义的下标范围。

第二段中的第5行的for循环从i为5开始,也即从v12[28]开始。

由于Src在v12后面,所以v12[28]实际是Src[4]。

因此,这个for循环应该是对Src的操作。其代码修改如下:

for ( i = 4; i < 24; ++i )
  Src[i] = 4;

查看了汇编清单中与IDA的伪代码对应的代码:

.text:0068827E loc_68827E:
.text:0068827E mov     [ebp+eax*4+var_24C], 4
.text:00688289 inc     eax
.text:0068828A cmp     eax, 18h
.text:0068828D jle     short loc_68827E

上述汇编中的var_24C对应v12[23]。可能是这个原因,IDA认为这是对v12的循环操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值