簡體   English   中英

ARM-如何從C函數中執行單個匯編指令(機器代碼)

[英]ARM - how to execute single assembly instruction (machine code) from within a C function

我可以通過在運行的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等。

這與我之前的問題有關:
如何在沒有jtag,斷點,模擬器,模擬器的情況下單步執行目標代碼

從技術上講,安全地做您想做的事是不可能的。 執行單個匯編程序指令。 問題是“上下文”或機器狀態。 您需要像這樣擴展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”代碼所依賴的寄存器。 因此,大多數人組成自己的“虛擬機”,並使機器語言更易於解碼。 由於您沒有操作系統,因此很難想到一個用例,在這種情況下,您嘗試執行現成的代碼,並在沒有現有操作系統的情況下使代碼正常工作。 為此,您將在每次調用時不斷進行上下文切換。 一次執行多條指令的解決方案將更快地執行,因為您不必為每條指令保存/恢復上下文。

如果您有安全應用程序並且性能至關重要,那么建議您研究帶有證明的代碼 ,該代碼試圖保持性能並保證內存訪問。 目前,它還不像虛擬機那樣具有專利負擔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM