【问题标题】:ESP32 Stack canary watchpoint triggered. Why?触发了 ESP32 堆栈金丝雀观察点。为什么?
【发布时间】:2021-08-06 01:37:24
【问题描述】:

我有一个程序可以使用 Boneh-Franklin 加密对文本进行加密和解密。这在 PC 上效果很好,但由于某种原因导致 ESP32 不断重启,并显示以下错误消息:

setup2
setup2.2
setup2.3
Guru Meditation Error: Core  1 panic'ed (Unhandled debug exception)
Debug exception reason: Stack canary watchpoint triggered (loopTask) 
Core 1 register dump:
PC      : 0x40083774  PS      : 0x00060b36  A0      : 0x3ffb0120  A1      : 0x3ffb0060  
A2      : 0x68efa751  A3      : 0x3ffb0938  A4      : 0x3ffb0720  A5      : 0xfb879c5c  
A6      : 0x61b36b71  A7      : 0x0006970f  A8      : 0x01709af4  A9      : 0x01709af4  
A10     : 0xfaa5dfed  A11     : 0x01a3ff3b  A12     : 0x76651dec  A13     : 0x00000001  
A14     : 0x00000000  A15     : 0x04adbe74  SAR     : 0x0000001e  EXCCAUSE: 0x00000001  
EXCVADDR: 0x00000000  LBEG    : 0x400f1cc5  LEND    : 0x400f1cc9  LCOUNT  : 0x00000000  

ELF file SHA256: 0000000000000000

我使用的是 Arduino ESP32 环境,在 main.cpp 中将 CONFIG_ARDUINO_LOOP_STACK_SIZE 设置为 8192,8k 堆栈应该足以运行它。它可以在 PC 上完美运行,为什么不在 ESP32 上对我来说是个谜。任何人都可以帮忙吗?我完全没有想法。 对于 Boneh-Franklin 的实现,我使用了这个库:https://github.com/miracl/core 我自己的代码约为 200 行,我已将其上传到 Google Drive:https://drive.google.com/file/d/1EY0mGC2UiVNhE68b5Q0VB9JIY2Owbpxg/view?usp=sharing

【问题讨论】:

    标签: esp32 arduino-esp32


    【解决方案1】:

    查看代码,堆栈需要超过 8192 个字节并不是不合理的,因为在堆栈上分配了很多大对象,无论是在您的代码中还是在库中,例如:

    循环()

    • csprng RNG – 128 字节
    • ECP2 pPublic – 264 字节
    • ECP2 cipherPointU – 264 字节
    • ECP privateKey – 132 字节

    加密(...)

    • ECP pointQId – 132 字节
    • char[] dst – 256 字节
    • BIG l – 40 字节
    • FP12 theta – 532 字节

    PAIR_fexp()

    • FP2 X – 88 字节
    • BIG x – 40 字节
    • FP a, b – 2 * 44 = 88 字节
    • FP12 t0, y0, y1, y2, y3 – 5 * 532 = 2660 字节

    增加你的堆栈大小。它可能会有所帮助。

    【讨论】:

    • 谢谢。我已将堆栈大小增加到 64k。 ESP32 仍然不断重启,但错误消息现在不同:setup2 setup2.2 setup2.3 setup2.4 kkkk encrypt Guru Meditation Error: Core 1 panic'ed (StoreProhibited)。异常未处理。核心 1 寄存器转储:PC:0x400d964b PS:0x00060930 A0:0x800d1048 A1:0x3ffcfe40 A2:0x3ffd04a4 A3:0x0000000b A4:0x3ffb855c A5:0x3ffb858c 等
    • 使用回溯分析器(例如github.com/tve/esp32-backtrace)解码代码崩溃的确切位置。
    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多