|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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)
|
|