A. ★★★高手请进!!!有关计算机网络技术★★★
<!--STATUS OK-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link rel="alternate" type="application/rss+xml" title="“★★★高手请进!!!有关计算机网络技术★★★”的最新回答(RSS 2.0)" href="http://..com/q?ct=20&qid=1903532&pn=65535&rn=25&tn=rssqb">
<title>★★★高手请进!!!有关计算机网络技术★★★_网络知道 </title>
<style type="text/css">
<!--
a.f12og:link{color:#ff6600}
a.f12og:visited{color:#ff6600}
-->
</style>
<link href="/iknow.css" rel="stylesheet" type="text/css">
<script language="JavaScript" type="text/JavaScript">
function ask(fn)
{document.fask.word.value=fn.word.value;
fask.submit();
}
</script>
</head>
<body class="bgbdy" topmargin="0">
<center>
<table width="770" border=0 align="center">
<tbody>
<tr>
<td width="150" valign=top><a href="/"><img src="https://gss0.bdstatic.com/70cFsjip0QIZ8tyhnq/img/logo-.gif" border="0"></a></td>
<td height="55" style="table-layout: fixed; word-break: break-all"><table cellspacing=0 cellpadding=0 border=0>
<tr>
<td nowrap ><a href="http://news..com" class="headTit">新闻</a><a href="http://www..com/" class="headTit">网页</a><a class="headTit" href="http://post..com/">贴吧</a><font class="headTitB">知道</font><a class="headTit" href="http://mp3..com/">MP3</a><a class="headTit" href="http://image..com/">图片</a><a href="http://www..com/more/index.html" class="headTit">更多>></a></td>
</tr>
</table>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<form action="/q" name="ftop" method="get">
<td nowrap>
<input class=formfont maxlength=256 tabindex=1 size=42 name=word>
</td>
<td width="30" valign="bottom" nowrap><div align="right"><span style="padding-bottom:15px; "><a href="http://www..com/search/_help.html">帮助</a></span></div></td>
</tr>
</table>
<table cellspacing=0 cellpadding=0 border=0>
<tr valign="bottom">
<td height="28" nowrap > <input type="submit" tabindex=2 value="搜索答案" class="bnsrh">
</td>
<td width="86" nowrap ><div align="right">
<input type="hidden" name="ct" value="17">
<input type="hidden" name="pn" value="0">
<input type="hidden" name="tn" value="ikaslist">
<input type="hidden" name="rn" value="10">
<input type="button" onclick="ask(ftop);" tabindex=3 value="我要提问" class="bnsrh">
</div></td> </form>
</tr>
</table>
<form name="fask" action="/q" method="get"> <input type="hidden" name="ct" value="17"><input type="hidden" name="pn" value="0"><input type="hidden" name="tn" value="ikask"><input type="hidden" name="rn" value="10"><input type="hidden" name="word" value=""> <input type="hidden" name="cm" value="1"><input type="hidden" name="lm" value="394496"></form>
</td></tr>
</table>
<script>
var url = escape(location.href);
function ctlSubmit(event) {
if (event.ctrlKey && event.keyCode == 13) { fdf.submit() }
}
function checkco(f,des)
{ if(f.co.value=="") {alert("请输入您的"+des); return false;}}
function limitpl(f,des)
{ if(f.co.value=="") {alert("请输入您的"+des); return false;} return limitChars(f.co,des,200);}
function checkcoAndsn(f,des)
{ if(f.co.value=="") {alert("请输入您的"+des); return false;} return limitChars(f.sn,"参考资料",60);}
function cReply(flag)
{ if (flag=="yes") {
document.getElementById('replyTB').style.display=""; }
if(flag=="no"){document.getElementById('replyTB').style.display="none"; }
location.href="#here";
}
function fixReply(flag){ setTimeout("cReply('"+flag+"')",300);}
function limitChars(obj,obj_Str,limit_len)
{
var c = getLeftChars(obj,limit_len);
if(c<0)
{
echo_str = obj_Str + "限定在"+limit_len+"个字以内,请缩短字数";
alert(echo_str);
obj.focus();
return false;
}
return true;
}
function getLeftChars(varField,limit_len) {
var i = 0;
var cap = limit_len*2;
var j=0;
var runtime = (varField.value.length>cap)?(cap+1):varField.value.length;
for (i = 0; i< runtime; i++) {
if (varField.value.charCodeAt(i) > 127 || varField.value.charCodeAt(i) == 94) {
j=j+2;
}
else {
j=j+1
}
} //结束FOR循环
var leftchars = cap - j;
return (leftchars);
}
</script>
<table width="770" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="25" nowrap><a href="/">网络知道</a> > <a href="/browse/74?lm=9">电脑/数码</a> > <a href="/browse/88?lm=9">互联网</a></td>
</tr>
</table>
<div id="cDiv"><table border="0" align="right" cellpadding="0" cellspacing="0">
<tr><td width="170" valign="top" class="padL12">
<!--如果用户已登陆-->
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="magBtm12">
<tr>
<td class="bgtle" nowrap>用户信息</td>
</tr>
<tr>
<td class="bgcntBor3">
<!--如果是iknow用户-->
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="zhtable">
<tr>
<td class="f14">您好:々冰清☆玉洁々 </td>
</tr>
<tr>
<td>
<a href="http://www..com/search/_help.html#n5" target=_blank>经理 四级</a> ( 1394 )</td>
</tr>
</table>
<table cellSpacing=0 cellPadding=0 width="100%" border=0>
<tr>
<td height=22>• <a href="/q?ct=17&word=%A1%A9%B1%F9%C7%E5%A1%EE%D3%F1%BD%E0%A1%A9&rn=25&lm=393738&tn=ikuserask">我的提问</a></td>
<td>• <a href="/q?ct=23&cm=7001&tn=ikuserscore&un=%A1%A9%B1%F9%C7%E5%A1%EE%D3%F1%BD%E0%A1%A9">个人中心</a></TD>
</tr>
<tr>
<td>• <a href="/q?ct=17&word=%A1%A9%B1%F9%C7%E5%A1%EE%D3%F1%BD%E0%A1%A9&rn=25&lm=459274&tn=ikuseanswer">我的回答</a></td>
<td>• <script language="javascript">
document.write('<a href="/q?ct=21&cm=13&tn=iksubmit&lu=' + escape(location.href) + '">退出</a>');
</script></td>
</tr>
</table>
</td></tr></table>
<!--结束登陆框-->
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr> <td class="bgtle" nowrap>同类热点问题</td></tr>
<tr> <td class="bgcntLn">
<table width="152" border="0" cellpadding="0" cellspacing="0" style="table-layout:fixed;word-wrap:break-word;">
<tr><td width=10 valign="top">• </td>
<td><a href="/question/1663389.html?md=1" target="_blank">为什么(12月)最近jmp3.net老登陆不上,是不是网站关闭了?</a></td></tr><tr><td width=10 valign="top">• </td>
<td><a href="/question/1696613.html?md=1" target="_blank">我的这个网址不知道取什么名字!!</a></td></tr><tr><td width=10 valign="top">• </td>
<td><a href="/question/1521709.html?md=1" target="_blank">上网的利与弊</a></td></tr><tr><td width=10 valign="top">• </td>
<td><a href="/question/1702531.html?md=1" target="_blank">谁有图片</a></td></tr><tr><td width=10 valign="top">• </td>
<td><a href="/question/1571881.html?md=1" target="_blank">关于qq代码一点不会,谁可以帮我?</a></td></tr>
<tr><td></td><td height="22" ><a href="/browse/88?lm=5" class="lmore">更多>></a></td></tr></table>
</td></tr></table>
<br>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="bgcntBor4">您想在自己的网站上展示<br>网络“知道”上的问答吗?<br>来<a href="/iknowcode.html" target=_blank>获取免费代码</a>吧!
<hr size="1" color="#999999">如要投诉或提出意见建议,请到<a href="http://post..com/f?kw=%B0%D9%B6%C8%D6%AA%B5%C0%CD%B6%CB%DF" target="_blank">网络知道投诉吧</a>反馈。
</td>
</tr></table>
<br /><a href="/q?ct=20&qid=1903532&pn=65535&rn=25&tn=rssqb" target="_blank" title="订阅“★★★高手请进!!!有关计算机网络技术★★★”的最新回答"><img src="http://www..com/search/img/rss_xml.jpg" border="0" width="36" height="14" align="absmiddle"></a>订阅该问题
<br />
</td></tr></table>
<table width="588" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="bgtle" nowrap>待解决</td>
</tr>
<tr><td class="bgcntBor3">
<table width="100%" border="0" cellspacing="0" cellpadding="0" class=zhtable>
<tr>
<td class="f14B">★★★高手请进!!!有关计算机网络技术★★★</td>
</tr>
<tr>
<td valign="top"><span class="f12rd"><img src="https://gss0.bdstatic.com/70cFsjip0QIZ8tyhnq/img/iknow/icn_point.gif" width="16" height="16" align="absmiddle"> 悬赏分:30</span> - <span class="f12gy">离问题结束还有 14 天 23 小时</span></td>
</tr>
<tr>
<td class="f14">1在TCP运输连接管理当中采用三次握手建立TCP连接,在其第三次握手中,ACK=X+1,问:X值如何确定,为什么?<br>2长度为100字节的应用层数据交给运输层传送,再交给网络层传送,其数据偏移均为6,最后交给数据链路层的以太网传送,加上首部和尾部共18字节,求数据的传输效率<br><br>跪求详解!!!!万分感谢!!!答对者有追加分!!!<br></td>
</tr>
<tr>
<td align="right"><span class="f12gy">提问者:</span><a href="/q?ct=23&cm=400&tn=ouserinfo&un=861827" target=_blank>861827</a> - <a href="http://www..com/search/_help.html#n5" target=_blank>试用期 一级</a> </td></tr>
<tr><td><input type=button value="我来回答" onClick="location.href='#reply';"> </td> </tr>
</table>
</td>
</tr>
</table>
<br>
<form method="post" name=fdf action="/q" onSubmit="return checkcoAndsn(this,'回答');">
<input type="hidden" name="ct" value="22">
<input type="hidden" name="cm" value="100009">
<input type="hidden" name="tn" value="ikreplysubmit">
<input type="hidden" name="qid" value="1903532">
<input type="hidden" name="cid" value="88">
<script language="javascript">
document.write("<input type=hidden name=lu value="+escape(location.href)+ ">");
</script>
<table width="588" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="bgcntBor4"><table width="100%" border="0" cellpadding="0" cellspacing="0" class=zhtable>
<tr valign="top">
<td width="22%" nowrap class="f14"><a name="reply"></a>我也来回答:</td>
<td width="78%"><textarea name="co" cols="50" rows="10" onKeyDown="ctlSubmit(event);"></textarea>
<br>
回答即可得2分,回答被采纳则获得悬赏分以及奖励20分。 <a href="http://www..com/search/_help.html#n4">积分规则</a>
<br>回答字数在10000字以内</td>
</tr>
</table>
<br> <table width="100%" border="0" cellpadding="0" cellspacing="0" class=zhtable>
<tr valign="top">
<td width="22%" nowrap class="f14">参考资料:</td>
<td width="78%"><input name="sn" type="text" size="50" onKeyDown="ctlSubmit(event);">
<br> <span class="style3">如果您的回答是从其他地方引用,请表明出处。</span> </td>
</tr>
</table>
<br> <table width="100%" border="0" cellpadding="0" cellspacing="0" >
<tr>
<td width="22%" class="f14"></td>
<td width="78%"><input type="submit" value="提交回答" class="bnsrh">
<input type="checkbox" name="md" value="1" style="margin-left:40px;">
匿名回答 </td>
</tr>
</table></td>
</tr>
</table>
</form>
</div>
<table width="770" border="0" align="center" cellpadding="0" cellspacing="0" style="clear:both;"> <tr> <td height="30" align=center><a href=http://www..com/ty/right.html class="cy">&;2005</a>
<font class="cBai">Bai</font></td>
</tr>
</table>
</center>
</body>
</html>
这是你的代码!
B. 计算机网络偏移量怎么算
答案是A,偏移量的意思就是这个数据包是从源数据包哪个地方开始的,因为IP报文有40个字节的IP报文头,所以1300个字节的数据会被分成以下三个包:
A数据包:包含40个字节的IP报文头,0-460字节的数据,偏移量为0;
B数据包:包含40个字节的IP报文头,460-920字节的数据,偏移量为460;
C数据包:包含40个字节的IP报文头,920-1300字节的数据,偏移量为920
C. 计算机网络中IP数据报的片偏移计算
答案是A,偏移量的意思就是这个数据包是从源数据包哪个地方开始的,因为IP报文有40个字节的IP报文头,所以1300个字节的数据会被分成以下三个包: A数据包:包含40个字节的IP报文头,0-460字节的数据,偏移量为0; B数据包:包含40个字节的IP报文头,460-920字节的数据,偏移量为460; C数据包:包含40个字节的IP报文头,920-1300字节的数据,偏移量为920
D. 计算机原理中偏移值怎么求
计算机原理中偏移值的计算分为“加法”和“减法”两种方式。
计算机汇编语言中的偏移量定义为:把存储单元的实际地址与其所在段的段地址之间的距离称为段内偏移,也称为“有效地址或偏移量”。“偏移量是人工加密方式的一种解析手段,没有更改过默认偏移量的清机加钞员将无法在ATM上获取开锁密码;每个清机加钞员获得的密码为4组,每组2位数字。
E. IP地址偏移是什么意思
IP 数据包在网络中进行传输,如果数据包的大小超过网络设备的MTU值,则需要进行
分段传输。分段偏移量用来标识数据包在该数据流中的位置,也可以理解为使用同一个IP
标识发送多个数据包时的顺序号。发送主机给第一个分段数据包的偏移量赋值为0,对于其
后的分段,该偏移量的值是MTU值减去上一个IP 报头的大小,所以我们也可以说IP 分段
偏移量是指数据包中某个分段相对与第一分段在数据包中的位置。
F. 计算机里偏移地址怎么说
所谓偏移,就是有一个地方为标准,别位置到该位置单位数量。计算机里也如此。就是从某地址到已知地址单位数。计算机中最基本的存储单元是字节。
G. 请计算机数据方面高手进.请帮忙讲解一下何为偏移量、偏移地址,及其作用.(定以高分相酬)
研究偏移量 就先要了解 内存数据储存格式 与位置
通过CE来理解它 下面是CE的 数据修改方法
现在,我们来开始一步一步学习CE的使用吧,通过完成CE带的那个TUTORIAL,按它的要求一步一步做完,如果你做得到,你就基本上算是掌握了CE的用法了。
CE带的TUTORIAL,是英文的,不过没关系,我在教你使用CE来完成这个TUTORIAL的同时,会把TUTORIAL上面的所有英文都翻译出来让你看明白,所以不用怕。
CE带的这个TUTORIAL,是CE作者做的用来让你练习的一个程序,它里面也和游戏一样,在每一个步骤都会有一些类似血(HEALTH)或子弹数量的东西,并且你点了上面某个按钮之后,这些数值也会象游戏中一样减少,这样让你象是修改游戏一样,去找到它的地址,并按TUTORIAL上面的要求修改,当你按它的要求做到了,才让你做下一步。而在第一步时那个输入密码的地方,不是说这个TUTORIAL要输入密码才能运行,而是有时你需要从中间某一步开始时,输入相应的密码会直接从某一步开始,而不用每一次都从第一步开始的。而你每完成一步之后,它也会给你相应的密码。
好了,也许你等不及了,那么我们现在就开始吧。
第一步:
先在开始菜单上找到CE的程序组,找里面的“Cheat Engine Tutorial”(以下简称TUT),点击运行。这个时候就出来这个TUT的对话框,上面一大段英文,而Next这个按钮是灰的,为什么呢?让我翻译一下上面的英文吧,你就明白。TUT上面的英文的译文,我会用【】号把它们括起来。
【欢迎你来到CE的教程(V2.4)
这个教程试图解释在游戏中作弊的基本步骤,并让你更熟悉CE的使用。
首先运行CE,如果你还没运行的话(CCB:因为还没运行,所以Next按钮才是灰色的:)。
然后点击"open process"按钮(在左上角那个有电脑图标的那个)
当进程列表窗口打开后,找到这个教程,进程的名字应该是“tutorial.exe”,除非你把它改名了。选择它,并点击OK。现在先不要管其他所有的按钮,如果你喜欢,以后再研究它们。
当这一切都做对了之后,进程选择窗口将会消失并且在CE上方会显示进程名。
现在,点击NEXT按钮继续到下一个步骤(或者输入密码而进到你想去的其他步骤)。
】
好了,上面的这些英文,我翻译过来了,所以这一步应该不需要我再补充什么,看这些译文应该能明白怎么做,就是开TUT,开CE(哪个先开都没关系),然后点击CE左上的那个选择进程的按钮,选择这个TUT的进程,这样就可以点NEXT进到下一步了。
第二步:
【第二步:精确数值扫描(密码:090453)
现在你已经在CE中打开了TUT,让我们进入到下一步吧。
你看到在这个窗口的下方的文字Health:XXX
每次你点击"Hit me"(打我)时,你的Health(血)会减少。
要进到下一个步骤,你必须找到这个数值并把它改为1000
要找到这个数值,有几个不同的方法,但我会告诉你一个最简单的,'Exact Value(精确数值扫描)':
首先确认数值类型设置为2字节或4字节,1字节也可以的,但当你最后在修改它时你会遇到麻烦(虽然很容易解决)(CCB:大家不会忘了吧?1字节表示的最大数值是255,而这里要你改为1000,所以虽然用1字节能找到,但要改却要连前一字节一起改,所以有点麻烦,不过不是大麻烦)。8字节可能也可以,如果这个地址后面是0的话,不过我不敢打赌。Single, Double, 以及其他的扫描方式不行,因为它们储存数值的方式不同。
当数值类型设置正确后,确认扫描方式设置在'Exact Value'
把血的数值填在数值输入框上,并点击'First Scan(首次扫描)'
过一会儿(如果你有一个非常慢的电脑的话)扫描完成并且扫描的结果会显示在左边(如果找到的地址的数量少于设置的数值的话)。
如果你找到多于一个地址而你不知道哪一个是正确的地址的话,点击TUT上的'Hit me',并把新的血的数值填到数值输入框,并点'Next Scan(再次扫描)'
重复这些步骤直到你确认你已经找到它的地址了(在地址列表上只有一个地址)
现在双击左边列表上的地址,这样会让这个地址移动到下方的列表上并显示它的当前数值。
双击(下方列表的)数值栏(或者选择它,并按回车),并把它修改为1000。
如果一切都OK,NEXT按钮将会变成可点击的了,你就准备好了进入下一步了。】
这一步,也不用我再补充什么了,这个TUT已经说得很清楚,这是使用CE的最基本功能,即找到数值,如果扫描结果太多,试图改变数值然后再次扫描,直到结果剩下很少或者1个为止,这样你就找到了要修改的数值的地址,并且也就能修改它了。到这一步,你已经能对付很简单的游戏了,不过现在的大多数游戏都没这么简单,但至少你已经学到最基本的一步,就是精确数值的扫描和修改了。现在就点击NEXT进入下一步吧!
第三步:
【第三步:未知初始数值(密码:419482)
OK,看来你已经理解了怎样使用精确数值扫描找到一个数值了,让我们进入下一步吧。
在上一步中我们知道初始数值所以我们进行了精确数值扫描,但现在我们有一个进度条,我们不知道它开始时的数值。
我们只知道这个数值是在0到500之间,并且每次你点'Hit me'之后你会减一些血,每次减的血量会显示在进度条的上方。
同样的有好几个方式找这个数值,(例如使用“减少了什么数值”的扫描方式),但我只解释最简单的方式,“Unknown initial value”(未知初始数值)和“Descreased value(减少了的数值)”。
因为你不知道现在它的数值是多少,所以使用精确数值不行了,所以选择扫描方式为"Unknown initial value",同样的,数值类型选择4字节,(大多数WINDOWS应用程序使用4字节数据)
点击'First scan'并等它扫描完成。
当扫描完成后点击'Hit me',你会掉一些血(掉的血量多少会在血条上方显示几秒然后消失,但你不需要这个数值)
现在回到CE,并选择'Decreased Value'(减少了的数值),并点击“Next Scan”
当扫描完成后,再次点击'Hit me',并重复上面的步骤,直到你找到了若干地址。
我们知道这个数值是在0到500之间,所以选择比较象我们要的那个地址是,并把它加到下边的列表。
现在,把它改为5000,才能进到下一步。
】
这一步,稍为复杂一点了,这是对那些血条之类的东西的扫描。作者说知道数值是0到500之间,但没说是怎么知道的。我的看法是,这东西一方面靠猜,另一方面靠试。你也许会说,比如血条或蓝条,上面或下面不是有数字吗?是的,有些有,有些没有,但有时,血条上面有个表示血的数字,说血是548,但你就知道它是真的按这个值存在内存的吗?不一定的哦,很多游戏的开发者,可能会用某一个方式存真正的血的数值,而用另一个方式显示,例如,最简单的就是,真正的血是你看到的数值的3倍,例如上面说的548,其实在内存可能是1644,而当它要显示的时候才把1644除以3然后显示出来,所以如果你受这个显示数字的误导,结果就有可能找不到真正的地址。所以关于那些以长度表示的数值,一般还是靠猜,然后根据猜测来找。还有,CCB友情提醒一下,其实有时在找到的数值比较多的时候,试试在扫描的过程中,确认数值确实没改变的情况下,多加几次"Unchange"(无变化)扫描,这样可以再减掉一些无关的结果。另外,其实在这一步,如果你够聪明,每次点了Hit me之后记住血条上面显示的减少的数字,再在CE中输入刚才的数字(负号不要,负号只是表示它是减少的),并选择'Decreased value by',即“减少了什么数值”,这样也能更快地找到准确的地址,但这种方式是在要知道减少了多少这个具体数值才有用。好了,继续下一步吧。
第四步:
【第四步:浮点数(密码:890124)
在前面的教程中,我们使用字节来扫描,但有些游戏使用了叫做“浮点数”的记数方法。
(可能是为了防止简单的内存扫描)
浮点数是带有小数点的一些数字(如5.12或11321.1)
如下边你看到你的血(Health)和子弹(Ammo)。两者都以浮点数储存,但血是储存为float(浮点数)而子弹是储存为double(双精度浮点数)(CCB:这是数据类型的术语,float和double都是浮点数,但float为单精度数,而double为双精度数,它们在电脑里面占用的字节数长度不同,而所能表示的精度也不同,看不懂不要紧,反正知道这是两种不同的浮点数就行)。
点击Hit me可以减少一些血,而点击shoot(CCB:其实是Fire)可以用掉0.5的子弹。
你得把这两者都修改到5000或者更多才能进下一步。
精确数值扫描方式在这一步能工作得很好,但也许你想试试其他的扫描方式。(CCB友情提示:扫描子弹的时候试试'Decreased value by'方式就不错,数值填入0.5,很快就能找到)
】
这一步,其实也没什么,只是让你熟悉不同数据类型的扫描。再次提醒一下,其实有时游戏的开发者为了不让你太容易扫描到数值的地址,所以有时故意颠倒黑白,例如你看到有小数的地方,有时在内存却是用整数来保存,而你明明看到是显示为整数的数值,却有可能在内存中是用小数来保存,所以有时不要轻易地被你看到的东西误导,特别是在多次搜索不到结果的时候,有时要换换别的方式,不要让狡猾的游戏开发者骗了:)。
第五步:
【代码寻找(密码:888899)
有时一些东西的保存位置在你重新开始游戏时会改变,甚至是在你玩的时候也会变,在这种情况下,你用二件事仍然能做出可以用的内存列表。
在这一步我会描述怎样用寻找代码功能。
下面的数值每次你开始这个TUT的时候会存放在不同的位置,所以一个普通的内存地址列表将会不适用。
首先找到这个数值的内存地址(你能进到这一步,我假设你已经知道怎么做了)
当你找到地址后,右击CE中的这个地址,并选择“Find out what writes to this address”(找到是什么改写这个地址),一个窗口将会出现,上面会有一个空的列表。
然后,点击这个TUT上的'Change value'(改变数值)按钮,回到CE,如果一切都做得对,会看到一个地址和一些汇编代码。
点击这个地址并选择Replace(替换)选项把它替换成什么也不做的代码,这样还会将代码地址加到高级选项窗口上的代码列表(它将会一起保存,如果你保存地址表的话)。
点击Stop,这样游戏(CCB:指这个TUT)将会再次正常地运行下去,并点Close关闭这个窗口。
现在,点击这个TUT上的Change value按钮,如果一切都做对,NEXT按钮将会变成可点击的了。
注:如果你以足够快的速度锁定这个地址,这个NEXT按钮也会变成可见的。
]】
越来越精彩了,现在不但教你找地址,还教你找那条修改这个地址的指令了,虽然,你还不太清楚怎样手工修改找到的地址,但至少也比单纯地找数值的地址并修改和锁定要好一些了,不是吗?别急,更精彩的还在后面呢。
第六步
【指针(密码098712)
在上一步我解释了怎样用代码寻找功能对付变化位置。但单独用那个方法不容易找到地址来修改为你要的数值。
这就是为什么要用到指针了:
在TUT下面你会找到两个按钮,一个会改变数值,另一个不但会改变数值并且还会改变数值在内存中的位置。
在这一步,你不需要真的懂汇编,但如果你懂的话会很有帮助。
首先找到数值的地址,当你找到后,再找找是什么在改写这个地址。再次改变这个数值,这样会找到一个代码地址,双击这个代码地址(或者选择它并点击More info),这样一个新的窗口会打开并显示详细的信息告诉你当这个指令运行时会发生什么事(CCB:这个新出来的窗口上,那条指令会是红色的)。如果这个汇编指令里面没有包括一个在方括号中的东西,(CCB:说明这个不是我们要的)那么再看看代码地址列表中另一个代码地址。如果有方括号,就是说CE认为找到了数值的指针了。
回到CE主窗口,(你可以让那个扩展信息窗口开着,但如果你关了,要记住在方括号中间的内容)(CCB:要关了那个有代码地址列表的窗口,才能回到CE主窗口,但扩展信息窗口可以不用关掉),并做一次4字节的扫描,扫描扩展信息窗口告诉你的十六进制数。(CCB:就是方括号里面的内容,如果方括号里面是[eax],那么看看扩展信息窗口下面EAX=后面的数值)。当扫描完成时它可能返回一个或几百个地址。大多数情况下你要的会是最小(CCB:指地址最小,也就是排在列表的最上面)那一个。现在点击手工添加内存地址(Add address manually)并在pointer(指针)这个选项上打勾。
这个窗口将会改变,并允许你填入指针的地址和偏移量。
在地址那里填入你刚才扫描到的地址。
如果汇编指令在后面有一个计算(例如:[esi+12])那么把数值填在后面,否则让它保持0(CCB:就是如果有类似那样的计算,把12这个数值填在偏移量(OFFSET)那里,否则那里填0),如果是更复杂的指令,看看它的算式。
举例说明更复杂的算式:
[EAX*2+EDX+00000310] eax=4C 并且 edx=00801234.(CCB:这时各个寄存器的值到底是多少,要看扩展信息窗口下方,那里有各个寄存器在执行这条指令时的值)
在这个情况下EDX会是数值的指针,而EAX*2+00000310则是它的偏移量,所以你要填的偏移量会是2*4C+00000310=3A8.(这些都是在十六进制下计算的,使用WINDOWS的计算器在科学方式下用十六进制计算)。
回到TUT(CCB:?),点击OK,这个地址将会加到列表上,如果没搞错,将会显示P->xxxxxxxx,xxxxxxxx会是你找到的数值的地址。如果不正确,那你一定是哪里做错了。
现在,使用那个指针改变数值为5000并锁定(就是在下面的地址列表中,点最前面FROZEN那一栏的勾)它,然后(CCB:应该是这里才回到TUT吧?),点击'Change pointer'按钮,如果一切正确,那么NEXT按钮将变成可见的了。
额外信息:
在这个TUT中,事实上数值是由一个指针指向另一个指针(CCB:再指向真正的数值,就是使用了“指针的指针”,有点象绕口令:),但要完成这个TUT只需要一个指针。要找到这个指针(CCB:是说要找到指向指针的另一个指针),只要搜索是什么改变那个指针。
如果你懂汇编,你可能会看到类似这样的:
mov eax,[ebp-4]
mov eax,[eax+310]
这些别搞混了,只使用扩展信息窗口告诉你的数值。ebp-4指向堆栈中保存了指向这个指针的指针,但堆栈的位置总是在变化,所以不要搜索ebp,而要搜索eax的数值。
】
这一步,确实就够复杂了,也许你到这一步真的有点想放弃了。不过,如果我告诉你,这是这个TUT的最后一步了,你还会想放弃吗?呵呵,坚持啊,看不懂就问,把CCB这家伙问倒了才好呢:)。其实这就是对付DMA的方法之一了,就是先找到地址然后找到指针,找到指针就好办了。
【做得好,你完成了CE的教程了,再玩玩这个TUT并学习一下其他的扫描方法怎样工作的】
==============================================================
如果你一边看一边做,已经做到了这一步,CCB要恭喜你,你已经领到2005年第一学期的GH小学入学证书了,呵呵。以后就是个小学生了,可要听家长和老C的话哦,不要捣乱,不要迟到旷课,知道吗?
其实,这个教程,本身也并不很详细,而且本身可能由于作者疏忽并且英语也不是作者的母语吧,所以里面也有些不正确的地方,有些地方我是根据我的理解做了修正的,虽然即使你做完成了这个教程,也不是说你就很了不起了,但至少,你已经学会了CE的基本操作了,只要再多做练习,熟悉CE的操作和各种扫描方式的使用,对付一些简单的游戏,已经是游刃有余了,但要更深入地使用CE的更高级的功能,还要再多学习的。
其实到这里为止,CE界面上的一些东西还没有详细的讲过呢,不过在你做完这个教程之前,其实讲了可能你也听不太清楚,所以我会在大家熟悉了CE的操作后,再另外写一个相对全面一点的介绍CE各个部分和各个功能的帖子。
怎么写了一夜,都不觉得是自己在写东西,倒象是在翻译呢?也许是职业病吧,告诉你,在很久很久以前,CCB还不懂电脑的时候,就是专业做翻译的,不过不是做英语的翻译:)。
有时真的搞不懂,我自己三分钟就能做完的这个教程,翻译起来再拼凑上自己的几句,就竟然要花掉我五六个小时?也许,这就是创作和享受的差别吧。种田的人,从一棵谷苗到一把米,要花多长的时间?你却一口就能把它吃下:)
最后,欢迎大家提问题和扔臭鸡蛋,当然,扔几个魔功120的魔灵,我也绝对不反对的。不过一定要记得扔在小青蛇,别的区,你扔了我还不想捡呢:)
补充说明:最后一步不清楚或者进行不下去的朋友,请看本主题73楼,有详细的单独说明。
另外,本讨论主题后续的讨论有一些很有参考价值的讨论,而且31楼和65楼也有一些我做的补充,建议大家特别是那些在做这个教程的过程中遇到疑难的朋友,细心读完整个讨论主题的所有后续讨论,也许你遇到的问题以前有人遇到过并且知道问题出在哪里和怎么解决了。还有,本教程是针对CE4.4所带的TUT,新版本的TUT增加了几个步骤,新增加有步骤在本版精华区中有相应的教程,如果你用的是新版的CE,后面几步可以到精华区去看看。
73楼
现在我来开始单独做最后这一步。
一,运行CE,运行TUT,在CE中指定tutorial.exe这个进程,这个我想大家都会了吧。
二,因为是单独做,所以我输入了密码直接跳到最后一步,密码是098712,输入后点后面的OK就直接出现最后一步。
三,根据TUT的要求,我们先找到数值所在的内存地址,现在在TUT上面显示的数字是100,于是我在CE中直接输入100然后FIRST SCAN,这一步得到了83个地址(这个并不重要,也许你的情况不是83,也许更多,也许更少)。
四,然后,我点TUT左下的写着“Change Value”的按钮,现在TUT上的变成723,于是我在CE中输入723然后NEXT SCAN,现在就只得到一个地址了,地址是00BD50BC。
五,接下来的一步就是把这个地址加到CE下边的地址列表中,双击左边的这个地址就自动加到下面的地址列表了。
六,根据TUT的要求,要我们用CE的Find out what writes to this address,于是我在下边的地址列表中对着这个地址点右键,在弹出菜单上点击Find out what writes to this address。接着会出来一个让你确认的对话框,点YES,接着CE的主窗口右边会多出一个新的窗口,窗口标题是"Created processes",它下面的列表框中有一个项目,内容是FFEA10D7,这个就是TUT这个进程的进程号或者叫PID,双击它或者选择它后点下面的Select。这样CE的主窗口前面又会多一个新的窗口,标题是"The following opcodes changed the selected address",现在可以把"Created processes"窗口关掉了。
七,回到TUT,现在仍然是点它左下的Change Value。因为我们现在只想改变它的值,还不想让那个数值的地址也改变,所以只点左边的这个按钮。马上你就能看到在CE前面的那个The following opcodes...那个窗口里出现一条指令,在我这里它显示的是004560cf 89 10 mov [eax], edx。如果是在对游戏进行实际的跟踪而不是在完成这个教程,有时可能这个列表会有三四条指令。事实上这个就是CE告诉我们,它找到了是这条指令改变了那个地址上的数值。不过这还不够,所以还要继续。
八,现在我们先按The following opcodes这个窗口右下角的STOP,先停止CE对TUT的跟踪,然后如TUT所说,双击这条找到的指令,或者单击它然后点右边的MORE INFORMATION。在出来的EXTRA INFO这个窗口,上面说的那条指令显示为红色,在这里我再大概说一下这条指令的意思,它是把edx这个寄存器里面的数值,放到一个内存地址里,是哪个内存地址呢?这个内存地址就保存在eax。记得吧?加了方括号的寄存器就不是指数值,而是指一个内存地址,因此这一步不是把edx的值放到eax这个寄存器里面,而是把edx的数值放到保存在eax中的那个地址。因此,我们要看看刚才程序执行到这一条指令时,eax的数值是多少。在extra info这个对方框下半部,我们可以看到EAX=00BD50BC,因此我们知道EAX的值。
九,现在我们按The following opcodes这个窗口下边的Close按钮,先把它关掉,这样才能回到CE的主窗口。而EXTRA INFO可以留着。现在根据TUT的要求,我们要来做一次十六进制的扫描,点击CE主窗口的NEW SCAN,然后把输入数值的前面那个HEX的选项打上勾,表示我们要输入的是十六进制数,再把在EXTRA INFO中看到的数字,也就是00BD50BC这个十六进制数输入,然后按FIRST SCAN进行扫描,马上一个唯一的结果就出来了,在我这里搜索到的结果是00BD4E64。
十,现在我们来按TUT的要求,以指针的方面把这个结果手工加到地址列表中,并且锁定它。在CE主窗口的右中部有个按钮“add address manually”,点它之后会出现一个添加地址的对话框。在OK这个按钮的上方有个Pointer的选项,因为我们是要以指针方式添加这个地址,所以这个选项要打勾。打勾之后,上面原来填地址的地方就变成问号不让你输入了,现在是要在下面的输入框中输入地址和偏移量了。地址就是上面第九步扫描得到的结果,即00BD4E64,而因为指令中方括号中只有一个EAX,而没有算式,所以偏移量是0,我们不用改动。同时我们也可以注意到,当我们输入完00BD4E64之后,上面刚才不让输入地址的地方再在就变成00BD50BC,也就是现在数值所在的地址,说明我们这个指针确实是指向正确的位置的了。现在点确定,新添加上的地址就会出现在地址列表上,并且显示为P->00BD50BC,表示这是一个指针,它当前指向的内存地址是00BD50BC。现在来试试TUT下边另一个按钮,就是改变数值同时改变内存地址的那个“Change pointer”按钮,看看地址变了我们的指针是否还会正确指向它新的地址。确实我们按这个按钮之后,地址列表上的地址P->后面的内容变了,就是说现在TUT把这个数值放到新的地址了,不过地址表上那个数值仍然和TUT上显示的数值一样。经过这一步的测试我们也可以更好地增加对DMA和指针方面的认识。现在只要按TUT的要求把这个地址前面的FROZEN打上勾,再把它的数值改为5000,然后点TUT上的Change pointer按钮,NEXT就出现了。
其实我想大家在这一步卡住 的原因,一方面是可能对DMA和指针这方面的内容还不够了解,另一方面是没认真看TUT上的文字,我相信大家按照我上面说的步骤做一遍应该就觉得不会那么困难了。
由于TUT中找到的指令比较简单,没有偏移量,因此我在这里再补充一点关于偏移量方面的内容。假设刚才我们上面找到的指令是mov [eax+3C], edx,并且假设EXTRA INFO窗口上的数值和上面说的一样的话,那么,我们要扫描的就是eax+3C,也即方括号中的数值了。上面例子中eax的值是00BD50BC,那么eax+3C=00BD50BC+3C=00BD50F8,在第九步要扫描的就是这个00BD50F8了,而在最后手工添加地址到地址列表的时候,地址要填00BD50BC,偏移量要填3C。
还有,在这个例子中,我们可以把TUT中那个数值看成是游戏中的HP的值,那么,上面的00BD50BC就是在某一时刻HP所在的内存地址,这个地址是会改变的(例如我们点了Change pointer按钮时它就会变化),而00BD4E64这个地址就是这个HP的指针,不管地址怎么变化,但变化后的新地址都保存在00BD4E64这个指针位置上。所以我们只要找到指针,不管内存地址怎么变,我们都能找到数值。从这个例子也可以让大家更好的了解指针到底是怎么一回事。
H. ip数据报中的片偏移怎么计算的
偏移量的意思是这百个数据包是从源数据包哪个位置开始的,因为IP报文有40个字节的IP报文头。度所以问1300个字节的数据会被分成以下三个包:
1、A数据包:包含40个字节的IP报文头,答0-460字节的数据,偏移版量为0;
2、B数据包:包含40个字节的IP报文头,460-920字节的数据,偏移量为权460;
3、C数据包:包含40个字节的IP报文头,920-1300字节的数据,偏移量为920。
(8)计算机网络数据偏移怎么看扩展阅读:
IP首部的可变部分就是一个可选字段。选项字段用来支持排错、测量以及安全等措施,内容很丰富。
此字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目。某些选项项目只需要1个字节,它只包括1个字节的选项代码。但还有些选项需要多个字节,这些选项一个个拼接起来,中间不需要有分隔符,最后用全0的填充字段补齐成为4字节的整数倍。
增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。新的IP版本IPv6就将IP数据报的首部长度做成固定的。
网络-IP数据报
I. 起始地址偏移量是什么,怎么看 计算空间大小时,那还得考虑对齐,但我不知道,结构的起始地址偏移量怎
个操作系统都有自己的默认内存对齐系数
内存对齐可以用一句话来概括:
“数据项只能存储在地址是数据项大小的整数倍的内存位置上”
例如int类型占用4个字节,地址只能在0,4,8等位置上。
同样的:double类型只能在0816等位置上。
char0
int8
double16
char24
size=24
structxx{
charb;0
chard;1
inta;4
doublec;16
};
size=16