我在 IDA 中有很大一部分是字长数据的数据查找表。我想将它们全部更改为字长而不是字节长度。我知道你可以创建一个数组,但是当我这样做时它变成了一个字节数组。
如何在 IDA Pro 中将大部分字节更改为单词
逆向工程
艾达
2021-06-21 00:27:53
4个回答
可能有更好的方法,但我总是使用一个简单的脚本来完成此操作,该脚本让我只需选择要转换为双字的字节范围。就像是:
ea = SelStart()
end = SelEnd()
print "Making DWORDs from 0x%X - 0x%X" % (ea, end)
MakeUnknown(ea, (end-ea), DOUNK_SIMPLE)
while ea < end:
MakeDword(ea)
ea += 4
- 创建一个词(或双字)
- 使用“制作数组”命令创建一个单词数组。您可以选择要转换的数据范围以自动计算项目数。
如果要将每个元素作为单独的项目而不是数组的一部分,请取消选中“创建为数组”选项。
这是我如何做到的。
我将前几个字节更改为数据,创建了一个数组,因此我有一个单词数组,然后编辑该数组以包含更多元素。
根据 devttys0 的回答。
此脚本适用于高于 7.4 的 IDA 版本。
def convert_data():
align_size = ida_kernwin.ask_long(4, "align size")
if align_size == None:
return
start = idc.read_selection_start()
end = idc.read_selection_end()
print("Align %d bytes from 0x%X - 0x%X" % (align_size, start, end))
ida_bytes.del_items(start, (end-start), ida_bytes.DELIT_SIMPLE)
flag = None
if align_size == 1:
flag = ida_bytes.FF_BYTE
elif align_size == 2:
flag = ida_bytes.FF_WORD
elif align_size == 4:
flag = ida_bytes.FF_DWORD
elif align_size == 8:
flag = ida_bytes.FF_QWORD
elif align_size == 16:
flag = ida_bytes.FF_OWORD
if flag == None:
ida_kernwin.warning("align size is invalid")
return
while start < end:
ida_bytes.create_data(start, flag, align_size, ida_idaapi.BADADDR)
start += align_size
其它你可能感兴趣的问题