我想在嵌入式系統上運行的c程序中構建一個接口。這應該接受一些表示c函數的字節碼。這段代碼將被加載到內存中並執行。這就像遠程將代碼注入正在運行的應用程序一樣。這裏唯一的區別是我可以實現或更改運行代碼並提供一個接口。如何注入或動態加載c函數到另一個c程序
整個事情應該用於在目標系統上注入測試代碼。
我目前的問題是,我不知道如何從現有的c函數中構建這樣一個字節碼。如果我知道函數的起始地址,映射和執行這個就不成問題了。
目前我正在使用Ubuntu進行測試,這使我可以嘗試一些在嵌入式系統中不可行的技術(根據缺失的操作系統庫)。
我建立一個共享對象,並用於
dlopen()
和dlsym()
來運行該函數。這工作正常,問題在於我沒有嵌入式系統中的這些功能。我讀了一些關於將共享對象加載到內存中並運行的內容,但我找不到這方面的示例。 (見http://www.nologin.org/Downloads/Papers/remote-library-injection.pdf)我還採取了一個簡單的字節碼,只是在標準輸出中打印hello world。我使用
mmap()
將此代碼存儲在內存中並執行它。這也很好。這裏的問題是我不知道如何創建這樣一個字節碼,我只是使用了一個來自互聯網的hello world示例。 (見https://www.daniweb.com/programming/software-development/threads/353077/store-binary-code-in-memory-then-execute-it)我還在這裏找到了一些東西:https://stackoverflow.com/a/12139145/2479996哪些工作得很好。但在這裏我需要一個額外的鏈接腳本,已經爲這樣一個簡單的程序。
此外,我看着這個職位:https://stackoverflow.com/a/9016439/2479996 根據這個答案我的問題將解決與「X11項目」。 但我並沒有真正發現太多,也許你們中的一些人可以提供給我一個鏈接。
是否有另一種解決方案來做到這一點?我錯過了什麼?或者有人可以爲我提供另一種解決方案嗎? 我希望我沒有錯過任何東西。
在此先感謝
這樣做非常棘手,細節取決於您使用的嵌入式系統。 –
太寬泛,非常糟糕的主意。你想讓物聯網設備的僵屍網絡更容易? – Olaf
我不明白你想要做什麼與bootloader不同。爲什麼你的字節碼不能簡單地編譯爲自己的代碼?您可以從.o文件中提取編譯的函數。 –