gpt4 book ai didi

c - ARM - 如何从 C 函数中执行单个汇编指令(机器代码)

转载 作者:太空宇宙 更新时间:2023-11-04 08:00:15 25 4
gpt4 key购买 nike

我能否通过在运行的 C 代码中生成有效的 native 可执行汇编指令来执行它?

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

最佳答案

安全地做你想做的事在技术上是不可能的;执行一条汇编指令。问题是“上下文”或机器状态。您需要像这样扩展 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这是一个试图保持性能并保证内存访问的概念。它也不像虚拟机那样受到专利保护(目前)。

关于c - ARM - 如何从 C 函数中执行单个汇编指令(机器代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47209843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com