当前位置: 首页 > 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.lryc.cn/news/575188.html

相关文章:

  • vue3递归组件的使用
  • LVS-NAT负载均衡群集实战:原理、部署与问题排查
  • Vue计算属性与监视属性
  • 机器人 “离线觉醒” ? 摆脱人类“控制”!Google DeepMind 优化 AI 让机器人断网不断智!
  • spring项目启动sheel脚本
  • 如何打造Apache Top-Level开源时序数据库IoTDB
  • 北斗导航 | 基于CNN-LSTM-PSO算法的接收机自主完好性监测算法
  • 服务器开放端口如何设置,本地内网开通应用端口让外网访问连接步骤
  • Fisco Bcos学习 - 控制台搭建和基本使用
  • 在ASP.NET Core WebApi中使用标识框架(Identity)
  • 网络安全漏洞扫描是什么?如何识别目标进行扫描?
  • 通用 Excel 导出功能设计与实现:动态列选择与灵活配置
  • 国道观察者手记
  • React + Umi(Umijs/Max) 搭建项目及配置
  • 大学专业科普 | 物联网、自动化和人工智能
  • 多服务器IP白名单配置(使用redis stream实现)
  • 神经网络的运作方式类比讲解
  • 【EI会议征稿】东北大学主办第三届机器视觉、图像处理与影像技术国际会议(MVIPIT 2025)
  • Arm架构下麒麟V10桌面版安装MySQL
  • Android14音频子系统-Linux音频子系统ASoC-ALSA
  • Linux size命令详解
  • Android14音频子系统-Linux音频子系统ALSA
  • MFC对话框启动时就隐藏窗口
  • 开疆智能CCLinkIE转ModbusTCP网关连接脉冲计数器配置案例
  • matlab机器人工具箱(Robotics Toolbox)安装及使用
  • 分布式系统 - 分布式缓存及方案实现
  • python网络自动化-数据格式与数据建模语言
  • 如何快速将iPhone中的文本保存到电脑上
  • 基于SSM框架+mysql实现的监考安排管理系统[含源码+数据库+项目开发技术手册]
  • PHP爬虫实战:轻松获取京东商品SKU信息