首页
社区
课程
招聘
[求助]C的伪代码
发表于: 2018-4-11 17:10 3280

[求助]C的伪代码

2018-4-11 17:10
3280
signed __int64 __cdecl ascii_dec_to_longlong(_BYTE *a1)
{
  signed __int64 v2; // [sp+10h] [bp-8h]@1

  v2 = 0LL;
  if ( a1 )
  {
    while ( *a1 )
    {
      if ( *(_BYTE *)(*a1 + _ctype) & 4 )
        v2 = (*a1 & 0xF) + 10 * v2;
      ++a1;
    }
  }
  return v2;
}


这个是IDA F5后的伪C代码?大侠能帮翻译一下吗?有不明白

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 1
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
每个字节byte的最后4位取出来,累加到一个long类型的变量。
2018-4-11 18:10
0
雪    币: 34
活跃值: (101)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
if  (  *(_BYTE  *)(*a1  +  _ctype)  &  4  )
                v2  =  (*a1  &  0xF)  +  10  *  v2;
我猜你这两句没有理解。
先看这部分,  *(_BYTE  *)    这个意思是把一个地址转成Byte*  然后再读内容。读出来是一个字节的值,范围在0到255
_ctype,我也不太懂。我觉得这块就是读取传入的数组每个元素的值,看它与4是否为1,符合这样的值符合n*8-m(m=1,2,3,4,1<n<32),
v2  =  (*a1  &  0xF)  +  10  *  v2;  *a1&0xF  其结果不超过0xF,根据上一个条件,有规律的值与0xF与,结果是4,5,6,7,c,d,e,f.最终v2是由4,5,6,7,c,d,e,f组成的longlong  int  值。
2018-4-20 00:22
0
游客
登录 | 注册 方可回帖
返回
//