baigan
驱动牛犊
驱动牛犊
  • 注册日期2006-07-04
  • 最后登录2011-10-21
  • 粉丝0
  • 关注0
  • 积分140分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
阅读:1916回复:5

蓝屏代码求助

楼主#
更多 发布于:2007-02-28 18:19
  scan(PVOID base)
{
    HANDLE hMod;
       IMAGE_DOS_HEADER * dosheader;
    IMAGE_OPTIONAL_HEADER * opthdr;
    IMAGE_EXPORT_DIRECTORY * pExportTable;
    DWORD * arrayOfFunctionAddresses;
    DWORD * arrayOfFunctionNames;
    WORD * arrayOfFunctionOrdinals;
    char* functionName;
    DWORD functionOrdinal,Baseaddr,functionAddress,ModuleAddress;
    int x,n=0;

    hMod = base;

    DbgPrint("hMod addr -- %08x \n",hMod);

    dosheader = (IMAGE_DOS_HEADER *)hMod;
    opthdr =(IMAGE_OPTIONAL_HEADER *) ((BYTE*)hMod+dosheader->e_lfanew+24);
        pExportTable =(IMAGE_EXPORT_DIRECTORY*)((BYTE*) hMod + opthdr->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);


        arrayOfFunctionAddresses = (DWORD*)( (BYTE*)hMod + pExportTable->AddressOfFunctions);
    arrayOfFunctionNames = (DWORD*)( (BYTE*)hMod + pExportTable->AddressOfNames);
    arrayOfFunctionOrdinals = (WORD*)( (BYTE*)hMod + pExportTable->AddressOfNameOrdinals);
        Baseaddr = pExportTable->Base;
    n=pExportTable->NumberOfFunctions;


    DbgPrint("pExportTable->Base -- %08x \n",Baseaddr);

    ModuleAddress = GetModuleBaseAddress();
    for(x = 0; x<n; x++)
    {

        functionOrdinal = arrayOfFunctionOrdinals[x] + Baseaddr - 1;
        functionAddress=    arrayOfFunctionAddresses[functionOrdinal];
        functionName = (char*)( (BYTE*)hMod + arrayOfFunctionNames[x]);

        if(GetFunctionAddr(functionName)!=(functionAddress+ModuleAddress))
        {
            DbgPrint("functionName -- %s \t function addr -- %08x \n",functionName,functionAddress);
            
        }
        
/*        lpFuncFileaddr = (LPVOID)( (DWORD)(functionAddress+(DWORD)hMod) );
        lpFuncaddr=(LPVOID)((DWORD) (functionAddress+ModuleAddress ) ); //疯狂蓝苹

        if( strncmp(lpFuncaddr,lpFuncFileaddr,2) )
        {
            DbgPrint("%s \n",functionName);

        }
*/

    }




}
baigan
驱动牛犊
驱动牛犊
  • 注册日期2006-07-04
  • 最后登录2011-10-21
  • 粉丝0
  • 关注0
  • 积分140分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-02-28 18:25
/*        lpFuncFileaddr = (LPVOID)( (DWORD)(functionAddress+(DWORD)hMod) );
        lpFuncaddr=(LPVOID)((DWORD) (functionAddress+ModuleAddress ) ); //疯狂蓝苹

        if( strncmp(lpFuncaddr,lpFuncFileaddr,2) )
        {
            DbgPrint("%s \n",functionName);

        }
*/

那位老大给看看

KeGetCurrentIrql()查看特权及正常,函数没有在物理内存的话应该能引起页故障应该能访问吧?
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
板凳#
发布于:2007-02-28 18:58
不LockPage和ProbeForRead,而且也不用MmIsXX,简直就是冒险~
没有战争就没有进步 X3工作组 为您提供最好的军火
GNiDiA
驱动小牛
驱动小牛
  • 注册日期2006-10-11
  • 最后登录2017-10-09
  • 粉丝0
  • 关注0
  • 积分1002分
  • 威望145点
  • 贡献值0点
  • 好评度124点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2007-03-01 11:00
看一下是不是EXPORT_SECTION已经被丢弃了?
baigan
驱动牛犊
驱动牛犊
  • 注册日期2006-07-04
  • 最后登录2011-10-21
  • 粉丝0
  • 关注0
  • 积分140分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-03-01 20:14
谢谢老大指点,MmIsXX把不在的跳过去就好了
punk
驱动小牛
驱动小牛
  • 注册日期2001-04-07
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分621分
  • 威望164点
  • 贡献值0点
  • 好评度60点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-03-01 23:09
如果在passive-level访问,应该不需要lock
可能原因在于Baseaddr = pExportTable->Base;如果模块没有export
BaseAddr==0,
这时你的程序就会出错
不停学习
游客

返回顶部