1
再一次,對於不好的標題感到抱歉。代碼如何知道API函數的地址?
所以我上週一直在研究PE格式,而且我沒有完全得到一些東西。當一個進程加載時,所有的DLL都被映射到內存中。我不明白的是,因爲一個DLL可以加載到一個隨機的基地址,那麼.exe文件的代碼如何能夠知道API函數的地址?是否有一些「啓動代碼」,查找Kernel32.dll或什麼?我知道這個過程很容易使用GetProcAddress查找函數,但它如何獲取GetProcAddress的地址?
導入的地址是否始終相同?它如何獲得這個地址?此外,是否有每個加載的DLL的不同導入表,還是隻有一個導入表,其中每個DLL的所有功能都加載到哪裏? – user2073973
dll知道函數的地址在哪裏。操作系統(和dll)知道dll作爲一個整體在太空中的位置。應用程序和dll都知道函數的名稱,因此應用程序會針對每個函數詢問dll,並且此時dll和/或操作系統會從導入表中知道每個項目所在的位置,並告知應用程序 –
因此,當我調用LoadLibrary,它會自動將地址等添加到IAT中嗎? – user2073973