Ghidra comment add script

init

# -*- coding: utf-8 -*-
import re
from ghidra.program.model.listing import CodeUnit# 获取当前程序和指令迭代器
program = getCurrentProgram()
listing = program.getListing()
instructionIterator = listing.getInstructions(True)# 用于存储唯一的指令类型和操作数类型的集合
instruction_set = set()
operand_set = set()# 定义一个正则表达式来匹配基本操作数类型
operand_pattern = re.compile(r'([A-Za-z]+)')# 遍历所有指令
while instructionIterator.hasNext():instr = instructionIterator.next()mnemonic = instr.getMnemonicString()# 添加指令到集合中instruction_set.add(mnemonic)# 添加操作数到集合中for i in range(instr.getNumOperands()):operand = instr.getDefaultOperandRepresentation(i)match = operand_pattern.match(operand) if match: basic_operand = match.group(1) operand_set.add(basic_operand) # 输出指令类型 
print("\nInstruction types:") 
for instr in sorted(instruction_set): print(instr) # 输出操作数类型 
print("\nOperand types:") 
for operand in sorted(operand_set): print(operand) # 输出脚本完成信息 
print("Script finished!") 

add

 # -*- coding: utf-8 -*-
from ghidra.program.model.listing import CodeUnit
from ghidra.util import Msg# 操作数描述字典
operand_descriptions = {"EBP": u"基指针寄存器","ESP": u"栈指针寄存器"...
}# 指令描述字典
instruction_descriptions = {"PUSH": u"将 {} 入栈","POP": u"将栈顶数据弹出到 {}",...
}# 配置注释类型:EOL, PRE, POST, REPEATABLE, PLATE
COMMENT_TYPE = CodeUnit.EOL_COMMENT  # 可以修改为 CodeUnit.PRE_COMMENT 等# 获取当前程序和指令迭代器
program = getCurrentProgram()
listing = program.getListing()
instructionIterator = listing.getInstructions(True)# 遍历所有指令 
while instructionIterator.hasNext(): instr = instructionIterator.next() mnemonic = instr.getMnemonicString() # 检查并添加指令注释 if mnemonic in instruction_descriptions: operands = [instr.getDefaultOperandRepresentation(i) for i in range(instr.getNumOperands())]description_operands = [operand_descriptions.get(op, op) for op in operands]CommentGenerate = instruction_descriptions[mnemonic].format(*description_operands)# 将注释拆分为多行 CommentGenerate_lines = CommentGenerate.split(", ")formatted_CommentGenerate = "\n".join(CommentGenerate_lines)instr.setComment(COMMENT_TYPE, formatted_CommentGenerate)Msg.info(None, "Added CommentGenerate to {} instruction at {}".format(mnemonic, instr.getAddress()))# 输出脚本完成信息 
Msg.info(None, "Script finished!") 

clean

# -*- coding: utf-8 -*-
from ghidra.program.model.listing import CodeUnit
from ghidra.util import Msg# 获取当前程序和指令迭代器
program = getCurrentProgram()
listing = program.getListing()
instructionIterator = listing.getInstructions(True)# 注释类型列表
comment_types = [CodeUnit.EOL_COMMENT,CodeUnit.PRE_COMMENT,CodeUnit.POST_COMMENT,CodeUnit.REPEATABLE_COMMENT,CodeUnit.PLATE_COMMENT
]# 遍历所有指令并清理注释
while instructionIterator.hasNext():instr = instructionIterator.next()for comment_type in comment_types:if instr.getComment(comment_type) is not None:instr.setComment(comment_type, None)Msg.info(None, "Cleared comment of type {} at {}".format(comment_type, instr.getAddress()))# 输出脚本完成信息
Msg.info(None, "Script finished!")

在这里插入图片描述

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

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

相关文章

PostgreSQL修改最大连接数

在使用PostgreSQL 的时候,经常会遇到这样的错误提示, sorry, too many clients already,这是因为默认PostgreSQL最大连接数是 100, 一般情况下,个人使用时足够的,但是在生产环境,这个连接数是远远不够的&am…

Linux笔记之显示当前路径下文件的数量

Linux笔记之显示当前路径下文件的数量 在Linux中,ls -l 和 wc -l 是两个常用命令,分别用于列出目录内容的详细信息和计算行数。将这两个命令结合使用,可以快速统计目录中包含的文件和子目录的数量。 ls -l ls -l 命令用于列出目录中的内容…

python机器学习5 数据容器

Python中有几个数据容器如下: List,数组,如同Array数组。 Dictionarie,字典,可以通过文字来访问数据。 Sets,序列集,做数学交集、并集等计算时使用。 Tuple,序列&#xff0c…

Elasticsearch-多边形范围查询(8.x)

目录 一、字段设计 二、数据录入 三、查询语句 四、Java代码实现 开发版本详见:Elasticsearch-经纬度查询(8.x-半径查询)_es经纬度范围查询-CSDN博客 一、字段设计 PUT /aoi_points {"mappings": {"properties": {"location": {…

redis 夺命21问

1.什么是redis? Redis 是一个基于内存的高性能key-value数据库。 2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。…

回归求助 教程分享

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 今日 217/10000 抱个拳,送个礼 更多内容,见微*公号往期文章:通透!!十大回…

NFT如何解决音乐版权的问题

音乐版权问题一直困扰着音乐产业。传统的音乐版权管理模式存在以下问题。需要注意的是,NFT在音乐版权领域仍处于早期发展阶段,存在一些需要解决的问题,例如技术标准不统一、应用场景有限、法律法规不明朗等。但随着技术的进步和市场的完善&am…

小程序自学教程

从0开始搭建微信小程序前后台 0、准备 如何安装?去CSDN搜索“xxx安装教程”即可。 (1)工具 IntelliJ IDEA(必选)——Java开发集成环境,可以前后端同时使用 Web Storm——web开发集成环境,主要…

【Dison夏令营 Day 18】如何用 Python 中的 Pygame 制作国际象棋游戏

对于 Python 中级程序员来说,国际象棋游戏是一个很酷的项目创意。在熟练使用类的同时,它也是制作图形用户界面应用程序的良好练习。在本教程中,您将学习到 使用 pygame 的基础知识。 学习如何使用 Python 类编码一个国际象棋游戏。 安装和设…

Mybatis防止SQL注入

防止SQL注入的中心思想就是参数化查询,将输入当作参数传递,而不是直接拼接到 SQL 语句中。 常见的防止SQL注入的方式 1、使用#{}占位符 2、使用动态SQL 3、[配置 SQL 注入过滤器](#配置 SQL 注入过滤器) 使用#{}占位符 先来看一个错误的示范${} /…

PostgreSQL的pg_dirtyread工具

PostgreSQL的pg_dirtyread工具 pg_dirtyread 是一个第三方PostgreSQL扩展,它允许用户读取数据库文件中的“脏”数据,即那些被标记为删除或不再可见的数据。这个扩展对于数据恢复和调试非常有用,尤其是在需要恢复被删除或更新前的数据时。 以…

33.异步FIFO IP核的配置、调用与仿真

(1)异步FIFO的配置过程: ps:异步fifo相比较同步fifo少一个实际深度 (2)异步FIFO的调用: module dcfifo (input wr_clk ,input rd_clk ,input [7:0] …

2024-07-13 Unity AI状态机2 —— 项目介绍

文章目录 1 项目介绍2 模块介绍2.1 BaseState2.2 ...State2.2.1 PatrolState2.2.2 ChaseState / AttackState / BackState 2.3 StateMachine2.4 Monster 3 其他功能4 类图 项目借鉴 B 站唐老狮 2023年直播内容。 点击前往唐老狮 B 站主页。 1 项目介绍 ​ 本项目使用 Unity 2…

金融业务系统云原生技术转型:从传统架构到云原生的跨越

引言 在数字化浪潮的推动下,金融行业正经历着前所未有的变革。云计算作为这场变革的核心技术之一,正在重塑金融机构的IT架构。云原生技术以其敏捷性、弹性和可扩展性,为金融业务提供了强大的技术支撑,使得金融机构能够快速响应市…

大话设计模式

设计模式 专栏概览 参考《大话设计模式》,进行深入分析理解;使用C实现,然后C采取OOP仿照实现;C不是不能OOP,只是底层支持没那么好,所以C代码部分只是推荐参考;关于C的OOP推荐书籍:周立功的《嵌…

防火墙NAT和智能选路实验详解(华为)

目录 实验概述实验拓扑实验要求要求一要求二要求三要求四要求五 实验概述 从我上面一个博客能够了解到NAT和防火墙选路原理 ——>防火墙nat和智能选路,这一章我通过实验来详解防火墙关于nat和智能选路从而能熟练使用和配置防火墙,这里使用的是华为US…

《Cross-Image Pixel Contrasting for Semantic Segmentation》论文解读

期刊:TPAMI 年份:2024 摘要 研究图像语义分割问题。目前的方法主要集中在通过专门设计的上下文聚合模块(如空洞卷积、神经注意力)或结构感知的优化目标(如iou样损失)挖掘"局部"上下文,即单个图像中像素之间的依赖关系。然而&…

如何解决数据分析问题:IPython与Pandas结合

如何解决数据分析问题:IPython与Pandas结合 数据分析是现代科学研究、商业决策和技术开发中的一个重要环节。IPython和Pandas是两个强大的工具,它们可以大大简化和加速数据分析的过程。本文将为初学者详细介绍如何结合使用IPython和Pandas来解决数据分析…

Dify中高质量索引模式时,通过线程池处理chunk过程

本文主要介绍了Dify中高质量索引模式时,如何通过线程池执行器来处理chunk的过程。源码位置:dify\api\core\indexing_runner.py\IndexingRunner._load。核心思想:假设一个数据集中有一个文档,该文档可以拆分为12个段(segment)。如果chunk_size=10,那么分为2批提交给线程池…

Mojo语言的运用

1.Mojo语言概述 1.1什么是Mojo语言? Mojo语言是一种现代的动态编程语言,主要用于Web开发。它结合了多种语言的优点,如JavaScript、Perl和Lua,旨在为开发者提供: 简洁的语法:易于学习和使用,适…