10.5 认识XEDParse汇编引擎

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

  • 官方网站:https://github.com/x64dbg/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中所有汇编指令的机器码输出,效果图如下图所示;

本文作者: 王瑞
本文链接: https://www.lyshark.com/post/891116af.html
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/97966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习笔记(css穿透、vue-cookie、拦截器、vuex、导航守卫、token/Cookie、正则校验)

目录 一、记录 1、CSS穿透 2、输入框是否提示输入 3、插槽 #slot 4、v-deep深入改掉属性值 二、vue-cookie 1、官方文档 2、使用 三、拦截器 1、请求拦截器 2、响应拦截器 四、vuex对信息存取改 五、路由导航守卫 1、登录思路 2、设置白名单 六、Token与Cookie…

蓝桥杯每日一题2023.9.30

蓝桥杯大赛历届真题 - C&C 大学 B 组 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 对于此题&#xff0c;首先想到了dfs进行一一找寻&#xff0c;注意每次不要将重复的算进去&#xff0c;故我们每次循环可以记录一个开始的位置&#xff0c;下一次到这个位置时&#xff0c;…

【数据结构-二叉树 九】【树的子结构】:树的子结构

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【子结构】&#xff0c;使用【二叉树】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

软考程序员考试大纲(2023)

文章目录 前言一、考试说明1.考试目标2.考试要求3&#xff0e;考试科目设置 二、考试范围考试科目1&#xff1a;计算机与软件工程基本知识1&#xff0e;计算机科学基础2&#xff0e;计算机系统基础知识3&#xff0e;系统开发和运行知识4&#xff0e;网络与信息安全基础知识5&am…

WebKit Inside: CSS 样式表的匹配时机

WebKit Inside: CSS 的解析 介绍了 CSS 样式表的解析过程&#xff0c;这篇文章继续介绍 CSS 的匹配时机。 无外部样式表 内部样式表和行内样式表本身就在 HTML 里面&#xff0c;解析 HTML 标签构建 DOM 树时内部样式表和行内样式就会被解析完毕。因此如果 HTML 里面只有内部样式…

【Qt】顶层窗口和普通窗口区别以及用法

区别 在Qt项目开发中&#xff0c;经常会用到窗体控件用于显示及数据操作和其他交互等。 但&#xff0c;窗体分为顶层窗口&#xff08;Top-level Window&#xff09;和普通窗口&#xff08;Regular Window&#xff09;。 他们之间是有区别的&#xff0c;包括在项目实际中的用法…

【力扣面试题】URL化

&#x1f451;专栏内容&#xff1a;力扣刷题⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、题目描述二、题目分析1、使用String内部方法2、使用StringBuilder 一、题目描述 题目链接&#xff1a;URL化 编写一种…

邮件群发工具哪个好

邮件群发是一种通过电子邮件向多个收件人发送邮件的方式。同时&#xff0c;邮件群发也是一种低成本、高回报的营销手段。因此邮件群发被广泛应用于各种营销活动中&#xff0c;例如活动邀请、新品上线、产品促销等等。而群发邮件最有效的方式就是借助邮件群发工具&#xff0c;而…

文本自动输入/删除的加载动画效果

效果展示 CSS 知识点 绕矩形四周跑的光柱动画实现animation 属性的 steps 属性值运用 页面基础结构实现 <div class"loader"><!-- span 标签是围绕矩形四周的光柱 --><span></span><span></span><span></span>&l…

Scratch3.0下载

通俗易懂&#xff0c;直接上链接 链接&#xff1a;https://pan.baidu.com/s/1n-QFEQWT8im8BHQu1wIjtg?pwd1016 提取码&#xff1a;1016

zookeeper选举机制

全新集群选举 zookeeper 全新集群选举机制网上资料很多说法很模糊&#xff0c;仔细思考了一下&#xff0c;应该是这样 得到票数最多的机器>机器总数半数 具体启动过程中的哪个节点成为 leader 与 zoo.cfg 中配置的节点数有关&#xff0c;下面以3个举例 选举过程如下 server…

tailscale自建headscale和derp中继

tailscale derp中继服务简介 tailscale是一个基于WireGuard的零配置软件&#xff0c;它可以轻松地在多台设备之间建立点对点加密连接。 derp服务器是tailscale网络的重要组成部分。它作为tailscale客户端之间的中继,帮助客户端找到并连接到其他客户端设备。 但Tailscale 官方…

微信小程序wxs标签 在wxml文件中编写JavaScript逻辑

PC端开发 可以在界面中编写JavaScript脚本 vue/react这些框架更是形成了一种常态 因为模板引擎和jsx语法本身就都是在js中的 我们小程序中其实也有类似的奇妙写法 不过先声明 这东西不是很强大 我们可以先写一个案例代码 wxml代码参考 <view><wxs module"wordSt…

MySQL命令行中文乱码问题

MySQL命令行中文乱码问题&#xff1a; 命令行界面默认字符集是gbk&#xff0c;若字符集不匹配会中文乱码或无法插入中文。 解决办法&#xff1a;执行set names gbk; 验证&#xff1a; 执行命令show variables like ‘char%’;查看默认字符集。 创建数据库设置字符集utf8&…

自动驾驶:未来的道路上的挑战与机遇

自动驾驶&#xff1a;未来的道路上的挑战与机遇 文章目录 引言安全与道路事故的减少交通拥堵的缓解城市规划的变革技术和法律挑战结语 2023星火培训【专项营】Apollo开发者社区布道师倾力打造&#xff0c;包含PnC、新感知等的全新专项课程上线了。理论与实践相结合&#xff0c;…

1.3.2有理数减法(第一课时)作业设计

【学习目标】 1&#xff0e;理解有理数减法法则&#xff0c;能熟练地进行有理数的减法运算&#xff0e; 2&#xff0e;感受有理数减法与加法对立统一的辨证思想&#xff0c;体会转化的思想方法&#xff0e;

请问python如何处理url带有“?”参数的接口?

在Python中处理带有"?"参数的URL接口&#xff0c;可以使用urllib.parse库中的urlencode()函数来进行编码。以下是一些示例代码 from urllib.parse import urlencodeparams {name: John, age: 25} url http://example.com? urlencode(params) print(url) 这个代…

泛微OA e-office平台uploadify.php任意文件上传漏洞

泛微OA e-office平台uploadify.php任意文件上传漏洞复现 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的…

NAT模式和桥接模式的区别

NAT模式和桥接模式的区别 NAT模式和桥接模式都是虚拟机网络配置的两种方式&#xff0c;主要区别在于虚拟机与外部网络交互的方式不同。 NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;模式&#xff1a;在这种模式下&#xff0c;虚拟机和宿主…

爬虫编程语言

文章目录 基本数据类型bytes类型python数据类型转换 python运算符python数字数学函数随机数函数三角函数数字常量 python字符串python访问字符串中的值python字符串更新python转义字符python字符串运算符python字符串格式化f-stringUnicode字符串python的字符串内建函数 python…