当前位置: 首页 > news >正文

鸿蒙OpenHarmony[Disassembler反汇编工具]ArkTS运编译工具链

简介

Disassembler是ArkTS反汇编工具,如果开发者需要分析方舟字节码文件(*.abc)相关问题,可使用Disassembler将字节数据反汇编成可阅读的汇编指令。

工具随DevEco Studio SDK发布,以windows平台为例,Disassembler工具位置为:[DevEco Studio安装目录]\sdk[SDK版本]\openharmony\toolchains\ark_disasm.exe。

命令行说明

反汇编命令:

ark_disasm.exe [options] input_file output_file

参数说明:

参数是否可缺省描述
[options]可缺省命令选项,详见下文options选项说明。
input_file不可缺省待反汇编的方舟字节码文件路径。
output_file不可缺省反汇编内容的输出文件路径。

options选项说明:

选项是否可缺省是否存在入参描述
–debug可缺省不带参数使能输出调试信息,默认输出到屏幕。
–debug-file可缺省带参数如果使能了–debug,指定调试信息的输出文件。
–help可缺省不带参数打印帮助提示。
–skip-string-literals可缺省不带参数跳过对字符串字面量的反汇编。
–quiet可缺省不带参数使能所有’–skip-'开头的选项。
–verbose可缺省不带参数使能输出额外信息(字节位置、方舟字节码格式、操作码)。
–version可缺省不带参数显示配套方舟字节码文件版本号以及最低支持的方舟字节码文件版本。

使用示例

假设已存在方舟字节码文件:test.abc,其源代码如下:

let i = 99;
function show(){return i;}
show();

执行如下命令,就能生成反汇编文件:test.txt。生成的反汇编文件内带有操作码及格式等信息。

ark_disasm.exe test.abc test.txt

查看反汇编文件的内容。

cat test.txt

内容如下

# source binary: test.abc                                                    // 反汇编的方舟字节码文件.language ECMAScript# ====================
# LITERALS                                                                   // 字面量数据0 0x203 { 0 [MODULE_REQUEST_ARRAY: {};
]}# ====================
# RECORDS                                                                    // 模块定义数据.record _ESConcurrentModuleRequestsAnnotation {                              // _开头这些都是固定的模块数据
}.record test {                                                               // 一个js文件对应一个模块数据,包含了模块的相关信息(在方舟字节码文件中的位置,是否是commonjs ...)u8 isCommonjs = 0x0u32 moduleRecordIdx = 0x203......
}# ====================
# METHODS                                                                    // 方法定义数据L_ESSlotNumberAnnotation:u32 slotNumberIdx { 0x0 }
.function any test.#*#show(any a0, any a1, any a2) <static> {                // 此方法源码中的show方法,同时这里也说明了,它属于test模块ldlexvar 0x0, 0x0......
}L_ESSlotNumberAnnotation:u32 slotNumberIdx { 0x3 }
.function any test.func_main_0(any a0, any a1, any a2) <static> {            // 此方法是自动生成的,可以理解成整个js文件就是一个方法,方法名为func_main_0newlexenv 0x1......
}# ====================
# STRING                                                                     // 符号表信息[offset:0x88, name_value:i]

使用参数–verbose,可打印偏移量等更多详细信息。

ark_disasm.exe --verbose test.abc test.txt

此处列出部分示例。

.record _ESSlotNumberAnnotation { # offset: 0x00cd, size: 0x0026 (38)                                  // 这里打印了模块在方舟字节码文件中具体的位置和大小
}.record test { # offset: 0x00f3, size: 0x0098 (152)                                                    // 这里打印了模块在方舟字节码文件中具体的位置u32 moduleRecordIdx = 0x203 # offset: 0x0144                                                   // 这里打印了模块信息的位置
}
......
.function any test.#*#show(any a0, any a1, any a2) <static> { # offset: 0x0153, code offset: 0x0245    // 这里打印了方法信息具体的位置和方法中指令的具体位置
#   CODE:ldlexvar 0x0, 0x0 # offset: 0x0249, [IMM4_IMM4].........[0x3c 0x00]                            // 这里打印了每条指令的具体位置......
}
http://www.lqws.cn/news/517753.html

相关文章:

  • IntelliJ IDEA 社区版安装终极教程(2025 最新图文详解)
  • 微信小程序中scss、ts、wxml
  • React19源码系列之 API (react)
  • 惠普HP Laser MFP 116w 打印机信息
  • 深度解析Lucene IndexWriter 性能优化
  • 银河麒麟高级服务器操作系统(全架构)OpenGauss 数据库部署手册
  • Fisco Bcos学习 - 控制台搭建和基本使用
  • SpringBoot中5种拦截器使用场景
  • Odoo OWL 前端开发:ORM 与 RPC 服务的选择
  • HarmonyOS 5分布式数据库有哪些性能指标?
  • GPT-5企业级应用落地指南:70个工业场景实战部署全景(2025)
  • 贪心算法理论与实践总结
  • 《中国电信运营商骨干网:历史、现状与未来演进》系列 第五篇:新玩家入局——中国广电CBNNET如何构建全国一张网?
  • 鸿蒙系统(HarmonyOS)经典红色风格登录页布局
  • MySQL之视图深度解析
  • Eigen 库EIGEN_MAKE_ALIGNED_OPERATOR_NEW详解和实战示例
  • 数据结构?AVL树!!!
  • 【树的概念及其堆的实现】
  • 复用对象Aspose.Words 中 DocumentBuilder 的状态管理解析
  • Encoder-only PLM RoBERTa ALBERT (BERT的变体)
  • HuggingFace下载的模型缓存到了C盘,如何安全迁移到其他盘
  • sql 多表联查返回不为空的字段 COALESCE
  • 11 MySQL 如何优化数据查询方案?
  • 入门级STM32F103C8T6无人机遥控(原理图)
  • 打造灵活强大的PDF解析管道:从文本提取到智能分块的全流程实战
  • Systemd服务配置:开启自启Jar应用全指南
  • 【请关注】实操mongodb集群部署
  • 教育培训教学通用PPT模版
  • 【图论题典】Swift 解 LeetCode 最小高度树:中心剥离法详解
  • linux内核奔溃转储之kexec、kdump