作者:陆麟
转载请征得作者同意.
2001.6.1
当PE Loader尝试加载一个PE模块, 首先尝试分配一块堆, 读取文件, 然后分析PE文件头, 随后解决EXPORT表, 当解决成功后解决IMPORT表. 此时如果PE模块有函数IMPORT, 而被IMPORT的函数属于一个未加载到内存的模块, 也就是说外部引用不存在, PE Loader就返回0xfffffff4.
例如,
PELDR_LoadModule(&hKernel32,”Kernel32.dll”,NULL);
返回一定成功. 因为Kernel32.dll所有的外部引用都在启动时解决了.
而PELDR_LoadModule(&hKernel32,”Inetmib1.dll”,NULL);
就无法成功, 并且返回码为0xfffffff4. 如果要查ERROR CODE 对应的意义,你将发现文档里根本没有这个
ERROR CODE 的说明. 也就无法判断错误出在那里.
Tip:
PELDR_LoadModule(PHPMODULE pHandle,char* ModuleName, PHLIST phList)其实是PELDR_LoadModuleEx(PHPMODULE
pHandle,char* ModuleName, PHLIST phList, NULL) 的包装层. 对PELDR_LoadModule的调用会直接以如上模式对PELDR_LoadModuleEx调用.