系统级编程lab5

系统级编程lab5

ID:22452809

大小:237.00 KB

页数:7页

时间:2018-10-29

系统级编程lab5_第1页
系统级编程lab5_第2页
系统级编程lab5_第3页
系统级编程lab5_第4页
系统级编程lab5_第5页
资源描述:

《系统级编程lab5》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Practicel上周做了,复制过来。前面得keyl=3、key2=777下面我们继续往后面看代码,并且通过提示我们了解到我们需要想办法使程序进入并执行msg2=extract_message2(start,stride);但是从正常的程序逻辑上看,我们无法使msgl为空而顺利进入到条件码中。那么我们需要考虑应该在process_keys34中做出调整。我们能否在执行完process_keys34后偷偷的改变msgl的值呢?在看了这段函数的代码后,我们发现这个函数中两个变量的范围相差太大了,一个是全局变量message(msgl的实际指向),一个是局部变量kcy3o那么我们需要换一

2、个思路,能否让函数在返回的时候直接跳转到目标代码呢?如果耍这么做,我们就需要修改程序在运行过程中的栈帧结构中的存储数据了。现在让我们来分析一下程序在调用process_keys34之前的栈巾贞结构:004013780040137Ccnpjedviordptr[ebp-1Ch],0nain+ODEh(0O40138e)110:process_keys34(&key3,&key4);0040137Eleaeax,[ebp-1Ch]00401381pusheax00401382leaecx,[ebp-18h]00401385pushecx00401386call@ILT+25(proce

3、ss_keys34)(0040101e)0040138Baddesp,8111:从汇编码中我们可以看到在调用之前整个栈帧结构中数据的存储细节。首先是将参数key3、key4压入栈中保存,然后在传入这些参数。然而这些参数的传递都是传地址的,所以我们在process_keys34中可以通过&key3的相对定位来改动调用者的栈帧数据。在这之前让我们来想想调用时的栈帧结构:key4key3返回地址Callee的栈帧我们可以看到,如果我们能够修改返冋地址使它返冋到我们期望的位置就可以丫。那么我们现在需要确定这个返回地址相对于key3的距离是多少,通过图我们可以看到这个地址就在key3的下面,

4、只需耍在key3基础上减一(这个减一是在int下的,实际上在地址层面应该是-4)就好了。所以我们得到了key3的值-1.另外我们需要感谢出题者,他一直给我们提供充足的相对数据。在这里我们只需要在原返回地址上面加上一个合适的值就好了。113:nsg1=extract_nessage1(start,stride);0040138Enouedx,duordptr[ebp-OCh]00401391pushedxI00401392noueax9duordptr[ebp-8]00401395pusheax00401396call@ILT+5(extract_nessage1)(0040100a

5、)0040139Baddesp,8I004O139Enoudwordptr[ebp-2肋],eax114:115:if(*nsg1==AO1){004O13A1nouecx,dwordptr[ebp-20h]004O13A4nousxedx,byteptr[ecx]004013A7testedx,edx004013A9jnenain+131h(O04013e1)116:process_keys34(&key3,&ke^4);O04O13ABleaeax,[ebp-1Ch]O04O13AEpusheax004O13AFleaecx,[ebp-18h]004013B2pushecx00

6、4013B3call@ILT+25(process_keys34)(0040101e)O04O13B8addesp,8117:nsg2=extract_nessage2(start,stride);O04O13BBnouedx,duordptr[ebp-OCh]从上图中,我们可以看到原先的返

7、Hl地址和我们需要抵达的返回地址0040138e是原先保存在栈帧中的返回地址,而我们期望程序返回时直接到达0x004013bbo这样我们就得到了key4的具体值:田&dummy

8、0xO018ff44&dummy-&key1

9、3田&key3J0xO018ff30key3-1j-10x004013

10、bb-0x0040138ej45Watclll2Key4=(0x004013bb-0040138e)/4=45oIi"i—I所以keyl234分别就是3777-145。Practice200951850pushcbp将ebp压入栈顶位置。ETP跳到00951851。栈顶ESP变为0091FD6800951851movebp,esp将ESP的值赋值给EBP,栈底EBP变为0091FD6800951853subesp,0D8h将ESP的值减小0D8h,变为00D2FBF8

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。