【问题标题】:How to add an Enum with python into a Ghidra project如何将带有 python 的枚举添加到 Ghidra 项目中
【发布时间】:2021-06-14 12:39:09
【问题描述】:

看到有人使用ghidra.app.util.cparser.C 将结构字符串解析为结构对象,然后他们使用data_type_manager.addDataType() 将其添加到 Ghidra 中。我想用 Enumerates 实现该方法,但我不确定如何。 如果有更好的方法来添加枚举,我会很乐意使用它,如果这是最好的方法,那么解释将是一个很大的帮助。 这是我的参考:https://reverseengineering.stackexchange.com/questions/23330/ghidra-python-create-struct-with-big-endian-field

【问题讨论】:

    标签: python ghidra


    【解决方案1】:

    您可以通过 CParser 创建一个枚举,然后将生成的 DataType 添加到 DataTypeManager。我有一个script for this generic workflow,如果您不关心自己编写脚本,并且满足于使用简单的 GUI 将 C 代码粘贴到其中,请检查生成的 DataType 并在需要时添加它。

    否则也可以直接创建枚举数据类型:

    from ghidra.program.model.data import EnumDataType
    # maximum enum value is (2^length)-1 according to some comment, but if you pass 8 it should be every possible Java long value, so I am not sure
    enum = EnumDataType("EnumName", length)
    enum.add("One", 1)
    enum.add("Two", 2)
    enum.add("Three", 3)
    dataTypeManager.addDataType(enum, None)
    

    【讨论】:

    • 我注意到 BitFieldDataType 类中没有承包商。有没有办法将此方法用于位域?
    • 位域可以出现在结构之外吗? StructureDataType 有一个公共方法insertBitFieldAt,这可能是创建它的预期方法。根据我的经验,大多数时候没有可用的公共构造函数,这是有原因的,并且您应该使用其他一些方法来创建它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 2014-10-20
    • 2018-05-04
    • 1970-01-01
    • 2015-08-03
    相关资源
    最近更新 更多