我可以 malloc for 然后将一个微小的二进制文件加载到 RAM 中并定义一个函数指针并执行该函数。
C 代码不使用标准库或 esp-idf 调用,不使用堆,不依赖 .bss 进行初始化,它甚至没有任何包含,它只是计算获取一个无符号整数并返回一个无符号整数,但是因为我有 CI 中的代码,如果我可以这样做,我不想将它转换为 Lua 或 Javascript,我不想 OTA 更新整个二进制文件只是为了添加一个 300 字节的函数。我习惯于像这样使用 C 在其他微控制器上的现有二进制文件中嵌入新代码,但没有 IDA 或 Xtensa 模拟器,我有点受限。
代码:
全选
xtensa-esp32-elf-gcc -std=c99 -Os -nostdlib -c test.c
这会产生 test.o
代码:
全选
xtensa-esp32-elf-objcopy -O binary test.o test.bin
进一步的考虑:
1. 相对于 bin 开始的单个编译函数的入口点。我一开始就喜欢它,但 .rodata 目前是
2。如果在 IRAM 中,.rodata 将需要 32 位对齐,除非有一种方法可以访问与偏移量为
3 的 DRAM 相同的内存。无法将 bin 加载到 IDA 中进行反汇编它仔细检查它在做什么。我的代码中没有对 memcpy 的引用,想确保它不会在最终的 bin 中结束。