RISC-V反汇编调试记录分享
RISC-V反汇编调试记录分享
本文记录一次使用反汇编进行调试分析。
最近在 rtthread 下适配 MilkV Duo 的硬件定时器驱动时遇到了一些问题,demo 运行时报以下错误:
Unhandled Exception 2:Illegal Instruction
scause:0x0x0000000000000002,stval:0x0x000000000007a787,sepc:0x0x0000000080232a72
--------------Dump Registers-----------------
Function Registers: ra(x1) = 0x0x0000000080232f88 user_sp = 0x0x000000008029f5d8 gp(x3) = 0x0x0000000080262a68 tp(x4) = 0x0x00000000deadbeef
Temporary Registers: t0(x5) = 0x0x0000000000000120 t1(x6) = 0x0x00000000deadbeef t2(x7) = 0x0x000000008029f518 t3(x28) = 0x0x00000000deadbeef t4(x29) = 0x0x00000000deadbeef t5(x30) = 0x0x00000000deadbeef t6(x31) = 0x0x00000000deadbeef
Saved Registers: s0/fp(x8) = 0x0x000000008029f618 s1(x9) = 0x0x00000000deadbeef s2(x18) = 0x0x00000000deadbeef s3(x19) = 0x0x00000000deadbeefs4(x20) = 0x0x00000000deadbeef s5(x21) = 0x0x00000000deadbeefs6(x22) = 0x0x00000000deadbeef s7(x23) = 0x0x00000000deadbeefs8(x24) = 0x0x00000000deadbeef s9(x25) = 0x0x00000000deadbeefs10(x26) = 0x0x00000000deadbeef s11(x27) = 0x0x00000000deadbeef
Function Arguments Registers: a0(x10) = 0x0x00000000802604c0 a1(x11) = 0x0x000000008029f6b0a2(x12) = 0x0x000000008029f6b0 a3(x13) = 0x0x0000000000000008 a4(x14) = 0x0x0000000000000004 a5(x15) = 0x0x0000000080256080 a6(x16) = 0x0x0000000000000065 a7(x17) = 0x0x00000000deadbeef
sstatus = 0x0x0000000200040120 Supervisor Interrupt Disabled Last Time Supervisor Interrupt EnabledLast Privilege is Supervisor ModePermit to Access User PageNot Permit to Read Executable-only Page
satp = 0x0x0000000000000000Current Page Table(Physical) = 0x0x0000000000000000Current ASID = 0x0x0000000000000000Mode = No Address Translation/Protection Mode
-----------------Dump OK---------------------
--------------Thread list--------------
current thread: tshell
--------------Backtrace--------------
想要查看 0x80232a72 处的程序指令,确认是否有非法指令。由于身边没有合适的调试器,不方便通过GDB对出错地址的代码进行定位。于是尝试通过反汇编进行分析:
$ objdump -l -S rtthread.elf > out.c
运行提示不支持当前架构,于是安装对应架构的反汇编工具:
$ sudo apt install binutils-riscv64-unknown-elf
安装完成后,即可进行反汇编:
$ riscv64-unknown-elf-objdump -l -S rtthread.elf > out.c
在反汇编得到的 out.c 中即可快速搜索定位到目标程序:
/home/Project/rt-thread/components/drivers/hwtimer/hwtimer.c:43float tv_sec;float devi_min = 1;80232a6e: 00023797 auipc a5,0x2380232a72: 61a78793 addi a5,a5,1562 # 80256088 <rt_system_timer_thread_init+0x6a6e>80232a76: 0007a787 flw fa5,0(a5)80232a7a: fef42027 fsw fa5,-32(s0)
即可继续进行分析调试。
相关文章:
RISC-V反汇编调试记录分享
RISC-V反汇编调试记录分享 本文记录一次使用反汇编进行调试分析。 最近在 rtthread 下适配 MilkV Duo 的硬件定时器驱动时遇到了一些问题,demo 运行时报以下错误: Unhandled Exception 2:Illegal Instruction scause:0x0x0000000000000002,stval:0x0x…...
python上下文管理器 with的使用
python上下文管理器 with是从Python一个语法糖,它是一种上下文管理协议,目的在于把我们之前常见一个开发 try,except 和finally 关键字和一些文件开关闭合资源分配释放等问题都简化。 总结起来使用python 提供的with主要的作用是: 实现自动…...
24/8/8算法笔记 决策树构建鸢尾花
决策树是一种由算法自动设计的模型。在机器学习中,构建决策树的过程通常遵循以下步骤: 特征选择:算法会评估每个特征,并选择一个特征作为节点分裂的依据。这个选择基于某种准则,如信息增益(ID3算法…...
数据库扩展新篇章:主流分库分表中间件全解析
摘要: 随着企业数据量的激增,传统的单体数据库架构已经无法满足日益增长的性能需求和数据管理复杂性。分库分表技术作为解决这一问题的有效手段,通过将数据水平或垂直地分散到多个数据库中,提高了系统的扩展性和处理能力。本文将详…...
python看图片猜价格游戏,frame 和PhotoImage的使用
import tkinter.messagebox import tkinter import randomwindow tkinter.Tk()window.geometry(800x400)window.title(猜数字游戏)good_price random.randint(10, 100) input_price random.randint(1, 100)def sumit():global good_priceif entry.get() "" or en…...
未来展望:等保测评在网络安全领域的持续创新与发展
在数字化浪潮席卷全球的今天,网络安全已成为维护国家安全、社会稳定和经济发展的关键基石。作为网络安全保障体系的核心组成部分,等级保护测评(简称“等保测评”)在应对日益复杂多变的网络威胁中发挥着不可替代的作用。展望未来&a…...
构建深度学习驱动的多目标检测系统:YOLO模型及应用
随着计算机视觉技术的飞速发展,多目标检测在各种实际应用中发挥着越来越重要的作用。本文将j简单介绍如何构建一个基于深度学习的多目标检测系统,包括数据准备、模型训练、UI界面开发和部署的完整流程。如有部署的想法,想要(UI界面…...
算法刷题笔记 染色法判定二分图(染色法例题 C++实现)
文章目录 题目描述二分图介绍和基本思路实现代码(C) 题目描述 给定一个n个点m条边的无向图,图中可能存在重边和自环。请你判断这个图是否是二分图。 输入格式 第一行包含两个整数n和m。接下来m行,每行包含两个整数u和v…...
在Ubuntu上安装OpenBLAS和Eigen
安装 openblas 直接使用 apt-get 命令即可安装: sudo apt-get install libopenblas-dev检查是否安装成功,可以用下面的示例代码 example.cpp: #include <stdio.h> #include <stdlib.h> #include "cblas.h"int main(…...
Vue前端面试基础(一)
Vue面试题目详解可以涵盖多个方面,从基础知识到高级特性,再到实际应用和性能优化等。以下是一些常见的Vue面试题目及其详解: 1. Vue双向绑定原理 详解: Vue的双向绑定原理是通过数据劫持结合发布者-订阅者模式实现的。Vue在内部…...
使用Gitlab实现monorepo多项目CICD
CI/CD是什么 CI/CD(Continuous Intergration/Continuous Delpoy),即持续集成/持续部署,或称为持续集成/持续交付,作为一套面向开发和运维团队的解决方案,CI/CD 主要解决集成新代码和向用户频繁交付应用的问…...
设计模式实战:银行账户管理系统的设计与实现
问题描述 设计一个银行账户管理系统,支持不同类型的账户(如储蓄账户、支票账户)进行存取款操作,并能够在账户余额发生变化时通知相关观察者(如用户、银行系统)。系统需要确保账户操作的灵活性和可扩展性。 设计分析 策略模式 策略模式定义了一系列算法,并将每个算法…...
⭕️【论文阅读】《Interactive Class-Agnostic Object Counting》
[2309.05277] Interactive Class-Agnostic Object Counting (arxiv.org) code: cvlab-stonybrook/ICACount: [ICCV23] Official Pytorch Implementation of Interactive Class-Agnostic Object Counting (github.com) 目录 Abstract Abstract 我们提出了一个新…...
高效的编程学习方法和技巧
编程小白如何成为大神?大学新生的最佳入门攻略 编程已成为当代大学生的必备技能,但面对众多编程语言和学习资源,新生们常常感到迷茫。如何选择适合自己的编程语言?如何制定有效的学习计划?如何避免常见的学习陷阱&…...
sublime text插件开发
手工开发了一些ST的py插件,记录过程中遇到的一些问题。 ST3/ST4 begin_edit问题 报错: begin_edit() missing 2 required positional arguments: edit_token and cmdST3时已经不能直接调view.begin_edit方法了,需要通过runCommandTextComm…...
【Linux网络】网络层协议:IP
本篇博客整理了 TCP/IP 分层模型中网络层的 IP 协议,旨在让读者更加深入理解网络协议栈的设计和网络编程。 目录 一、网络层 二、IP 报头 1)报头与有效载荷的分离 2)有效载荷的上交 3)源 IP 与目的 IP 4)生存时间…...
分布式接口文档聚合,Solon 是怎么做的?
1、分布式接口文档聚合,是什么? 如果你有 “22” 个不同的服务(比如微服务),每个服务都有自己的接口文档。每个服务的文档各自打开,估计你会觉得很麻烦的? 再如果,它们是用 openap…...
多尺度病理图像纹理特征作为肺腺癌预后预测的新指标|文献精读·24-08-09
小罗碎碎念 这一期推文分享的文献是2022年发表于 Journal of Translational Medicine 的一篇文章,目前IF6.1。 这篇文章值得刚入门病理AI领域的老师/同学仔细研读,因为思路清晰,该讲到的流程基本都涉及了,详细讲述了病理图像的各种…...
RAG+Agent项目实践系列:基于本地菜谱知识库的大语言模型RAG+Agent的解决方案设计和实现
RAG+Agent项目实践系列:基于本地菜谱知识库的大语言模型RAG+Agent的解决方案设计和实现 为 A 项目构建一个基于菜谱知识库的问答机器人,由业务方提供一系列菜谱知识库和公司概况介绍材料,根据这些知识库要求实现一个问答机器人: 实现用户对于机器人自我身份和公司情况的回…...
JupyterNotebook添加Anaconda中已有的虚拟环境
比如,在Acaconde中存在一个我已经配置好的虚拟环境pose,现在我想在Jupyter中使用它 那么可以使用ipython kernel install --user --name 你要添加的环境 添加到Jupyter中。 对于Jupyter中已有的代码,就可以在Kernel - chanage kernel中改变内核。...
Pixel Couplet Gen一文详解:Retro Game UI与LLM春联生成融合方案
Pixel Couplet Gen一文详解:Retro Game UI与LLM春联生成融合方案 1. 项目概览 Pixel Couplet Gen是一款将传统春联文化与现代AI技术相结合的创新应用。通过ModelScope大模型驱动,我们打造了一个充满怀旧游戏风格的春联生成器,让用户在数字世…...
城通网盘直链解析:三步实现免费高速下载的完整方案
城通网盘直链解析:三步实现免费高速下载的完整方案 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 还在为网盘下载速度慢而烦恼吗?ctfileGet为你提供了一个智能解决方案…...
SAP MM新手避坑指南:手把手教你搞定UB型STO库存调拨(从ME21N到MIGO全流程)
SAP MM新手避坑指南:手把手教你搞定UB型STO库存调拨(从ME21N到MIGO全流程) 刚接触SAP MM模块的新手,面对库存转储订单(STO)这个看似简单实则暗藏玄机的功能时,往往会在UB型订单的创建和操作过程…...
OpenClaw硬件监控方案:Qwen3.5-9B实时预警服务器异常状态
OpenClaw硬件监控方案:Qwen3.5-9B实时预警服务器异常状态 1. 为什么需要智能化的硬件监控? 去年夏天,我负责维护的一台GPU服务器突然宕机,导致训练任务中断。排查后发现是内存泄漏问题——但传统的监控系统只在内存耗尽时才发出…...
Windows开发者的容器化进阶:深度配置WSL2的.wslconfig与wsl.conf,榨干你的Docker替代方案性能
Windows开发者的容器化进阶:深度配置WSL2的.wslconfig与wsl.conf,榨干你的Docker替代方案性能 当你在Windows上使用WSL2运行容器时,是否遇到过内存占用飙升、磁盘空间告急或是网络配置复杂的困扰?作为已经跨过WSL2基础门槛的中高…...
如何高效使用付费墙绕过工具:Chrome扩展的完整实践指南
如何高效使用付费墙绕过工具:Chrome扩展的完整实践指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息获取日益重要的今天,付费墙成为许多用户访问优质…...
SEO整站优化服务需要哪些专业技能_SEO整站优化服务如何提高网站的技术优化
SEO整站优化服务需要哪些专业技能_SEO整站优化服务如何提高网站的技术优化 在当今数字化时代,网站的成功与否在很大程度上取决于其在搜索引擎上的排名。SEO整站优化服务作为提高网站可见度和流量的关键手段,需要一系列专业技能的支持。本文将详细探讨SE…...
[具身智能-236]:OpenCV ROI:Region of Interest(感兴趣区域)
在 OpenCV 中,ROI 是 Region of Interest(感兴趣区域)的缩写。简单来说,ROI 就是从图像中切出来的“一块”。在处理图像时,我们往往不需要处理整张图片(比如处理人脸时不需要管背景里的树)&…...
【投资小知识】金融投资领域常说的 Alpha(α)和 Beta(β)
Alpha(α) 和 Beta(β) 是金融投资领域的两个核心概念,用于拆解投资收益的来源和衡量风险。它们源于资本资产定价模型(CAPM),是量化投资和因子分析的基础。一、Beta(β&a…...
STM32 智能垃圾桶项目笔记(二):基于TIM4与中断回调的超声波测距逻辑优化与实战
1. TIM4定时器在超声波测距中的关键作用 在智能垃圾桶项目中,超声波测距的准确性直接决定了自动开盖功能的可靠性。原始方案使用TIM3实现1μs延时已经解决了触发信号的问题,但Echo信号的高电平时间测量需要更高精度的方案。这就是TIM4定时器大显身手的地…...
