LyScript 插件实现自定义反汇编
LyScript 插件默认提供了一个get_disasm_code()方法可以直接获取到指定行数的反汇编代码,但如果需要自定义获取或者是需要自己封装一个反汇编方法,则你可以用如下两种方式来得到。
第一步直接获取到指定EIP位置的反汇编代码,这段代码可以这样来写。
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
conn = dbg.connect()
# 获取当前EIP地址
eip = dbg.get_register("eip")
print("eip = {}".format(hex(eip)))
# 向下反汇编字节数
count = eip + 15
while True:
# 每次得到一条反汇编指令
dissasm = dbg.get_disasm_one_code(eip)
print("0x{:08x} | {}".format(eip, dissasm))
# 判断是否满足退出条件
if eip >= count:
break
else:
# 得到本条反汇编代码的长度
dis_size = dbg.assemble_code_size(dissasm)
eip = eip + dis_size
dbg.close()
pass
输出效果如下。

第二步得到当前EIP机器码,获取到当前EIP指针所在位置的机器码,你可以灵活运用反汇编代码的组合实现。
from LyScript32 import MyDebug
# 得到机器码
def GetHexCode(dbg,address):
ref_bytes = []
# 首先得到反汇编指令,然后得到该指令的长度
asm_len = dbg.assemble_code_size( dbg.get_disasm_one_code(address) )
# 循环得到每个机器码
for index in range(0,asm_len):
ref_bytes.append(dbg.read_memory_byte(address))
address = address + 1
return ref_bytes
if __name__ == "__main__":
dbg = MyDebug()
conn = dbg.connect()
# 获取当前EIP地址
eip = dbg.get_register("eip")
print("eip = {}".format(hex(eip)))
# 得到机器码
ref = GetHexCode(dbg,eip)
for i in range(0,len(ref)):
print("0x{:02x} ".format(ref[i]),end="")
dbg.close()
pass
输出效果如下所示:

如果将如上两种方法结合在一起,那么你就可以获取到x64dbg反汇编窗口中的三个主要参数区中的内容了。
from LyScript32 import MyDebug
# 得到机器码
def GetHexCode(dbg,address):
ref_bytes = []
# 首先得到反汇编指令,然后得到该指令的长度
asm_len = dbg.assemble_code_size( dbg.get_disasm_one_code(address) )
# 循环得到每个机器码
for index in range(0,asm_len):
ref_bytes.append(dbg.read_memory_byte(address))
address = address + 1
return ref_bytes
if __name__ == "__main__":
dbg = MyDebug()
conn = dbg.connect()
# 获取当前EIP地址
eip = dbg.get_register("eip")
print("eip = {}".format(hex(eip)))
# 向下反汇编字节数
count = eip + 20
while True:
# 每次得到一条反汇编指令
dissasm = dbg.get_disasm_one_code(eip)
print("0x{:08x} | {:50} | ".format(eip, dissasm),end="")
# 得到机器码
ref = GetHexCode(dbg, eip)
for i in range(0, len(ref)):
print("0x{:02x} ".format(ref[i]), end="")
print()
# 判断是否满足退出条件
if eip >= count:
break
else:
# 得到本条反汇编代码的长度
dis_size = dbg.assemble_code_size(dissasm)
eip = eip + dis_size
dbg.close()
pass
获取效果图如下:

LyScript 插件实现自定义反汇编的更多相关文章
- amazeui的表单开关插件的自定义事件必须添加.bootstrapSwitch 命名空间,给了我们什么启示
amazeui的表单开关插件的自定义事件必须添加.bootstrapSwitch 命名空间,给了我们什么启示 一.总结 一句话总结:详细看使用文档(说明文档说的真的是非常详细呢,不过循序渐进,不同阶段 ...
- spring boot集成mybatis-plus插件进行自定义sql方法开发时报nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
spring boot集成mybatis-plus插件进行自定义sql方法开发时报nested exception is org.apache.ibatis.binding.BindingExcept ...
- 浅析MyBatis(三):聊一聊MyBatis的实用插件与自定义插件
在前面的文章中,笔者详细介绍了 MyBatis 框架的底层框架与运行流程,并且在理解运行流程的基础上手写了一个自己的 MyBatis 框架.看完前两篇文章后,相信读者对 MyBatis 的偏底层原理和 ...
- 【Maven实战技巧】「插件使用专题」Maven-Archetype插件创建自定义maven项目骨架
技术推荐 自定义Archetype Maven骨架/以当前项目为模板创建maven骨架,可以参考http://maven.apache.org/archetype/maven-archetype-pl ...
- jquery.autocomplete.js 插件的自定义搜索规则
这二天开始用jquery.autocomplete这个自动完成插件.功能基本比较强大,但自己在实际需求中发现还是有一处不足!问题是这样:当我定义了一个本地数据JS文件时,格式为JSON式的数组.如下: ...
- Atom的追踪函数插件和自定义语法
atom网盘链接:http://pan.baidu.com/s/1nvt7vJz 密码:om26 追踪函数插件 直接使用最新autom版本傻瓜式安装 名字:goto-definition 地址:htt ...
- Maven-07: 插件的自定义绑定
除了内置绑定以外,用户还能够自己选择将某个插件目标绑定到生命周期的某个阶段上,这种自定义绑定方式能让Maven项目在构建过程中执行更多更富特色的任务. 一个常见的例子是创建项目的源码jar包.内置的插 ...
- Flask系列09--Flask中WTForms插件,及自定义验证器
一.概述 django中的forms组件非常的方便,在flask中有WTForms的组件实现的也是类似的功能, 安装这个插件 二.简单使用 文档地址https://wtforms.readthedoc ...
- 设置tabBar、使用第三方插件和自定义组件使用简单实例
创建小程序项目进入时填写,因需要用上第三方插件,所以要填上开发者的APPID,前往微信公众平台去注册一个账号获取APPID,在设置=>开发设置可以查看相关appid信息 简单思路 底部导航添加三 ...
- jmeter插件之自定义场景图(万能场景设计)
添加扩展插件 自定义线程组:jp@gc - Ultimate Thread Group 此线程组功能强大,可以实现多种场景设置,添加路径如图 参数含义解释 Start Threads Count:当前 ...
随机推荐
- k8s-修改线程数
1.背景: (1)胖容器ssh登录报错:handshake error (2)登录宿主机后,观察pod状态为running,但是kubectl exec 和docker exec 均无法进入该容器,报 ...
- 遇到 Request header is too large,你是如何解决的?
看到群里有小伙伴问,这个异常要怎么解决: java.lang.IllegalArgumentException: Request header is too large 异常原因 根据Exceptio ...
- Codeforces Round #728 (Div. 2) A~C 补题记录
比赛链接:Here 1541A. Pretty Permutations 给定 \(1,2,3,4,...n\) 序列,让每一个数字都不处于原来的位置,但总的移动距离要最小 \(n\) 为偶数的情况 ...
- Educational Codeforces Round 80 A - D题题解(又是卡很久的一场比赛)
第八场 CodeForces - 1288A. Deadline Example input 3 1 1 4 5 5 11 output YES YES NO Note In the first te ...
- L3-020 至多删三个字符 (30分) (DP)
问题描述: 给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 1e6] ...
- springboot项目统一封装返回值和异常处理(方式一)
为什么要统一返回值: 在我们做后端应用的时候,前后端分离的情况下,我们经常会定义一个数据格式,通常会包含code,message,data这三个必不可少的信息来方便我们的交流,下面我们直接来看代码pa ...
- Java面试——数据库知识点
MySQL 1.建 主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合.一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null). 超键:在关系中能唯一标识元组的属性 ...
- java进阶(25)--泛型
一.泛型基本概念 JDK5.0后新特性:Generic 1.不使用泛型举例
- Shell 脚本编程学习
本文为博主原创,转载请注明出处: 目录: 1. shell 变量 2. 运算符 3. if 语句 4.for 循环 5.while 语句 6. case 语法 7.跳出循环:continue 与 br ...
- zookeeper 节点介绍及节点常用命令总结
本文为博主原创,未经允许不得转载: 目录: 1. znode 节点特性 2. zookeeper 的四种节点类型及适用场景分析 3. zookeeper 客户端常用操作命令 4. znode 数据增删 ...