鱼C论坛

 找回密码
 立即注册
查看: 6534|回复: 12

[技术交流] 调试器之反汇编引擎的使用

[复制链接]
发表于 2014-8-25 07:47:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
反汇编引擎有两种编译方式,一种是静态编译方式,一种是动态编译方式
    那么我们现在就先了解下什么是静态编译呢?什么是动态编译
一、静态编译
     静态编译就是编译器在编译可执行文件的时候,将可执行文件需要调用的动态链接库中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库,
二、动态编译
     动态编译的可执行文件需要附带一个动态链接库,在执行时,需要调用其对应动态链接库中的命令,
     我们了解完静态编译、和动态编译了那我们现在就说一下反汇编引擎的使用。
     首先我们来做第一步就是要把库+到我们要写的程序中的文件,然后在包上头文件,大家可以去网上下载beaengine-win32这个,大家看到这是32位的,那么有32位的那肯定就有64位的是吧,
  • #include "stdafx.h"
  • #include <stdlib.h>
  • #define BEA_ENGINE_STATIC                        //标识以静态库的方式编译
  • #define BEA_USE_STDCALL                                //以STDCALL方式调用
  • #include "BeaEngine.h"                          //静态库头文件
  • #pragma comment(lib,"BeaEngine.lib")
  • int _tmain(int argc, _TCHAR* argv[])
  • {
  •         DISASM ds ={0};                                //保存结构体
  •         char szCode [] = {0x55,0xb8};           //创建一个数组保存汇编指令
  •         ds.EIP = (UIntPtr)szCode;               //把汇编指令给EIP
  •         Disasm(&ds);                                //解析并保存汇编指令
  •         printf(ds.CompleteInstr);                // 输出解析出来的字符串
  •         system("pause");
  •         return 0;
  • }

[color=rgb(51, 102, 153) !important]复制代码



上面的代码是我在控制台上写的,大家可以参考下,代码我已加注释,
首先我们要去我们上面说的那个库也就我们包的头文件#include<BeaEngine.h>中去找到我们下面的结构体
  • typedef struct _Disasm {
  •    UIntPtr EIP;   //
  •    UInt64 VirtualAddr;  //虚拟地址
  •    UInt32 SecurityBlock; //安全模块
  •    char CompleteInstr[INSTRUCT_LENGTH];
  •    UInt32 Archi;
  •    UInt64 Options;
  •    INSTRTYPE Instruction;
  •    ARGTYPE Argument1;
  •    ARGTYPE Argument2;
  •    ARGTYPE Argument3;
  •    PREFIXINFO Prefix;
  •    UInt32 Reserved_[40];
  • } DISASM, *PDISASM, *LPDISASM;

[color=rgb(51, 102, 153) !important]复制代码



   其实我们用不了这么多,我们只用到两个参数一个Eip、一个是CompleteInstr,还有一个函数是Disasm来获取字符串,其实这么就完事了,大家是不是觉的还有很多啊undefined ,其实就这些,其实我们说的直白一点就是获取解析出来的字符串。undefined

下面静态库和动态库,大家有需要可以自己下载,本人没怎么写过帖子,如有什么错的地方,还请大家多多指点,多多指教。
beaengine.rar (699.21 KB, 下载次数: 80)



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-25 10:06:50 | 显示全部楼层
SecurityBlock是指令的安全长度啦,32/64位架构的指令限制不超过15字节,可以防止访问到无效内存。我写的教程最后目标就是写出类似这种反汇编引擎吧,其实很简单的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-28 08:35:14 | 显示全部楼层

我这还有呢  调试器的一套把算是    那天有时间我传上来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-25 14:21:38 | 显示全部楼层
谢谢分享~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-27 23:19:36 | 显示全部楼层
值得一看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-28 09:09:41 | 显示全部楼层
支持楼主~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-31 12:39:44 | 显示全部楼层
在很多源码中都有看到使用od的反汇编引擎的。
http://www.ollydbg.de/srcdescr.htm#_Toc531975954
官网有下载和很详细的使用解释。
只用过一次反汇编引擎
想问下beaengine有什么比较好的地方吗。还是说od的反汇编引擎有什么弊端。(我在一个文章看到有避免使用od反汇编引擎的情况。不知道为什么)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-31 12:42:48 | 显示全部楼层
我有空想这个功能较全的调试器。所以问问。od2.01在加载一堆插件调试大型软件的情况下可能出现od死掉的情况。受不了。od1.x功能又没2.x叼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-31 13:13:58 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-26 18:21:42 | 显示全部楼层
支持楼主,谢谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-7 20:53:05 | 显示全部楼层

支持楼主,谢谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-27 05:15:20 | 显示全部楼层
就是来顶 支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-10 19:11:37 | 显示全部楼层
学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 12:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表