2011-11-10 47 views
1

我對C和C++編程相對不熟悉,但是如果可以從共享庫加載和調用符號(據我所知編譯和鏈接很像二進制文件),是否也可以在運行時加載另一個[executable]二進制文件的符號?加載來自其他二進制文件的符號

我特別感興趣的是在Linux上用GCC做這件事。

回答

1

理論上是的,你應該能夠從二進制文件中提取出對象並且鏈接它(靜態或者動態),但是它需要你檢查二進制結構。這很容易完成,因爲現代Linux系統都使用ELF二進制文件,這是有據可查的。建議您從wikipedia article開始並從那裏開始。

+0

這對我來說是一個很好的開始,謝謝! – andyortlieb

2

如果要設置在Windows

  1. LoadLibrary共享庫加載到當前進程
  2. GetProcAddress以獲得您想要調用

就像Unix函數的地址操作系統。像dlopen的對dlsym

An example of dlsym看6.6。文件demo_dynamic.c

+1

限制:二進制文件必須編譯爲動態鏈接的共享對象。動態鏈接器期望庫名稱sonames和版本僅在庫鏈接期間放置,而不是獨立的可執行鏈接。 – moshbear

+1

該OP明確提到**共享庫** –

+2

「如果可以加載和調用共享庫中的符號(據我所知編譯和鏈接很像二進制文件),**也可以從另一個二進制文件加載符號在運行時?**「 – moshbear

相關問題