安全地做你想做的事在技术上是不可能的;执行一条汇编指令。问题是“上下文”或机器状态。您需要像这样扩展 API,
extern void init_asm_context(void* context);
extern void execute_asm(void* context, char * ptr_asm, int length);
// context; global or declared.
// ptr_asm[] = valid assembly instruction
init_asm_context(&context);
execute_asm(&context, ptr, length);
问题是任何汇编程序指令都可以随机更改“C”代码所依赖的寄存器。为此,大多数人自己组成“虚拟机”,让机器语言更容易解码。由于您没有操作系统,因此很难想到您尝试执行现成代码并在没有现有操作系统的情况下使其工作的用例。为此,您将在每次调用时不断进行上下文切换。一次执行多条指令的解决方案将执行得更快,因为您不必使用每条 指令保存/恢复上下文。
如果您有安全应用程序并且性能很关键,我建议您调查 proof carrying code这是一个试图保持性能并保证内存访问的概念。它也不像虚拟机那样受到专利保护(目前)。
我是一名优秀的程序员,十分优秀!