2013-06-25 59 views
1

因此,我們有一個供應商的共享庫,它不會在Linux或Android上(但在其他平臺上)以靜態存檔格式以.a格式提供庫,因爲它們不便於他們更改他們的構建過程。問題是需要包裝線程創建,malloc和其他許多apis來解決平臺非標準libc中的錯誤。我們用LD使用「 - wrap」命令將函數重定向到我們的包裝。不幸的是,編譯.so,我們不能重新鏈接它。有沒有辦法將.so轉換爲靜態存檔並重新鏈接它,甚至是重寫鏈接表以將這些調用重定向到我們的包裝?重寫elf中的鏈接表

除了拆卸,更改庫和重新組裝之外,我想不出任何方法可以輕鬆完成此操作。

+0

'LD_PRELOAD'技巧有幫助嗎? – 2013-06-25 18:20:42

+0

,因爲在android上,你的啓動過程是Zygote進程的分叉,所以你不能使用LD_PRELOAD。您可以在子進程上使用LD_PRELOAD,但不能在主進程中執行。我希望我能。 –

回答

1

反正是有旋轉。所以爲靜態檔案

LD_PRELOAD似乎達到你想要什麼,最簡單的方法。

因爲在android上,你是啓動過程中的Zygote進程的fork,所以你不能使用LD_PRELOAD。您可以在子進程上使用LD_PRELOAD,但不能在主進程中執行。

所以在你的「啓動」過程中,修改環境和execve真正的程序。問題解決了?