按照核心编程上面的代码,ReplaceIATEntryInOneMod函数在WriteProcessMemory总是无法改写内存,从而挂接失败,,,这是怎么回事情?

解决方案 »

  1.   

    对当前进程,GetCurrentProcess怎么会不能写呢?
      

  2.   

    0x000003e6内存分配访问无效。我是在一个dll里面挂接另一个dll里面的CreateDialogIndirectParamA。好在对话框显示前拦截,加入些额外的东西。但是当WriteProcessMemory时候,总是报上面的那个错误。
      

  3.   

    Did you have a proper process handle - returned from OpenProcess()?  Was the
    address you were reading/writing commited in the target process?
    call GetLastError for more details about here.
      

  4.   

    我是用GetCurrentProcess()按照msdn这该是有PROCESS_ALL_ACCESS权限的。
      

  5.   

    这是为什么啊,,,我另外写了个简单的测试又没有问题。难道这个dll进行了什么额外的处理,我不能写它的引入区?
      

  6.   

    借楼主的宝地也提一个问题,我在做API挂接时。发现读出来的PIMAGE_THUNK_DATA并不是一个真正的PIMAGE_THUNK_DATA指针,开始以为是程序写错了。后来完全照《核心》上的例程来写,结果还是不对,是否PE文件的格式变了?
      

  7.   

    楼主能不能把你成功和例程给我发一个。
    [email protected]
    先谢了。
      

  8.   

    faint,,你还跑来问我。
    就是照般《核心》上面的代码,把参数传进去就ok了。我也没有历程,我随便试了挂接两个dll都可以成功。但是,我要改写的这个dll却不能成功。好吧,我把我的测试程序发给你
      

  9.   

    我也曾经遇到过这样的问题,当你找到了输入函数的地址要改写它时,必须修改页面的保护属性,否则就可能写不进去。像这样: //ppfn是一个函数指针,指向的就是你要修改的函数的地址:
    DWORD dwOldProtect;
    VirtualProtect(ppfn,sizeof(pfnNew),PAGE_READWRITE,&dwOldProtect);
    WriteProcessMemory(GetCurrentProcess(), ppfn, &pfnNew,sizeof(pfnNew), NULL);
    VirtualProtect(ppfn,sizeof(pfnNew),dwOldProtect,0);
      

  10.   

    呀呀,楼上的老兄怎么不早来。搞得我昨天搞了四五个小时偶然看到VirtualProtect才搞定他。你早点来,我就不用查资料这么辛苦了分数给你大头
      

  11.   

    webber84(***闭关修炼中***)说的对!!!!
    :)