我用depends打开自己写的EXE程序,看见EXE加载的DLL,点击其中Kernel32.DLL右边出现上下两个框,上面是亮亮的绿色,Entry Point :Not Bound ,30多个函数。下面是蓝色和灰色的100个左右 Entry Point 有地址;请问Not Bound 是怎么回事?
而且我使用 ReplaceIATEntryInOneMod函数去遍历这个DLL,只能遍历到那些Not Bound的函数void ReplaceIATEntryInOneMod(PCSTR pszCalleeModName,PROC pfnCurrent,PROC pfnNew,HMODULE hModCaller)
{
ULONG ulSize;

PIMAGE_IMPORT_DESCRIPTOR pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)
::ImageDirectoryEntryToData(hModCaller,TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT,&ulSize);//获取hModCaller的导入部分
if (pImportDesc == NULL)
{
return;
}
for (;pImportDesc->Name;pImportDesc++)//查找是否有pszCalleeModName
{
PSTR pszModName = (PSTR)((PBYTE)hModCaller + pImportDesc->Name);
if (lstrcmpiA(pszModName,pszCalleeModName) == 0)
{
break;
}
}
if (pImportDesc->Name == 0)
{
return;
} PIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA)((PBYTE)hModCaller + pImportDesc->FirstThunk);
int nCount = 0;
for (;pThunk->u1.Function;pThunk++)
{
PROC * ppfn = (PROC*) &pThunk->u1.Function;//这里查到的函数都是那些在depends里面Not Bound的函数
BOOL fFound = (*ppfn == pfnCurrent);
if (fFound)
{
BOOL bRet = WriteProcessMemory(GetCurrentProcess(),pfnCurrent,uMOpenProcess,sizeof(pfnNew),NULL);
return;
}
nCount++;
}
int res = nCount;}