1
再一次,对于不好的标题感到抱歉。代码如何知道API函数的地址?
所以我上周一直在研究PE格式,而且我没有完全得到一些东西。当一个进程加载时,所有的DLL都被映射到内存中。我不明白的是,因为一个DLL可以加载到一个随机的基地址,那么.exe文件的代码如何能够知道API函数的地址?是否有一些“启动代码”,查找Kernel32.dll或什么?我知道这个过程很容易使用GetProcAddress查找函数,但它如何获取GetProcAddress的地址?
导入的地址是否始终相同?它如何获得这个地址?此外,是否有每个加载的DLL的不同导入表,还是只有一个导入表,其中每个DLL的所有功能都加载到哪里? – user2073973
dll知道函数的地址在哪里。操作系统(和dll)知道dll作为一个整体在太空中的位置。应用程序和dll都知道函数的名称,因此应用程序会针对每个函数询问dll,并且此时dll和/或操作系统会从导入表中知道每个项目所在的位置,并告知应用程序 –
因此,当我调用LoadLibrary,它会自动将地址等添加到IAT中吗? – user2073973