LyScriptTools 反汇编类API接口手册
LyScriptTools模块实在LyScript模块反汇编基础上封装而成,其提供了更多的反汇编方法,可以更好的控制x64dbg完成自动化反汇编任务,API参考手册如下。
is系列函数: 该系列是反汇编模块中的判断语句,主要用于验证当前或指定一个内存地址指令类型,如果是返回true否则返回false,该函数默认不传参数使用的是当前EIP所指向的位置,传入参数(十进制)则对指定位置进行判断。
from LyScript32 import MyDebug
from LyScriptTools32 import Module
from LyScriptTools32 import Disassemble
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("连接状态: {}".format(connect_flag))
# 反汇编类
dasm = Disassemble(dbg)
ref = dasm.is_jmp()
print("是否是JMP: {}".format(ref))
dbg.close()
实现效果如下:
为了防止通用方法不够用,LyScriptTools中提供了自定义方法is_
它可以判断任何类型的指令前缀,此处必须传递两个参数没有缺省值。
from LyScript32 import MyDebug
from LyScriptTools32 import Module
from LyScriptTools32 import Disassemble
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("连接状态: {}".format(connect_flag))
# 反汇编类
dasm = Disassemble(dbg)
eip = dbg.get_register("eip")
ref = dasm.is_(eip,"cmp")
print("是否是CMP: {}".format(ref))
dbg.close()
验证效果如下:
详细反汇编API参数列表如下:
from LyScriptTools32 import Disassemble
如下API定义中,地址后面带有0说明可以指定缺省值,缺省值默认取当前EIP位置。
Disassemble 类内函数名 | 函数作用 |
---|---|
is_call(address=0) | 是否是跳转指令 |
is_jmp(address=0) | 是否是jmp |
is_ret(address=0) | 是否是ret |
is_nop(address=0 ) | 是否是nop |
is_cond(address=0) | 是否是条件跳转指令 |
is_cmp(address=0) | 是否cmp比较指令 |
is_test(address=0 ) | 是否是test比较指令 |
is_(address,cond) | 自定义判断条件 |
get_assembly(address=0) | 得到指定位置汇编指令,不填写默认获取EIP位置处 |
get_opcode(address=0) | 得到指定位置机器码 |
get_disasm_operand_size(address=0) | 获取反汇编代码长度 |
assemble_code_size(assemble) | 计算用户传入汇编指令长度 |
get_assemble_code(assemble) | 用户传入汇编指令返回机器码 |
write_assemble(address,assemble) | 将汇编指令写出到指定内存位置 |
get_disasm_code(address,size) | 反汇编指定行数 |
get_disasm_one_code(address = 0) | 向下反汇编一行 |
get_disasm_operand_code(address=0) | 得到当前内存地址反汇编代码的操作数 |
get_disasm_next(eip) | 获取当前EIP指令的下一条指令 |
get_disasm_prev(eip) | 获取当前EIP指令的上一条指令 |
我们来举一个使用案例,其实和模块调用原理是一样的,调用时先初始化,然后就可以使用内部的函数了。
from LyScript32 import MyDebug
from LyScriptTools32 import Module
from LyScriptTools32 import Disassemble
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("连接状态: {}".format(connect_flag))
# 反汇编类
dasm = Disassemble(dbg)
ref = dasm.is_jmp()
print("是否是JMP: {}".format(ref))
dbg.close()
相关文章
- ERROR: Java 1.7 or later is required to run Apache Drill.
- 三剑客命令
- PC版小爱同学来了
- 2023年最值得关注的机器人趋势TOP10
- 为自己的博客添加追番列表
- 便携小空调源码
- 开启CDN获取源IP
- TCP三次握手和四次挥手
- 网站访问量暨与小伙伴们的N次相遇
- Centos7部署安装zabbix5.0
- 解决Zabbix中文乱码情况
- Nginx-基础总结(上)
- Nginx-基础总结(下)
- shell if语句
- Shell case条件语句的应用实践
- 一招解决检测你的电脑是否可升级win11
- Shell while循环和until循环语句
- Shell for循环和select循环语句
- break、continue、exit、return的区别和对比
- 【技巧】给网站添加pjax无刷新,换页音乐不中断