项目使用 create-neon 构建
具体实现使用了 atosl-rs
该库仅仅是将 atosl-rs 变为可直接node调用的依赖
必要环境配置 NodeJs && Rust.
初始化:
$ npm install
$ npm run build
该命令使用 cargo-cp-artifact 把Rust代码打包成 ./index.node
.
const atosl = require('./index.node');
// type atosl.parse = (
option: {
file: string //文件完整路径 ( dylib || dwarf )
load_address: string //起始地址
addresses: Array<string> //运行地址
},
text_segment?: boolean // 默认false
) => {
success: boolean,
data: Array<{address: string, result: string}>
message?: string
}
const data = atosl.parse({
file: "/Users/packy/Desktop/TestAapp.dSYM/Contents/Resources/DWARF/Flutter",
load_address: '0x109810000',
addresses: [
'0x0000000109ad88b0',
],
});
console.log(data);
/**
成功:
{
success: true,
data: [
{
address: 4457334960,
result: 'GrMtlCommandBuffer::getRenderCommandEncoder(MTLRenderPassDescriptor*, GrMtlPipelineState const*, GrMtlOpsRenderPass*) (in Flutter) + 408'
},
],
message: null,
}
失败:
{
success: false,
data: [],
message: 'Unsupported file format'
}
**/
项目根目录下:
安装项目所需依赖
从Rust源码构建Node依赖 (index.node
)
Rust构建参数cargo build
需要通过 npm build
和 npm build-*
命令执行. 例如: cargo feature:
npm run build -- --feature=beetle
和 npm build
等同, 但是执行cargo release(https://doc.rust-lang.org/cargo/reference/profiles.html#release)
atosl-node/
├── Cargo.toml
├── README.md
├── index.node
├── package.json
├── src/
├── atosl.rs
├── demangle.rs
| └── lib.rs
└── target/
Rust项目的配置文件
构建产物
npm的配置文件
Rust源码目录
atosl主要调用方法
atosl util
Rust项目入口文件
二进制Rust产物