2016-12-18 21 views
3

我想在嵌入式系統上運行的c程序中構建一個接口。這應該接受一些表示c函數的字節碼。這段代碼將被加載到內存中並執行。這就像遠程將代碼注入正在運行的應用程序一樣。這裏唯一的區別是我可以實現或更改運行代碼並提供一個接口。如何注入或動態加載c函數到另一個c程序

整個事情應該用於在目標系統上注入測試代碼。

我目前的問題是,我不知道如何從現有的c函數中構建這樣一個字節碼。如果我知道函數的起始地址,映射和執行這個就不成問題了。

目前我正在使用Ubuntu進行測試,這使我可以嘗試一些在嵌入式系統中不可行的技術(根據缺失的操作系統庫)。

是否有另一種解決方案來做到這一點?我錯過了什麼?或者有人可以爲我提供另一種解決方案嗎? 我希望我沒有錯過任何東西。

在此先感謝

+2

這樣做非常棘手,細節取決於您使用的嵌入式系統。 –

+0

太寬泛,非常糟糕的主意。你想讓物聯網設備的僵屍網絡更容易? – Olaf

+0

我不明白你想要做什麼與bootloader不同。爲什麼你的字節碼不能簡單地編譯爲自己的代碼?您可以從.o文件中提取編譯的函數。 –

回答

1

我看不到容易的解決方案。我知道的最接近的是GCC's JIT backend (libgccjit)Here是一篇關於它的博客文章。

作爲替代方案,您可以爲需要注入的代碼使用腳本語言。例如,ChaiScriptLua。在this question,有一個選項的摘要。當你在嵌入式設備上時,開銷可能很大。

如果使用基於LLVM的後端代替GCC,您可以查看Cling。它是基於LLVM和Clang的C++解釋器。根據我個人的經驗,它並不總是穩定的,但它被用於歐洲核子研究中心的生產。除了在LLVM中的動態編譯功能比在GCC中更高級之外。

相關問題