Windows Loader 知道导入是绑定的,因为绑定进程也会写入绑定模块的时间戳
假设 x.exe 绑定到 y.dll
y.dll 在它的 peheader 中有一个 TimeDateStamp
当绑定时它在 _IMAGE_BOUND_IMPORT_DESCRIPTOR 中写入 y.dll 的
TimeDateStamp
0:000> dt ole32!_IMAGE_BOUND_IMPORT_DESCRIPTOR
+0x000 TimeDateStamp : Uint4B
+0x004 OffsetModuleName : Uint2B
+0x006 NumberOfModuleForwarderRefs : Uint2B
0:000>
有问题的 Api 有一个回调 StatusRoutine,
当您通过 noupdate 时,将在绑定过程中调用该回调,该回调仍将被调用,
您可以进行一些检查并可能在那里采取行动,但不影响 exe
BIND_NO_BOUND_IMPORTS 不写入新的 ImportTable
引用文档
BIND_NO_BOUND_IMPORTS 0x00000001
不要生成新的导入地址表。
BIND_NO_UPDATE 0x00000002
不要对文件进行更改。