wwwllg
驱动牛犊
驱动牛犊
  • 注册日期2004-07-04
  • 最后登录2016-03-22
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:754回复:0

查找ntdll.dll成功后,为什么Native API不成功。

楼主#
更多 发布于:2004-07-12 10:27
//在访问下面其中一句时,机器重启。
PVOID WatchDevice::FindFunc(PVOID Base,PCSTR Name)
{
PIMAGE_DOS_HEADER dos =PIMAGE_DOS_HEADER(Base);
PIMAGE_NT_HEADERS nt =PIMAGE_NT_HEADERS(PCHAR(Base)+dos->e_lfanew);
PIMAGE_DATA_DIRECTORY expdir=nt->OptionalHeader.DataDirectory
+IMAGE_DIRECTORY_ENTRY_EXPORT;
ULONG size =expdir->Size;
ULONG addr =expdir->VirtualAddress;
PIMAGE_EXPORT_DIRECTORY
exports=PIMAGE_EXPORT_DIRECTORY(PCHAR(Base)+addr);
PULONG functions =PULONG(PCHAR(Base)+exports->AddressOfFunctions);
PSHORT ordinals =PSHORT(PCHAR(Base)+exports->AddressOfNameOrdinals);
PULONG names =PULONG(PCHAR(Base)+exports->AddressOfNames);
PVOID func =0;
ULONG ord = 0;
for (ULONG i =0;i< exports->NumberOfNames;i++)
{
ord = ordinals [i ];
if (functions[ord]<addr || functions[ord] >=addr + size)//这一句重启
{

if (_stricmp(PSTR(PCHAR(Base)+names),Name)==0)
func =PCHAR(Base)+functions[ord];
}
}
return func;
}

希望高手解释,并帮助解决这个问题。


[编辑 -  7/13/04 by  wwwllg]
游客

返回顶部