aardio 文档

raw.pefile 库模块帮助文档

💻 范例:DLL 查看工具

raw 成员列表 #

raw.pefile() #

返回对象:rawPeFileObject

raw.pefile(path) #

参数指定 PE 文件路径。

raw.pefile 成员列表 #

用于分析 PE 文件。
用法请参考「 aardio 工具 » 探测器 » DLL 查看工具 」

raw.pefile.findDll(name,dir) #

按系统加载 DLL 的查找规则(先查 @dir 目录,再按 LoadLibrary 搜索顺序)查找依赖 DLL,
返回完整路径;api-ms-/ext-ms- 返回 "apiset";找不到返回 null

raw.pefile.getTime(path) #

返回使用 PE 时间戳作为参数创建的 time 对象。
参数 @path 指定文件路径。

raw.pefile.inspect(路径) #

一句探查 PE 文件:打开、summary()、关闭,返回摘要表(字段见 summary)。
参数为目录时递归扫描其中的 .dll|.exe|.ocx|.pyd|.node|.sys 并返回摘要数组(每项含 path)。
打开失败返回 null,错误信息。
下载或编译出 DLL 后先用它看:machine 是否 x86、是否 .NET、缺哪些依赖、导出了什么、调用约定线索(notes 字段有现成的提示)。

raw.pefile.setTime(path,tm) #

设置 PE 时间戳。
参数 @path 指定文件路径。
参数 @tm 可以是数值或 time 对象。

raw.pefile.verifyFile(path,required,options) #

一句全自动验证 DLL:打开、verify(required,options)、关闭。
参数 @path 指定文件路径,@required 可选指定必须存在的导出函数名数组,@options 见 verify 函数。
返回 verify 的结果表 {ok,errors,error,missing,missingDependencies,exports,info},打开失败返回 null,错误信息。
典型用法:tcc 编译 DLL 后 var r = raw.pefile.verifyFile(path,{"fn1","fn2"},{load=true}); if(!r.ok) error(r.error)

rawPeFileObject 成员列表 #

rawPeFileObject.close() #

关闭文件,对象被回收时也会自动调用此函数。

rawPeFileObject.exportDeclaration() #

导出 aardio 格式的导出函数声明,
仅支持使用C++修饰名导出的 API 函数,
导出的 aardio 代码仅供参考。

rawPeFileObject.getClrHeader() #

获取 .Net 程序的 CLR 头信息
如果不是 .Net 程序返回 null

rawPeFileObject.getDataDirectory(索引) #

读取 PE 数据目录,参数指定 0 起的目录索引(0 导出表,1 导入表,13 延迟加载表,14 CLR 头)。
返回 {address=RVA;size=大小},不存在返回 null。

rawPeFileObject.getDelayImportDirectory() #

返回延迟加载(delay-load)导入表信息,
每个数组成员包含 name 字段(DLL 名)。
无延迟加载表返回 null。

rawPeFileObject.getExportDirectory() #

返回导出表信息,失败或无导出表返回 null。
用法请查看函数源码

rawPeFileObject.getExportEntries() #

返回一个包含所有导出函数名信息的对象数组。
每个数组成员包含 "ordinal";"address";"name" 三个字段
返回对象的 fields 属性是一个列名数组,
返回对象可以作为 listview 控件的 setTable 函数参数使用

失败或无导出表返回 null。

rawPeFileObject.getExportNames() #

返回一个包含所有导出函数名的字符串数组。
失败或无导出表返回 null。

rawPeFileObject.getImportDirectory() #

返回导入表信息,
用法请查看函数源码

rawPeFileObject.getSectionByName() #

返回参数 @1 指定名称的 PE 节信息。

rawPeFileObject.imageBase #

首选加载基址(数值)

rawPeFileObject.imageHeader.timeDate #

PE 文件创建时间,time 对象

返回对象:timeObject

rawPeFileObject.imageHeader.timeDateStamp #

PE 文件创建时间戳,数值

rawPeFileObject.isDll #

是否 DLL(文件头 characteristics 含 IMAGE_FILE_DLL)

rawPeFileObject.isImported("字符串参数") #

检测是否导入了指定的 DLL,名称忽略大小写

rawPeFileObject.isPe32 #

是否 PE32 文件。
process.isExe 也可以用于检测 32 位或 64 位执行文件

rawPeFileObject.machine #

目标架构名称,"x86"、"x64"、"arm64"、"arm"、"ia64" 之一,未知则为十六进制字符串。
32 位 aardio 进程只能 raw.loadDll 加载 "x86" 模块。

rawPeFileObject.majorLinkerVersion #

链接器主版本号

rawPeFileObject.minorLinkerVersion #

链接器副版本号

rawPeFileObject.path #

文件路径

rawPeFileObject.read({int number}) #

读取结构体
不支持多参数

rawPeFileObject.read(字节数) #

读取指定长度的字节
不支持多参数

rawPeFileObject.rvaToOffset(RVA) #

将 RVA 转换为文件偏移,无法映射返回 null

rawPeFileObject.sections #

PE 节信息数组。

rawPeFileObject.seek("set",) #

移动至相对开始处的指定偏移量

rawPeFileObject.subsystem #

子系统数值,2 为 GUI,3 为 CUI

rawPeFileObject.summary() #

返回 PE 文件摘要表,字段:
path,machine("x86"/"x64"/"arm64"…),bits,isDll,subsystem,linker,timeDate,toolchain,
exports(导出函数名数组),exportCount,dependencies(导入 DLL 名),delayDependencies,missingDependencies(按系统搜索规则找不到的依赖),
dotNet(.NET 程序集信息:ilOnly,platform,runtime),isComServer,calling(x86 导出名修饰推断的调用约定,无修饰为 null,混合为 "mixed"),
loadable(当前 32 位进程能否 raw.loadDll),notes(给人看的提示数组)。
静态函数 raw.pefile.inspect(path) 可一步完成打开、summary、关闭。

rawPeFileObject.verify(required,options) #

全自动验证 DLL 能否在 aardio 中使用,一次列出所有问题。
参数 @required 可选指定必须存在的导出函数名数组(或单个函数名)。
参数 @options 可选指定表:

rawPeFileObject.verifyExports(required) #

仅验证 DLL 是否包含 required 数组中的全部导出函数名。
参数 @required 指定必须存在的导出函数名字符串数组。
返回表:ok=是否全部存在,missing=缺少的函数名数组,exports=完整导出函数名数组
完整验证请用 verify 函数。

Markdown 格式