我想要一個簡單的C方法能夠在Linux 64位機器上運行十六進制字節碼。下面是我的C程序:如何讓c代碼執行十六進制字節碼?
char code[] = "\x48\x31\xc0";
#include <stdio.h>
int main(int argc, char **argv)
{
int (*func)();
func = (int (*)()) code;
(int)(*func)();
printf("%s\n","DONE");
}
,我試圖運行("\x48\x31\xc0"
)我通過書面方式這個簡單的彙編程序(它不應該做任何事情)
獲得的代碼然後編譯並objdump-它獲得字節碼。
但是,當我運行我的C程序時,出現了分段錯誤。有任何想法嗎?
即使你的數據段是可執行的,或者你沒有啓用NX,你能指望這樣做?它執行一條指令,然後執行後面的指令(你不控制),然後執行指令,直到它到達的內存不代表觸發段錯誤的合法代碼或代碼。 – 2012-03-31 23:55:16
您需要爲'ret'添加字節碼,因爲您做的間接函數調用應該是一個'call',它將返回地址壓入堆棧。至少,這是我受過最好教育的猜測,我從未見過這樣的事情。 – Chris 2012-03-31 23:56:56
我希望這樣做什麼都不做,但我希望它能夠在不崩潰的情況下運行。 – Nosrettap 2012-03-31 23:58:52