按照man page爲dlopen
:dlopen(NULL,RTLD_NOW)返回的主程序句柄的結構是什麼?
如果文件名是NULL,則返回的句柄是主 程序。
所以我的問題是這個句柄的結構是什麼,主程序和它的頭是什麼位置?謝謝。
按照man page爲dlopen
:dlopen(NULL,RTLD_NOW)返回的主程序句柄的結構是什麼?
如果文件名是NULL,則返回的句柄是主 程序。
所以我的問題是這個句柄的結構是什麼,主程序和它的頭是什麼位置?謝謝。
dlopen
return是一個不透明的void *
指針,但它確實指向了struct link_map
。
您需要將源代碼獲取到glibc
。查看elf
子目錄,然後查看link.h
文件,獲取struct link
的定義。
但是,當你在那裏,看看周圍有點,看看有多少代碼實現dlopen
,dlsym
,等。人。還有一些其他結構需要關注。這只是冰山一角。
對於我想要實現的,我已經看到了使用僞結構強制正確的內存對齊和訪問成員的示例代碼。
如果你解釋你想要什麼,以實現它可能會幫助:「這些不是你要找的機器人」
我不知道你通過強制正確的意思內存對齊訪問成員。爲什麼你需要強制對齊[和什麼]?而且,你指的是哪些成員?
無論filename
是否爲空,dlopen
都會返回一個不透明的句柄,該句柄可以傳遞給dlsym
和dlclose
。您不應該嘗試自己檢查手柄的數據。
爲什麼不呢?對於我想要實現的內容,我已經看到使用僞結構強制正確內存對齊和訪問成員的示例代碼。我很好奇官方結構是什麼樣子,因爲我更喜歡使用它。 – John
是的,它是一個指向'struct link_map'的指針,這是我想要得到的一切,以便我可以迭代共享對象列表。謝謝。 – John
只是做了更多的檢查。 'link.h' [和'elf.h']位於'/ usr/include'中,所以它可能更容易。這也意味着雖然原始指針是不透明的,但重新表示它是一種有些(即專家級別)支持的動作。另請參閱'dl_interate_phdr'。無論如何,glibc的elf subdir有很多代碼可以作爲指導 –
非常感謝'dl_iterate_phdr'正是我所需要的。 – John