Linux
我可以在沒有執行檔的情況下執行一個全新的程序嗎?
假設我的非 root 32 位應用程序在 64 位系統上執行,其所有文件系統都以只讀方式掛載。該應用程序在記憶體中創建 64 位 ELF 的映像。但由於只讀文件系統,它無法將此圖像轉儲到文件中進行
execve
處理。是否還有一種受支持的方式可以從此圖像啟動程序?注意:這裡的主要問題是從 32 位模式切換到 64 位,而不是做任何可能不可靠的 hack。如果解決了這個問題,那麼整個問題就變得微不足道了——只需製作一個自定義載入器。
是的,通過
memfd_create
和fexecve
:int fd = memfd_create("foo", MFD_CLOEXEC); // write your image to fd however you want fexecve(fd, argv, envp);
您正在尋找類似“userland exec”的東西。在這裡執行。基本上,這涉及將一些沒有外部引用的與位置無關的程式碼載入到記憶體中,並將其標記為可執行。此位置無關程式碼刪除先前執行的執行檔,並重新載入。聽起來您可能必須修改我至少寫了一點的使用者區執行程序。