bn脚本笔记
由于BinaryNinja脚本的官方文档完全就是把api按字典序堆在一起,故开一篇随笔存一些常见api的使用方法,随机更新中
笔记中所有的bv均为BinaryView类,即与bn交互的主要接口
bv.instructions
返回当前二进制文件的所有指令,返回形式为元组组成的列表,元组的第一个元素为该指令的Token按空格切片形成的列表,第二个元素为指令地址
这个token有很多附加的属性(或者说解释的方式,比如token.text就是返回文本,token.value就是把token按数值转换为int (假设这个token是数值)),不只是单纯的text,在简单输出时体现为text
1 | for instruction in bv.instructions: |
bv.linear_disassembly
和 bv.instructions 很像,但是这个真就是直接把指令文本一条条打出来,返回的是一个迭代器
get_disassembly(addr: int)
返回目标地址指令的文本(str)
bv.get_instruction_length(addr : int)
返回目标地址指令的长度
1 | for instruction in bv.instructions: |
bv.write(addr : int ,data : bytes)
直接往目标地址覆写一段数据,patch的主要手段
bv.read(addr : int ,length : int)
读取以目标地址为起点一定长度的数据,返回字节流(bytes)