添加导入到导入表,是否可能?

时间:2011-06-09 18:00:12

标签: exe portable-executable import

我在C编码,我想知道是否可以从已导入的库中添加Imports到任何编译的EXE,例如,EXE Imports

  

的Kernel32.dll
     GetFileSize(),FindNextFileA,FindFirstFileA

有没有方法可以在此列表中添加其他功能?我们说CreateMutexA例如?

1 个答案:

答案 0 :(得分:0)

将项目放在所谓的“导入表”中是编译器(链接器)的工作,当它检测到正在编译的应用程序静态链接到库时,因为它使用特定的功能。在您的示例中,您将编译的应用程序调用CreateMutexA API,然后静态链接到Kernel32.lib。当加载程序启动您的应用程序时,它会检测到您的应用程序已静态链接到Kernel32.lib,因为导入表中存在FindNextFile,导入表中存在库(kernel32.dll)的名称,然后搜索Kernel32.dll的存在,当然它总是存在已加载到内存中)。导入表中存在项目意味着将调用API(很快或稍后)。导入表中缺少项目意味着不会调用API(除非您使用LoadLibrary和GetProcAdress - 也就是使用运行时动态链接库!)

不,没有特定的API可以调用“人工”将项目添加到导入表中。理论上,你可以直接通过修改(欺骗)图像来做这个 - 如果你说PE - 但这是另一个故事,因为你需要调整包含导入表的修改后的PE部分的大小!