2010-11-22 37 views
0
  • 基於Windows的可執行文件是如何工作的?
  • 如何在可執行文件中找到起始地址?
  • 對於任何文件執行的地址存儲在哪裏,我們如何讀取這些地址?
  • 對於任何DLL或EXE文件的調用和ret如何工作?

給我提示使用ida pro反彙編程序。exe如何工作以及如何調用dll和exe文件尋址

回答

1

程序的虛擬起始地址被記錄在可執行文件的頭部。任何理解這些結構的頭文件查看器程序都可以很容易地顯示出來,比如HT(http://hte.sf.net/) - 這只是一個例子。 IDAPro可能有類似的東西。

0

呼叫和RET任何DLL或EXE文件是如何工作的

這實際上並不取決於它是否是一個DLL或有問題的EXE。

當Windows的模塊加載器完成加載DLL時,它使用DLL_PROCESS_ATTACH參數(請參閱the documentation of DllMain)調用DLL的起始地址(稱爲'DllMain')。如果DllMain返回1,則加載器繼續。

然而,當你啓動一個EXE,系統會生成一個新的進程和地圖ntdll.dll中到該進程的地址空間,然後產卵從NTDLL的起始地址運行的主線程。該線程然後執行更多初始化,加載EXE文件(加上其導入表中列出的任何DLL)並調用由EXE的起始地址標識的函數。當該函數返回時,NTDLL然後調用NtTerminateProcess這會殺死所有正在運行的線程並關閉該進程。

使用用戶模式調試器可能很難觀察到此EXE啓動過程;一些調試器在進程初始化的早期階段努力掙扎。