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 -*-
import re
import json
import os
from ghidra.program.model.listing import CodeUnit
from ghidra.util import Msg
# 获取当前脚本的目录
script_directory = os.path.dirname(os.path.realpath(__file__))

# 读取配置文件
with open(os.path.join(script_directory, 'instruction_descriptions.json'), 'r') as f:
    instruction_descriptions = json.load(f)

with open(os.path.join(script_directory, 'operand_descriptions.json'), 'r') as f:
    operand_descriptions = json.load(f)


# 配置注释类型: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]
        try:
            CommentGenerate = instruction_descriptions[mnemonic].format(*description_operands)
            instr.setComment(COMMENT_TYPE, CommentGenerate)
            #print("Added CommentGenerate to {} instruction at {}".format(mnemonic, instr.getAddress()))
        except KeyError:
            print("Missing instruction description for: {}".format(mnemonic))
            CommentGenerate = "{} {}".format(mnemonic, ' '.join(description_operands))
        except IndexError:
            print("Mismatch in operands for: {}".format(mnemonic))
            CommentGenerate = "{} {}".format(mnemonic, ' '.join(description_operands))
# 输出脚本完成信息
print("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) 
            print("Cleared comment of type {} at {}".format(comment_type, instr.getAddress()))


# 输出脚本完成信息 
print("Script finished!") 

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值