乐鑫技术交流
直播中

张霞

7年用户 1030经验值
私信 关注
[问答]

GDBStub抛出异常的原因?怎么解决?

大家好
,我有一个应用程序需要使用 GDBStub 进行调试。我在 gdb 存根旁边编译了我的应用程序,然后开始出现致命异常 3。我反编译了 elf 以找到异常的位置,结果发现它在 gdbstub_init 本身内
代码:全选Fatal exception (3):
epc1=0x4026ffc4
epc2=0x00000000
epc3=0x402213bb
epcvaddr=0x401010b8
depc=0x00000000
retn_add=0x4027084c

地址4026ffc4是这个
代码:全选static void ATTR_GDBINIT install_exceptions() {
   //Replace the user_fatal_exception_handler by a jump to our own code
   int *ufe=(int*)user_fatal_exception_handler;
   //This mess encodes as a relative jump instruction to user_fatal_exception_handler
   *ufe=((((int)gdbstub_user_exception_entry-(int)user_fatal_exception_handler)-4)<<6)|6;
4026ffb0:   ffff41                  l32r   a4, 4026ffac
4026ffb3:   fffd21                  l32r   a2, 4026ffa8
4026ffb6:   fcc222                  addi   a2, a2, -4
4026ffb9:   c02240                  sub   a2, a2, a4
4026ffbc:   1122a0                  slli   a2, a2, 6
4026ffbf:   630c                   movi.n   a3, 6
4026ffc1:   202230                  or   a2, a2, a3
4026ffc4:   005422                  s16i   a2, a4, 0
4026ffc7:   f52020                  extui   a2, a2, 16, 16
4026ffca:   015422                  s16i   a2, a4, 2
4026ffcd:   f00d                   ret.n

我意识到 gdb 试图修改 SDK 中 user_fatal_exception_handler 的 IRAM 地址。
但我不明白为什么它会在此时抛出

更多回帖

发帖
×
20
完善资料,
赚取积分