教案逆向分析一个完整的c 程序包含寄存器与参数传递详解.docxVIP

教案逆向分析一个完整的c 程序包含寄存器与参数传递详解.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
教案逆向分析一个完整的c 程序包含寄存器与参数传递详解

逆向分析一个完整的C++程序包含寄存器与参数传递详解最近在分析C++ dump?文件的时候觉得有必要将一些必要的反汇编东西总结一下以备别人参考,自己有时间的时候也可以进行更多的改进。下面通过一个简单的C++代码转成汇编代码后的详细解释说明一下C++和汇编的对应关系,以及如何识别汇编代码中进行的一些操作的意义。代码的调用关系如下图所示:完整C++代码下:??int?InternalFunctionA(int?nSizeA1,?int?nSizeA2){????int?localnSizeA1?=?nSizeA1;????int?localnSizeA2?=?nSizeA2;????int?nFunctionA?=?localnSizeA1?+?localnSizeA2;????return?nFunctionA;}int?InternalFunctionB(int?nSizeB1,?int?nSizeB2){????int?nFunctionA?=?InternalFunctionA(nSizeB1,?nSizeB2);????return?0;}int?_tmain(int?argc,?_TCHAR*?argv[]){????????int?nFunctionVal?=?InternalFunctionB(36,?64);????coutHello?SolidMango!endl;????return?0;}?那么这段简单的C++代码在转换成汇编代码之后是什么样子的呢?让我们拭目以待,首先让我们看看main函数转换后的代码(debug版), 如下,我们逐条来进行分析,?int?_tmain(int?argc,?_TCHAR*?argv[])?push????????ebp??//栈底压?mov?????????ebp,esp?//栈底下移,更详细的请参考我关于ebp,esp的解?sub?????????esp,0CCh?//局部变量预留空?push????????ebx??//保存ebx??0041157A??push????????esi??//保存esi??0041157B??push????????edi??//保存edi??0041157C??lea?????????edi,[ebp-0CCh] //下移edi到栈?mov?????????ecx,33h?//0CCh/4 = 33?mov?????????eax,0CCCCCCCCh?//eax赋值0041158C??rep?stos????dword?ptr?es:[edi]?//从edi开始做33h次赋值0CCCCCCCCh?,初始化栈内存????????int?nFunctionVal?=?InternalFunctionB(36,?64);0041158E??push????????40h??//参数64入栈?push????????24h??//参数36入?call????????InternalFunctionB?(41101Eh)?);//到41101Eh处函数调?add?????????esp,8?//函数调用后将参数弹出,清理栈0041159A??mov?????????dword?ptr?[nFunctionVal],eax?????coutHello?SolidMango!endl;0041159D??mov?????????esi,esp?0041159F??mov?????????eax,dword?ptr?[__imp_std::endl?(41A338h)]?004115A4??push????????eax??004115A5??push????????offset?string?Hello?SolidMango!?(417800h)?004115AA??mov?????????ecx,dword?ptr?[__imp_std::cout?(41A33Ch)]?004115B0??push????????ecx??004115B1??call????????std::operatorstd::char_traitschar??(411163h)?004115B6??add?????????esp,8?004115B9??mov?????????ecx,eax?004115BB??call????????dword?ptr?[__imp_std::basic_ostreamchar,std::char_traitschar?::operator?(41A320h

文档评论(0)

allap + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档