首页
社区
课程
招聘
[求助]请教ida的问题, 大侠帮忙!!!
发表于: 2008-10-20 16:29 4794

[求助]请教ida的问题, 大侠帮忙!!!

2008-10-20 16:29
4794
int __fastcall unknown_libname_45(int a1, int a2)
{
  if ( a2 )
  {
    while ( *(_BYTE *)a2 && *(_BYTE *)(a2 + 1) && *(_BYTE *)(a2 + 2) && *(_BYTE *)(a2 + 3) )
      a2 += 4;
  }
  return System____linkproc___LStrFromPCharLen();
}

这是一段hex-rays生成的代码
看得莫名其妙
1.unknown_libname_45 一般是什么原因形成的?;
2.System____linkproc___LStrFromPCharLen()是如何传递参数的?
3.中间的while句子的功能是什么?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
2
hex-rays反编译一般仅做参考,主要是用来分析函数的大致流程。

具体细节,还需要从反汇编代码中查看分析。

IDA只是个分析工具,代替不了人脑的工作。

从上面的代码来看,参数a2的类型应该是 char * 型的
你在 int __fastcall unknown_libname_45(int a1, int a2) 这一行点右键,选择“Set item type",然后将参数表改成 ( int a1, char * pData)
然后下面的分析会变得稍微容易理解一些,比如那个 while 循环。

具体的功能,必须人工分析反汇编代码。
不要想投机取巧。工具永远只是辅助作用。

补充:从你给的代码来看,这个函数有可能是计算字串长度,或者搜索字串,或者类似的功能的。
2008-10-20 21:07
0
雪    币: 242
活跃值: (463)
能力值: ( LV11,RANK:188 )
在线值:
发帖
回帖
粉丝
3
很明显是lengh库函数
while(a2[counter]&a2[counter+1]&a2[counter+2]&a2[counter+3])
{
a2+=4;
}
2008-10-21 01:28
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢楼上两位的解答!!!
2008-10-21 15:19
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
参考重命名你没用上 ^_^
2008-10-22 01:10
0
游客
登录 | 注册 方可回帖
返回
//