C_and_CPP 板


LINE

前陣子很粗略的摸過DLL import和dependency walker 我試著簡單回答看看 不會講的太複雜 (畢竟也只是要知道怎麼用XD) 若有錯再請大家協助 要知道怎麼發揮dependency walker的威力 可能需要知道一點PE的運作(portable executable,其實就是exe,dll那些)會比較清楚 很簡單的來說 一隻PE要使用DLL內的function主要可以透過兩類方式 一種是在編譯/連結期 透過提供.lib 讓PE與該模組作static link 這樣子PE就會知道在load time的時候知道哪些module該被引入 而需要透過這個作法被引入的function會被紀錄在PE的import table內 你可以試著用PE Internals這類的tool打開exe來看看import table有哪些東西 有趣的是 有時候除了import table 還可以看到另一個表 叫做delay load import table 這些function一樣也是在編譯/連結時透過.lib作static link的 只是他們是在真正被呼叫的時候才會被引入 dependency walker最基本的運作原理主要就是parse這隻PE檔的table 它嘗試使用loader的工作方式來找出哪些模組會被load起來 並透過實作windows找DLL的順序和方式來找到windows可能使用的DLL版本(有時會錯) 但他終究不是loader 就你的範例而言 DllImport其實是一種run-time使用DLL的方式 LoadLibrary(), GetProcAddress()等也屬此類 而因為dependency walker不是loader 他只會查表找而不會執行到dllimport這段 所以他其實並不清楚這隻PE需要你範例中創造出來的那隻DLL 然而這也不是完全無解 dependency walker在2.0後加入了一個叫做 application profiling的功能 簡單的來說 就是先讓這隻PE load起來 再去監控這隻PE在load的時候實際上到底找了哪些module 引入哪些function 詳細的使用方式和原理作法可以參考它的說明 http://www.dependencywalker.com/help/html/application_profiling.htm 我手上暫時沒有windows 所以沒有實際玩過一遍你提供的範例 但就我先前經驗 使用了這個方法之後 就「比較有機會」能知道到底在run-time時還會額外使用哪些DLL 以及他們到底在不在系統內 但畢竟dependency walker只是一個跟著loader行為操作一遍的工具 實際上仍可能出現和loader行為有落差的地方 這就要真的跑跑看才知道 你也可以用sysinternals的ListDLLs來看一個process到底load了哪些DLL 但我想這跟你提到希望「檢查」的部份有些出入 畢竟這要能跑起來 就順便當作參考吧 當然 反過來說 你也可以試著讓原先的DLL用static link的方式跟PE連結 (先調整build DLL的選項讓他build出.lib 在PE使用到的部份引入.h 專案連結.lib) 這個時候再跑dependency walker 即便不進application profiling 也應該可以找到這隻DLL不見了 其實我覺得dependency walker的網站寫的算滿清楚的啦 用之前其實可以先參考看看 個人認為還滿有價值的 附上dependency walker針對不同dependency的支援狀態和一些名詞定義 http://www.dependencywalker.com/help/html/dependency_types.htm 其實前文所述也只是這個頁面的一點簡單翻譯啦 供你參考XD --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.141.162.158
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1509904764.A.EEA.html ※ 編輯: steve8625 (220.141.162.158), 11/06/2017 02:02:50
1F:推 VictorTom: 推一個:) 11/07 00:19
2F:推 downstairs: 感謝 11/07 07:35
3F:推 chehsunliu: Push 11/23 20:10
4F:推 Segundus: Push 11/23 20:12
5F:推 ncnoa: 推推 11/23 20:12
6F:推 a2735000: 推 11/23 20:12
7F:推 JSL1028: Push 11/23 20:12







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP