簡體   English   中英

如何在程序中運行一些機器代碼

[英]How can I run some machine code from within my program

如何在C程序中運行某些機器代碼?

假設我有指令“ B2”,該如何執行? (請注意,說明將在運行時更改)

  1. 將代碼加載到內存中。
  2. 創建指向此內存的函數指針並調用它( void (*foo)(void) = mmap(...)foo(); ),或使用內聯匯編將代碼“ jmp”“跳轉”。

請注意,在較新的系統上,您需要確保請求的內存沒有設置NX(不執行)位。 如果設置了NX,則跳轉到您的代碼將產生處理器異常,並且您的進程將被殺死。

在Linux上,這是mmap標志;在Windows上,還有其他方法可以請求不受DEP保護的內存。

您的代碼也不應依賴固定地址,也就是說,它應與位置無關。 您不能保證相同的加載地址。

如果您的代碼需要調用程序,則最好通過函數調用為其提供一個表,在該表中可以解析可執行文件或C庫的函數地址,或嘗試使用系統鏈接程序(使用ld.so可能會有些運氣) ld.so在Linux上的功能,但這當然是不可移植的)。

暫無
暫無

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

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