注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

风雨夜归人

专业收集资料,个人爱好!

 
 
 

日志

 
 

【CE帮助选译】数据类型之间的差异  

2009-05-19 16:06:40|  分类: CCB的教程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
CE的帮助中有不少有用的知识和技巧,我粗略地翻译了一下,应该不算真正的翻译,只能算是导读吧,供那些英文不好的朋友参考一下,不一定准确,我附上原文供大家对照,建议大家参照着原文来看。

What is the difference in bytetype

Originally posted by emperor:

2 Byte means: 00 00 to FF FF this allows only up to 65535, obviously.
4 byte maens: 00 00 00 00 to FF FF FF FF (allows up to 4294967295).
Now for example you can miss 2 byte values with 4 byte scans:
example: value in game is 300 stored in game's memory as 012C
If you search for 12C as 2 Byte it will be in your results.
If you search for 12C as 4 byte the 2 Bytes before the 012C matter as well.
For example the 012C would be after an FF FF.
Meaning: FF FF 01 2C is in the memory 01 2C being what you are searching for. However seen as 4 Byte this is not 01 2C (300) but it's FF FF 01 2 C (4294902060) .
To my mind for exact value scans you should use the smallest appopirate byte type (for ex if it doesn't rise over 65000 use 2 byte). However since most games multiply it with a certain factor exact value scans are hardly any useful...when doing an unknown value scan it's up to you to chose the correct bytesize...most commonly used is 4 byte after all. It's nothing new to me seeing games showing a stat up to like 2000-3000 as 4 Byte in a huge number over serveral hundret thousands..however how much a certain game multiplies,adds or substracts, or tries to hide it depends on the game, is therefore sort of unknown therefore i think in many cases the bytesize is also sort of unknown although 4 Byte is always likely. Note doing increase/decrease value scans wouldn't fail even if there were some other bytes before it: for ex
FF FF 01 2C is increased by one...
---> FF FF 01 2D increased would still be okay as unknown initial.
But if the FF FF also changes
to like FE FE then it would screw up the scan.

数据类型之间的差异

原帖由emperor发表

2字节意味着00 00 到FF FF,显然其最大值为65535。
4字节意味着00 00 00 00到FF FF FF FF(最大值4294967295)
现在举例来说你用4字节扫描的话会错过2字节的数值:
举例:游戏中的数值是300,在游戏的内存中储存为012C(CCB:十六进制),如果你以2字节方式扫描12C的话,它会出现在你的结果中,如果你用4字节扫描12C,那么在它之前的两个字节会有很大的关系。
例如,如果012C是跟在FF FF的后面,这意味着在内存中它是以FF FF 01 2C出现的,01 2C就是你要找的数值,但以4字节来说它不是01 2C(300),而是FF FF 01 2C(4294902060)。
在我看来对于精确数值的扫描你得先用最小(CCB:appopirate:字典查不到,应该是appropriate之误,适当,恰当的)的数据类型(例如,如果数值不超过65000的话用2字节)。不过大多数游戏会把数值乘以某个因数所以精确扫描较难起作用。当你进行未知数值扫描时你可自己决定选择哪一种数据类型。通常来说大多数情况下使用4字节。在成千上万的游戏中看到显示的数值显示2000-3000使用4字节这对我来说并不新鲜。然后某个游戏乘以,加上或减去什么因数或者试图隐藏它们视游戏不同而定,基本上并不确定不过我想大多数情况下虽然不能肯定但4字节总是比较有可能。注意进行“增加/减少的数值”扫描是个不错的做法即使它前面有其他的字节(CCB:意即用增加/减少的数值这种方式来扫描比较不会受到选择不合适的数据类型的影响)。
例如:
FF FF 01 2C增加了1
--->FF FF 01 2D增加的数值仍然是正确的,对于未知初始数值来说。
但如果FF FF也同时改变了的话例如变成FF FE那么它会扰乱了扫描。

【CCB总结】
从上面这个文章可以得到几点结论:
一,如果在游戏中使用的是比较小的数据类型(例如二字节)而你使用较大的数据类型进行扫描,会错过正确结果。
二,通常情况下,特别是在扫描不到结果时,先从小的数据类型尝试。
三,有时精确扫描不行的话可用未知初始值再加上增加/减少的数值或增加/减少了多少这样的扫描方式来试试。

还有,一般情况下,大多数游戏对于整数数值来说都是用4字节来保存和处理的,我想这主要是因为我们现在用的CPU(从386起到现在的P4)里面的寄存器都是4字节(32位)的,所以不仅仅是游戏,WINDOWS上大多数程序使用4字节这种数据类型来处理整数主要是有处理速度上的优势的,即使是本来可以用2字节甚至1字节来表示的数值仍然很可能都以四字节处理,虽然有点浪费内存但却在处理速度上有所提高。
  评论这张
 
阅读(360)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017