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

一个查看armv8系统寄存器-值-含义的方式

找到解压后的SysReg_xml_v86A-2019-12目录

wget https://developer.arm.com/-/media/developer/products/architecture/armv8-a-architecture/2019-12/SysReg_xml_v86A-2019-12.tar.gz
wget https://developer.arm.com/-/media/developer/products/architecture/armv8-a-architecture/2019-12/A64_ISA_xml_v86A-2019-12.tar.gz
wget https://developer.arm.com/-/media/developer/products/architecture/armv8-a-architecture/2019-12/AArch32_ISA_xml_v86A-2019-12.tar.gztar zxf A64_ISA_xml_v86A-2019-12.tar.gz
tar zxf AArch32_ISA_xml_v86A-2019-12.tar.gz
tar zxf SysReg_xml_v86A-2019-12.tar.gz

替换脚本中的dir_path路径

from xml.dom.minidom import parseString
import sys
import os
import reGREEN = '\033[32m'
RED = '\033[31m'
YELLOW = '\033[33m'
END_COLOR = '\033[0m'def print_red(content):print(RED + content + END_COLOR)def print_green(content):print(GREEN + content + END_COLOR)def print_yellow(content):print(YELLOW + content + END_COLOR)def bit_32(value):result = str(bin(int(value)).replace("0b", "").zfill(32))reversed_content = ''.join(reversed(result))return reversed_contentdef bit_64(value):result = str(bin(int(value)).replace("0b", "").zfill(64))reversed_content = ''.join(reversed(result))return reversed_contentdef parse_system_register_xml(file_path, register_value):f = open(file_path)lines = f.read()xml_string = lines.replace("<arm-defined-word>", "").replace("</arm-defined-word>", "").replace("<binarynumber>", '').\replace("</binarynumber>", "").replace("<instruction>", '').replace("</instruction>", '')xml_string = re.sub("<register_link[\w\W]*?>", '', xml_string)xml_string = re.sub("</register_link>", '', xml_string)dom = parseString(xml_string)data = dom.documentElementfield = data.getElementsByTagName('field')# 获取该寄存器的bit长度bit_len = int(data.getElementsByTagName('fields')[0].getAttribute('length'))content = "Not value"if bit_len == 64:content = bit_64(register_value)elif bit_len == 32:content = bit_32(register_value)for field_signal in field:print("------------------------------------------------------------------------------------------------")id = field_signal.getAttribute('id')# print(str(id))field_name = field_signal.getElementsByTagName('field_name')[0].childNodes[0].nodeValuefield_msb = field_signal.getElementsByTagName('field_msb')[0].childNodes[0].nodeValuefield_lsb = field_signal.getElementsByTagName('field_lsb')[0].childNodes[0].nodeValueint_field_msb = int(field_msb)int_field_lsb = int(field_lsb)field_description = field_signal.getElementsByTagName('field_description')[0].getElementsByTagName('para')[0].childNodes[0].nodeValueprint_yellow(str(id).strip() + "\t" + str(field_description).strip())value = '0b' + ''.join(reversed(content[int_field_lsb:int_field_msb+1]))# 解析赋值field_value = field_signal.getElementsByTagName('field_values')[0]field_value_instances = field_value.getElementsByTagName('field_value_instance')for field_value_instance in field_value_instances:field_value = field_value_instance.getElementsByTagName('field_value')[0].childNodes[0].nodeValuefield_value_description = field_value_instance.getElementsByTagName('field_value_description')[0].getElementsByTagName('para')[0].childNodes[0].nodeValueif field_value == value:if field_value == '0b0' or field_value == '0b00':print_red("\t" + field_value + " :\t" + field_value_description)else:print_green("\t" + field_value + " :\t" + field_value_description)def search_file(arch, register_name):dir_path = "/Users/showme/workspace/tools/mra_tools/v8.6/SysReg_xml_v86A-2019-12"return dir_path + "/" + arch + "-" + register_name + ".xml"def do(arch, register_name, register_value):file_path = search_file(arch, register_name)if not os.path.exists(file_path):print_red("file not found")exit(0)parse_system_register_xml(file_path, register_value)def help():print("use: ./main.py AArch32|AArch64 register_name hex_register_value")print("use: ./main.py 32|64 register_name hex_register_value")exit(0)if __name__ == '__main__':if len(sys.argv) != 4:help()arch = ""if "32" in str(sys.argv[1]):arch = "AArch32"elif "64" in str(sys.argv[1]):arch = "AArch64"else:help()register_name = str(sys.argv[2]).lower()register_value = int(sys.argv[3], 16)do(arch, register_name, register_value)

运行

python3 ./parse_xml.py AArch64 SCTLR_EL3 0x30C50830

在这里插入图片描述

参考

https://github.com/alastairreid/mra_tools
https://github.com/lelegard/arm-cpusysregs
https://github.com/ashwio/arm64-sysreg-lib

http://www.lryc.cn/news/297918.html

相关文章:

  • LLMs之miqu-1-70b:miqu-1-70b的简介、安装和使用方法、案例应用之详细攻略
  • npm 下载报错
  • GPT-4登场:多模态能力革新,提升ChatGPT与必应体验,开放API助力游戏革新
  • 【芯片设计- RTL 数字逻辑设计入门 11.1 -- 状态机实现 移位运算与乘法 1】
  • MongoDB系列:管道操作:聚合阶段操作符(二)
  • C++ //练习 5.12 修改统计元音字母的程序,使其能统计以下含有两个字符的字符序列的数量:ff、fl和fi。
  • C语言-----自定义类型-----结构体枚举联合
  • elasticsearch下载及可视化工具下载使用
  • vim常用命令以及配置文件
  • 2024年的VUE2下的无效指令npm install --save vue-i18n
  • 计算机视觉主要知识点
  • python 基础知识点(蓝桥杯python科目个人复习计划35)
  • 使用HTML、CSS和JavaScript来创建一个粒子效果,粒子会跟随鼠标点击位置生成
  • 优质项目追踪平台一览:助力项目管理与监控
  • Docker下安装GitLab
  • 2024/2最新升级ChatGPT Plus的方法
  • github和gitee
  • 3秒实现无痛基于Stable Diffusion WebUI安装ComfyUI!无需重复安装环境!无需重复下载模型!安装教程
  • 【UE】游戏运行流程的简单理解
  • 【数据分析】Excel中的常用函数公式总结
  • ESLint prettier 配置代码风格
  • 涤生大数据实战:基于Flink+ODPS历史累计计算项目分析与优化(上)
  • jvm一级缓存
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Web组件
  • 【Linux】学习-深入了解文件的读与写
  • java实战:销售订单30分钟未支付自动取消
  • 一、西瓜书——绪论
  • 如何连接ChatGPT?无需科学上网,使用官方GPT教程
  • qt学习:串口
  • 145. 二叉树的后序遍历