portable-executable

    3熱度

    1回答

    根據我讀過的文檔,Windows可執行文件的導入目錄通常放在名爲.idata的部分。 (我知道這些名稱實際上只是註釋,但'通常......被稱爲'可能意味着Microsoft工具鏈將默認使用該名稱。) 當我編譯並鏈接一個簡單的C測試程序與Microsoft編譯器然後dumpbin的結果,沒有一節叫做.idata。但是,在可選標題中有一個肯定的RVA和導入目錄的大小,所以導入表就在那裏。 現在的導入

    1熱度

    1回答

    爲什麼該基址是CFF和OllyDbg的區別?

    0熱度

    1回答

    用於調用DLL函數的地址修正是一個多階段過程:鏈接器將調用指令定向到間接跳轉指令,並將間接跳轉指令指向在導入表中的內存單詞。 rdata部分,其中Windows程序加載器將在運行時加載DLL時放置該函數的地址。 間接跳轉指令必須由鏈接器生成,因爲編譯器不知道該函數將變成DLL。程序文件大小通過爲每個函數僅生成一個間接跳轉指令而被最小化,無論它調用了多少個地方。 鑑於此,明顯的方式做到這一點是收集所

    2熱度

    1回答

    我試圖生成PE格式可執行文件;我現在正處於我有一些讓dumpbin滿意的事情,並且據我所知,與微軟鏈接器鏈接的空程序沒有本質區別,但Windows仍然拒絕它:PE file - what's missing? 如果我有一些生成有效PE文件的算法,也許我可以從那裏爬山。這是我到目前爲止已經發現: 還有大量的文檔,示例代碼和工具用於閱讀 PE文件,而不是從頭開始生成它們。 PE Bliss在其功能列表

    0熱度

    1回答

    我依靠GetProcAddress()來完成某些函數的掛鉤。 雖然我得到了一個可怕的結果,說實話,我真的不知道發生了什麼。 看來這段代碼會輸出「這是怎麼回事?」 : int main(void) { HMODULE ws32 = LoadLibrary("WS2_32.DLL"); if (GetProcAddress(ws32, "ntohl") == GetProcAdd

    0熱度

    1回答

    如何以編程方式確定給定的本機VB6生成的DLL/OCX所依賴的類型庫(GUID和版本)? 對於背景:當打開一個引用的類型庫無法加載其依賴項之一的項目時,VB6 IDE扼流圈窒息,但它沒有那麼有用,無法說明哪個依賴項無法滿足 - 甚至該引用具有無法滿足的依賴性。這是我公司常見的情況,所以我試圖補充VB6 IDE糟糕的故障排除信息。 相關細節/嘗試: 我做有VB源代碼。這告訴我在回購中特定版本的GUI

    0熱度

    1回答

    ich想要得到一個XAMPP或另一個Apache Web服務器,用於與我的自定義網站在根。是否有一個原因,我只爲此獲得一個.exe文件?

    1熱度

    1回答

    再一次,對於不好的標題感到抱歉。 所以我上週一直在研究PE格式,而且我沒有完全得到一些東西。當一個進程加載時,所有的DLL都被映射到內存中。我不明白的是,因爲一個DLL可以加載到一個隨機的基地址,那麼.exe文件的代碼如何能夠知道API函數的地址?是否有一些「啓動代碼」,查找Kernel32.dll或什麼?我知道這個過程很容易使用GetProcAddress查找函數,但它如何獲取GetProcAd

    0熱度

    1回答

    以下是在64位Windows 8上Kernel32.dll的前幾個字節的轉儲.PE簽名的偏移量是f8存儲在位置3c。在f8(50 45 00 00)處的值似乎表示適當的PE簽名,其應該被機器類型所遵循,在這種情況下對於IMAGE_FILE_MACHINE_I386而言預計爲014C,但我們發現的是64 86.對此的任何想法明顯差異?我知道我可能會錯過許多有關dll出現在磁盤上的方式以及它們在加載到

    1熱度

    1回答

    我正在編寫Windows二進制文件的鏈接器,目前正致力於實現COMDAT。我認爲我理解了大部分規範,除了COMDAT部分的三個記錄(部分標題,部分符號和輔助符號)之外,規範似乎沒有提及存儲在其中的通用名稱。 換句話說,當我這樣的對象上運行DUMPBIN,它給輸出,如: SECTION HEADER #8 .text$mn name 0 physical address 0