推 Bencrie:改LD_LIBRARY_PATH 不知道會不會太囉嗦 XD? 06/03 20:20
推 loveflames:我在linux下寫dll,幾乎都是用LD_PRELOAD,不過用途 06/03 20:24
→ loveflames:不太一樣就是了 06/03 20:25
→ tinlans:PIC 全名網頁就有我就不說了。主要是讓產生出來的 asm 06/03 23:35
→ tinlans:採用相對定址法代替直接定址法。因為同一份 text 會 share 06/03 23:36
→ tinlans:給不同的 process 用,產生的 machine code 不能隨便用 06/03 23:37
→ tinlans:絕對位址。 06/03 23:37
→ tinlans:LD_PRELOAD 的用途比較偏向 debug 之類的,像是抓 memory 06/03 23:38
→ tinlans:leakage 的 lib,可以設在那裡面,把 malloc() / free() 06/03 23:38
→ tinlans:之類的 symbol 先搶下來變成自己的版本,就能多做一些事。 06/03 23:39
→ tinlans:正常來說用 -lxxx 去 link .so 的話, 06/03 23:40
→ tinlans:還是以 LD_LIBRARY_PATH 為主。 06/03 23:40
→ tinlans:不過原 po 又在推文中說過他是用「load」的, 06/03 23:41
→ tinlans:這讓我比較懷疑他是不是沒用 -lxxx 這種方法,而是採用 06/03 23:41
→ tinlans:dlopen() + dlsym() 之類的動態載入和連結機制。 06/03 23:42
→ tinlans:如果是這樣,Linux 需要使用 -ldl 連結 libdl.so, 06/03 23:43
→ tinlans:但 FreeBSD 的這些函式是內建在 BSD 版的 libc, 06/03 23:44
→ tinlans:所以不需要加上任何參數。我聽說 MacOSX 跟 FreeBSD 很像 06/03 23:44
→ tinlans:,所以先補充這一點。 06/03 23:44