二进制汇编代码在VC中的移植和应用 - Read.DOC

二进制汇编代码在VC中的移植和应用 - Read.DOC

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二进制汇编代码在VC中的移植和应用 - Read.DOC

二进制汇编代码在VC中的移植和应用 作者:老实和尚 coverlove@163.com 1、前言 对于没有源代码的开发库中提供的函数或者关键代码(一般是dll或者exe程序提供)。我们不能分析出其某个函数或者某段代码的实现细节,而又想在自己的工程中进行代码复用,这时我们比较直观的做法就是移植其汇编代码到我们的开发环境中。 本文主要介绍在如何VC (Microsoft Visual C++ 6.0) 中内联汇编代码及其注意事项。主要涉及的工具有OLLYDBG(修改版本的OLLYICE功能更加强大)、Microsoft Visual C++ 6.0。 2、OLLYDBG简介 OllyDbg 是一种具有可视化界面的 32 位汇编-动态分析调试器。它的特别之处在于可以在没有源代码时解决问题,并且可以处理其它编译器无法解决的难题。 运行环境: OllyDbg 可以以在任何采用奔腾处理器的 Windows 95、98、ME、NT 或是 XP(未经完全测试)操作系统中工作。 支持的处理器: OllyDbg 支持所有 80x86、奔腾、MMX、3DNOW!、Athlon 扩展指令集、SSE指令集以及相关的数据格式,但是不支持SSE2指令集。 配置: 有多达百余个选项用来设置 OllyDbg 的外观和运行。 数据格式: OllyDbg 的数据窗口能够显示的所有数据格式:HEX、ASCII、UNICODE、 16/32位有/无符号/HEX整数、32/64/80位浮点数、地址、反汇编(MASM、IDEAL或是HLA)、PE文件头或线程数据块。 3、应用实例 如上图有一个函数PcInfo.dll,里面导出了两个函数,RegistryCode 和IsValidCheckCode。通过OllyICE我们很容易找到这两个函数的实现过程。 第一个函数RegistryCode有三个参数,第一个压栈的是一个字符串的地址,第二个和第三个是一个整数,通过函数返回后对eax寄存器进行了检查可以断定函数带一个int型的返回值。 函数调用后没有进行堆栈的平衡说明这个函数是一个__stdcall方式调用的,堆栈平衡由被调用者平衡。调用方式确定后就可以还原函数原型如下: int __stdcall RegistryCode(int a1,int a2,const char * key) 函数内部代码实现如上图,我们可以将汇编实现代码拷贝出来如下: 83EC 10 sub esp, 10 8D4424 00 lea eax, [esp] 56 push esi 57 push edi 33FF xor edi, edi 1000228B 57 push edi 1000228C 50 push eax 1000228D 57 push edi 1000228E 68 3F000F00 push 0F003F 57 push edi 57 push edi 57 push edi 68 push ; ASCII Software\abc\def 1000229B 68 push 100022A0 FF15 call [ADVAPI32.RegCreateKeyExA] ; ADVAPI32.RegCreateKeyExA 100022A6 85C0 test eax, eax 100022A8 75 56 jnz short100022AA 8B7424 24 mov esi, [esp+24] 100022AE 8B0D mov ecx, 100022B4 8B15 8C910010 mov edx, [1000918C] 100022BA A1 9091

文档评论(0)

youbika + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档