bn脚本笔记

由于BinaryNinja脚本的官方文档完全就是把api按字典序堆在一起,故开一篇随笔存一些常见api的使用方法,随机更新中

笔记中所有的bv均为BinaryView类,即与bn交互的主要接口

bv.instructions

返回当前二进制文件的所有指令,返回形式为元组组成的列表,元组的第一个元素为该指令的Token按空格切片形成的列表,第二个元素为指令地址
这个token有很多附加的属性(或者说解释的方式,比如token.text就是返回文本,token.value就是把token按数值转换为int (假设这个token是数值)),不只是单纯的text,在简单输出时体现为text

1
2
for instruction in bv.instructions:
print(instruction)

bv.linear_disassembly

bv.instructions 很像,但是这个真就是直接把指令文本一条条打出来,返回的是一个迭代器

get_disassembly(addr: int)

返回目标地址指令的文本(str)

bv.get_instruction_length(addr : int)

返回目标地址指令的长度

1
2
3
4
for instruction in bv.instructions:
if instruction[0][0].text == 'jz' or instruction[0][0].text == 'jnz':
print(instruction[0][0])
print("len = ", bv.get_instruction_lengt(instruction[1]))

bv.write(addr : int ,data : bytes)

直接往目标地址覆写一段数据,patch的主要手段

bv.read(addr : int ,length : int)

读取以目标地址为起点一定长度的数据,返回字节流(bytes)

Author

SGSG

Posted on

2025-04-03

Updated on

2025-04-22

Licensed under