通過dlopen函數(shù)打開136字節(jié)大小的so文件可以將藏匿于程序頭表的匯編指令運行,這是如何做到的,。
在學習復現(xiàn)某個漏洞的時候,,查閱到了分析文章,該文章地址為該漏洞的分析文章,。在作者進行漏洞利用時,構造了如下的.so文件,。

白色框框住的二進制數(shù)據(jù)就是如下圖的匯編指令

匯編指令的意思就是利用execve系統(tǒng)調(diào)用運行了/tmp/hax腳本,。
當我通過dlopen函數(shù)與openssl的engine參數(shù)加載該.so文件時,,該.so文件都能被運行,且無報錯,,如下圖所示,。

其中runlib程序代碼,以及/tmp/hax腳本內(nèi)容如下圖所示


openssl的engine參數(shù)最后也是運行了dlopen。
那么問題就是,,為什么dlopen可以運行這個.so的這段匯編指令,,dlopen打開.so文件不應該只能運行.init段的代碼嗎?
我簡略分析了一下dlopen的源碼,,也僅僅是打開.so文件讀取ELF頭數(shù)據(jù)進行比對,,然后將程序段載入內(nèi)存,并無直接執(zhí)行指令的代碼,。
同時,,該.so文件數(shù)據(jù)的入口地址為0x2,圖1白框的匯編指令位于第一個Dynamic類型的程序頭處,,該程序頭的記錄該程序頭的地址為0x58,,好像怎么樣都不會執(zhí)行到這段匯編指令啊,。
該程序頭的各項數(shù)據(jù)如下圖所示

那么請問為什么通過dlopen打開該.so文件就可以運行這段匯編指令呢?