Nmboy 发表于 2014-8-25 07:47:46

调试器之反汇编引擎的使用

反汇编引擎有两种编译方式,一种是静态编译方式,一种是动态编译方式
    那么我们现在就先了解下什么是静态编译呢?什么是动态编译?
一、静态编译
   静态编译就是编译器在编译可执行文件的时候,将可执行文件需要调用的动态链接库中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库,
二、动态编译
   动态编译的可执行文件需要附带一个动态链接库,在执行时,需要调用其对应动态链接库中的命令,
   我们了解完静态编译、和动态编译了那我们现在就说一下反汇编引擎的使用。
   首先我们来做第一步就是要把库+到我们要写的程序中的文件,然后在包上头文件,大家可以去网上下载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;
[*]}

复制代码


上面的代码是我在控制台上写的,大家可以参考下,代码我已加注释,
首先我们要去我们上面说的那个库也就我们包的头文件#include<BeaEngine.h>中去找到我们下面的结构体

[*]typedef struct _Disasm {
[*]   UIntPtr EIP;   //
[*]   UInt64 VirtualAddr;//虚拟地址
[*]   UInt32 SecurityBlock; //安全模块
[*]   char CompleteInstr;
[*]   UInt32 Archi;
[*]   UInt64 Options;
[*]   INSTRTYPE Instruction;
[*]   ARGTYPE Argument1;
[*]   ARGTYPE Argument2;
[*]   ARGTYPE Argument3;
[*]   PREFIXINFO Prefix;
[*]   UInt32 Reserved_;
[*]} DISASM, *PDISASM, *LPDISASM;

复制代码


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

下面静态库和动态库,大家有需要可以自己下载,本人没怎么写过帖子,如有什么错的地方,还请大家多多指点,多多指教。




漩涡鸣人 发表于 2014-8-25 10:06:50

SecurityBlock是指令的安全长度啦,32/64位架构的指令限制不超过15字节,可以防止访问到无效内存。我写的教程最后目标就是写出类似这种反汇编引擎吧,其实很简单的

Nmboy 发表于 2014-8-28 08:35:14

yuepo619 发表于 2014-8-27 23:19
值得一看

{:5_109:}我这还有呢调试器的一套把算是    那天有时间我传上来{:5_91:}

irvine726 发表于 2014-8-25 14:21:38

谢谢分享~

yuepo619 发表于 2014-8-27 23:19:36

值得一看

irvine726 发表于 2014-8-28 09:09:41

支持楼主~

メ㊣逆ご帅☆ 发表于 2014-8-31 12:39:44

在很多源码中都有看到使用od的反汇编引擎的。
http://www.ollydbg.de/srcdescr.htm#_Toc531975954
官网有下载和很详细的使用解释。
只用过一次反汇编引擎
想问下beaengine有什么比较好的地方吗。还是说od的反汇编引擎有什么弊端。(我在一个文章看到有避免使用od反汇编引擎的情况。不知道为什么)

メ㊣逆ご帅☆ 发表于 2014-8-31 12:42:48

我有空想这个功能较全的调试器。所以问问。od2.01在加载一堆插件调试大型软件的情况下可能出现od死掉的情况。受不了。od1.x功能又没2.x叼

郭兴华 发表于 2014-8-31 13:13:58

强烈支持楼主ing……

tai8023 发表于 2014-9-26 18:21:42

支持楼主,谢谢分享

530876864 发表于 2015-3-7 20:53:05


支持楼主,谢谢分享

vanentu 发表于 2015-5-27 05:15:20

就是来顶 支持

自古天道酬勤 发表于 2016-2-10 19:11:37

学习一下
页: [1]
查看完整版本: 调试器之反汇编引擎的使用