XEDParse 是一款开源的x86指令编码库,该库用于将MASM语法的汇编指令级转换为对等的机器码,并以XED格式输出,目前该库支持x86、x64平台下的汇编编码,XEDParse的特点是高效、准确、易于使用,它可以良好地处理各种类型的指令,从而更容易地确定一段程序的指令集。XEDParse库可以集成到许多不同的应用程序和工具中,因此被广泛应用于反汇编、逆向工程、漏洞分析和入侵检测等领域。

XEDParse 引擎非常易于使用,读者在使用时只需要通过XEDPARSE xed = { 0 };定义一个结构,并通过向xed.cip内输送一条汇编指令,当调用XEDParseAssemble(&xed)函数时则可实现对特定汇编指令的编码操作,读者只需要通过输出xed.dest以及xed.instr中的值,则可实现对特定一条汇编指令的编码,这段代码可以描述为如下所示;

#include <iostream>
#include <Windows.h> extern "C"
{
#include "D:/XEDParse/XEDParse.h"
#pragma comment(lib, "D:/XEDParse/XEDParse_x86.lib")
} using namespace std; void PrintOpCode(char *pAsm, unsigned char* pOpcode, int nSize)
{
for (int i = 0; i < nSize; ++i)
{
printf("%02X ", pOpcode[i]);
}
printf("%30s \n", pAsm);
} int main(int argc, char *argv)
{
XEDPARSE xed = { 0 };
xed.x64 = FALSE; // 输入一条汇编指令并转换
printf("请输入一条汇编指令: ");
scanf_s("%llx", &xed.cip);
gets_s(xed.instr, XEDPARSE_MAXBUFSIZE); // 执行汇编指令
if (XEDPARSE_OK != XEDParseAssemble(&xed))
{
printf("指令错误: %s\n", xed.error);
} // 输出参数
PrintOpCode(xed.instr, xed.dest, xed.dest_size); system("pause");
return 0;
}

编译上述代码片段,并手动将x32/XEDParse.dll中的动态链接库放入到当前程序的根目录下,运行这个程序并输入一条汇编指令,则会输出该汇编指令所对应的机器码,输出效果图如下图所示;

读者也可以通过数组的方式传递一批汇编指令,并依次循环输出这些指令的机器码,如下代码中定义了OpCode数组,该数组内可写入一些汇编指令集并以endp作为结束标志,通过循环调用XEDParseAssemble(&xed)的方式,实现批量输出机器码的效果;

int main(int argc, char *argv)
{
XEDPARSE xed = { 0 };
xed.x64 = FALSE; // 针对数组的汇编编码
char *OpCode[15] = {
"xor eax,eax",
"push eax",
"pop eax",
"xor edx,edx",
"mov eax,1",
"endp"
}; for (int x = 0; x < sizeof(OpCode) / sizeof(OpCode[0]); x++)
{
if (strcmp(OpCode[x], "endp") == 0)
{
break;
} strcpy(xed.instr, OpCode[x]);
if (XEDPARSE_OK != XEDParseAssemble(&xed))
{
break;
}
PrintOpCode(xed.instr, xed.dest, xed.dest_size);
} system("pause");
return 0;
}

这段代码运行后,读者可看到OpCode中所有汇编指令的机器码输出,效果图如下图所示;

10.5 认识XEDParse汇编引擎的更多相关文章

  1. 开发者不容错过的10款免费JavaScript游戏引擎

    摘要:使用HTML5.JavaScript可以帮助开发者开发出各种与众不同的游戏及游戏特效,比如3D动画.Canvas等.本文介绍10款被广泛使用的基于HTML5的JavaScript游戏引擎. 在G ...

  2. 【原创】Linux环境下的图形系统和AMD R600显卡编程(10)——R600显卡的3D引擎编程

    3D图形处理流水线需要流经多个硬件单元才能得到最后的渲染结果,流水线上的所有的硬件单元必须被正确编程,才能得到正确的结果. 总体上看,从图形处理流水线的源头开始,需要准备好vertex和index,在 ...

  3. 汇编3栈帧,参数传递,串操作,混合汇编,x64,asm文件

    基础知识2 选择结构 通过判断 + 条件跳转指令来实现 循环结构 通过判断 + 条件跳转指令来实现(会有一个向上跳转的语句) 函数调用约定 C调用约定: 由外部平衡栈 标准调用约定 : 由函数内部平衡 ...

  4. MySQL内核:InnoDB存储引擎 卷1

    MySQL内核:InnoDB存储引擎卷1(MySQL领域Oracle ACE专家力作,众多MySQL Oracle ACE力捧,深入MySQL数据库内核源码分析,InnoDB内核开发与优化必备宝典) ...

  5. 10 个顶级 JavaScript 动画框架推荐

    使用JavaScript可以做出一些引人注目的动画效果,但通常不太容易实现.本文为你整理了10个非常优秀的JavaScript动画框架,使用它们你可以轻松实现动画效果.1. RaphaëlRaphaë ...

  6. MySQL支持多种存储引擎

    MySQL的强大之处在于它的插件式存储引擎,我们可以基于表的特点使用不同的存储引擎,从而达到最好的性能. MySQL有多种存储引擎:MyISAM.InnoDB.MERGE.MEMORY(HEAP).B ...

  7. BrnShop开源网上商城第五讲:自定义视图引擎

    今天这篇博文主要讲解自定义视图引擎,大家都知道在asp.net mvc框架中默认自带一个Razor视图引擎,除此之外我们也可以自定义自己的视图引擎,只需要实现IViewEngine接口,接口定义如下: ...

  8. Atitit.自定义存储引擎的接口设计 api 标准化 attilax 总结  mysql

    Atitit.自定义存储引擎的接口设计 api 标准化 attilax 总结  mysql 1. 图16.1:MySQL体系结构1 2. 16.7. 创建表create()虚拟函数:2 3. 16.8 ...

  9. 揭秘jbpm流程引擎内核设计思想及构架

    揭秘jbpm流程引擎内核设计思想及构架 作者 胡长城(银狐999)   1     前言 2     阅读本篇的基础准备 2.1      概念的基础 2.2      环境的基础 3     什么是 ...

  10. x86汇编之栈与子程序调用

    什么是栈 栈与普通数据结构所说的栈的概念是相似的,遵循后进先出原则.不同的是汇编中所说的栈是一个在内存中连续的保存数据的区域,也即是实际存在的内存区域,进栈和出栈遵循后进先出原则. 在x86架构中,栈 ...

随机推荐

  1. webpack 从 0 到 1 构建 vue

    前端领域框架百花齐放,各种优秀框架出现(react,Vue,ag)等等框架.为了方便开发者快速开发, 开发对应的 cli 脚手架,来提高产出.然而初中级的前端工程师对项目里的 webpack 封装和配 ...

  2. Go--变量的声明

    Go语言是静态类型语言,因此变量(variable)是有明确类型的,编译器也会检查变量类型的正确性. 变量是一段或多段用来存储数据的内存,在go中,变量一旦被定义,一定要使用,不然会报错 内建变量类型 ...

  3. 国内pip源提示“not a trusted or secure host”解决方案

    大家应该都知道怎么添加国内pip源(主要是豆瓣和阿里云),~/.pip/pip.conf文件配置大概如下(下面注释掉了豆瓣源): [global] # index-url = http://pypi. ...

  4. vivo商城前端架构升级—多端统一探索、实践与展望篇

    一.引言 本文将会从整体上介绍 vivo 商城在前端维度的多端统一探索和实践. 从多端价值.为什么要做多端统一.如何满足多端业务需求.实践与创新,简洁直白的阐述我们在多端统一上所做的一切. 二.多端探 ...

  5. 我的2023年度关键词:ChatGPT、生产力工具

    2023 是 AI 大爆发的一年,这一年我在我的生产力工具中(一个叫 lowcode 的 vscode 插件)接入了 ChatGPT API,插件也进行了重构,日常搬砖也因为 ChatGPT 的引入发 ...

  6. <vue 基础知识 4、计算属性computed>

    代码结构 一.     计算属性简单使用 1.效果 2.代码 01-计算属性简单用法.html <!DOCTYPE html> <html lang="en"&g ...

  7. vue-element-admin完整开源项目介绍、本地部署和初步探索

    1 说明: 1.1 从一个广受好评的开源项目:vue-element-admin的本地化,来初步分析vue的相关知识. 2 github地址和下载本地部署: https://github.com/Pa ...

  8. uni-app editor富文本编辑器

    https://blog.csdn.net/xudejun/article/details/91508189

  9. notepad++的使用技巧

    一.多标签管理 1.可支持多个标签的展示

  10. spring,springBoot配置类型转化器Converter以及FastJsonHttpMessageConverter,StringHttpMessageConverter 使用

    转载请注明出处: https://i.cnblogs.com/posts/edit;postId=14045507 spring,spring boot 等框架项目通过@RequestBody,@Re ...