能力值:
( LV9,RANK:180 )
2 楼
看到这个F5 我欣慰多了.
原来以前看到的F5都是人家手工整理好的...
能力值:
( LV2,RANK:10 )
3 楼
看了老半天,发现这个函数的功能已经在函数名字上表现出来了……Initialization
能力值:
( LV2,RANK:10 )
4 楼
是不是初始化了一个数组啊 那传入的是个什么东西啊?
能力值:
(RANK:860 )
5 楼
看不明白,真郁闷
能力值:
( LV2,RANK:10 )
6 楼
能力值:
( LV15,RANK:1673 )
7 楼
昨天偶才在自己的机器F5出来东东...的确没有别人贴出来的好看...
之前因为没有Patch那个插件...按了N+1次传说中的F5也没有反应...
能力值:
( LV2,RANK:10 )
8 楼
还是要手动整理才好看. 比如, 传进来的参数应该是 一个 指针, 204020, 204040 这段地方比较关键.
*(_WORD *)(*(_DWORD *)(v1 + 204036) + v7) = 0;
这样的语句太变态了, 看起来应该是 数据结构中的 结构指针 这样的嵌套, 如果不整理一下, 阅读太费劲.
能力值:
( LV2,RANK:10 )
9 楼
是……唉太BT^^
能力值:
( LV6,RANK:80 )
10 楼
哪位给个F5后的代码阅读教程?
能力值:
( LV2,RANK:10 )
11 楼
ida直接f5还不如直接看汇编。至少你要将变量名优化一下。
“*(_WORD *)(*(_DWORD *)(v1 + 204036) + v7) = 0”这样的语句只要你c++学好,应该能读懂的。v1,v7这里都是指针。变量前面的类似“(_DWORD *)”的是强制类型转换。最前面“*”表示解引用。本人的理解是这样。
能力值:
( LV9,RANK:140 )
12 楼
别用F5了,比汇编还难懂
给你重构一个看看对不对。
short __stdcall InitCmpData(BYTE *buf)
{
if(!buf)
{
return -1;
}
memset(buf+204020,0,16);
*(DWORD *)(buf + 204036) = (DWORD)buf;//reference to self?
DWORD *p1 = (DWORD *)(buf + 204040);
DWORD v3 = (DWORD)(buf + 12000);
for(int i=8;i--;v3+=12001)
{
*p1++ = v3;
}
//DWORD *p2 = (WORD *)*(DWORD *)(buf + 204036);//p2 == buf
//for(int i=0;i<12000;)
//{
// p2[i++] = 0;
//}
memset(buf,0,12000*2);
//WORD *p3;
//p1 = (DWORD *)(buf + 204040);
//for(int i=8;i--;)
//{
// p3 = (WORD *)*p1++;
// for(int j=0;j<12000;j--)
// {
// *p3++ = 0;
// }
//}
WORD *p3 = (WORD *)(buf + 12000);
for(int i=8;i--;)
{
memset(p3,0,12000*sizeof(*p3));
p3 += 12001;
}
return 0;
}
能力值:
( LV2,RANK:10 )
13 楼
3Q…… 啊 原来传入的是byte流啊
能力值:
( LV2,RANK:10 )
14 楼
看12楼的终于能明白是什么意思了
能力值:
( LV2,RANK:10 )
15 楼
F5只是心理安慰啊,还不如看原来的……