Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Debug
RISC-V_milk-v_CV1800B
risc-v_RISCV
RISC-V反汇编调试记录分享
发布于 2024-08-08 12:36:01 浏览:311
订阅该版
[tocm] 本文记录一次使用反汇编进行调试分析。 最近在 rtthread 下适配 MilkV Duo 的硬件定时器驱动时遇到了一些问题,demo 运行时报以下错误: ```shell 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) = 0x0x00000000deadbeef s4(x20) = 0x0x00000000deadbeef s5(x21) = 0x0x00000000deadbeef s6(x22) = 0x0x00000000deadbeef s7(x23) = 0x0x00000000deadbeef s8(x24) = 0x0x00000000deadbeef s9(x25) = 0x0x00000000deadbeef s10(x26) = 0x0x00000000deadbeef s11(x27) = 0x0x00000000deadbeef Function Arguments Registers: a0(x10) = 0x0x00000000802604c0 a1(x11) = 0x0x000000008029f6b0 a2(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 Enabled Last Privilege is Supervisor Mode Permit to Access User Page Not Permit to Read Executable-only Page satp = 0x0x0000000000000000 Current Page Table(Physical) = 0x0x0000000000000000 Current ASID = 0x0x0000000000000000 Mode = No Address Translation/Protection Mode -----------------Dump OK--------------------- --------------Thread list-------------- current thread: tshell --------------Backtrace-------------- ``` 想要查看 `0x80232a72` 处的程序指令,确认是否有非法指令。由于身边没有合适的调试器,不方便通过GDB对出错地址的代码进行定位。于是尝试通过反汇编进行分析: ```shell $ objdump -l -S rtthread.elf > out.c ``` 运行提示不支持当前架构,于是安装对应架构的反汇编工具: ```shell $ sudo apt install binutils-riscv64-unknown-elf ``` 安装完成后,即可进行反汇编: ```shell $ riscv64-unknown-elf-objdump -l -S rtthread.elf > out.c ``` 在反汇编得到的 `out.c` 中即可快速搜索定位到目标程序: ``` /home/Project/rt-thread/components/drivers/hwtimer/hwtimer.c:43 float tv_sec; float devi_min = 1; 80232a6e: 00023797 auipc a5,0x23 80232a72: 61a78793 addi a5,a5,1562 # 80256088
80232a76: 0007a787 flw fa5,0(a5) 80232a7a: fef42027 fsw fa5,-32(s0) ``` 即可继续进行分析调试。
5
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
螺丝松掉的人
这家伙很懒,什么也没写!
文章
42
回答
0
被采纳
0
关注TA
发私信
相关文章
1
RTTStudio调试时出现Debugger connection lost错误
2
RTT Studio ST-Link 每次Debug调试前都出错,但下载程序正常
3
使用RTT-Thread studio出现无法调试,且程序下载进去毫无反应?
4
rtt-studio debug模式优化
5
stlink下载程序不成功
6
studio中不能进入debug
7
studio Stlink 调试问题
8
同时接多个JLink,下载程序时需选择2次
9
studio的debug,有现场表达式吗?
10
大神们,rtthread-studio怎么自动刷新DEBUG的变量区的值?
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部