【发布时间】:2017-11-09 19:15:59
【问题描述】:
我可以通过在运行的 C 代码中生成有效的本机可执行汇编指令来执行它吗?
void execute_single_asm_instruction(char * ptr_asm, int length)
{
// ptr_asm[] = valid assembly instruction
execute_asm(ptr, length);
}
可以写execute_asm吗?
这是在裸机 ARM 上运行的,即 RTOS 是自定义的,不是 Linux、QNX、Windows 等。
这和我之前的问题有关:
how to single-step code on-target with no jtag, breakpoints, simulator, emulator
【问题讨论】:
-
您可以将指令写入可写和可执行的内存(如果有的话)并跳转到那里。
-
@EugeneSh。我会用谷歌搜索什么文档?
-
类似...“自修改代码”
-
当然,JIT 编译器(如 LLVM)可以做到这一点。但是你不需要编译器,只需要一个汇编器。为什么呢?除非您在运行时生成 asm 源字符串,否则在构建时将它们组装成机器代码会更容易。这些被称为“函数”:P,您可以通过函数指针调用它们。
-
@PeterCordes 哈哈。这是我另一个问题的一部分。我计划从现有函数一次执行一条 asm 指令。