非托管DLL导出函数A、B,其中函数B使用了API:VirtualAlloc函数申请内存。
使用托管程序导入DLL,调用A函数时没有任何问题,而在调用B函数时无法正确执行。跟踪B函数发现在调用VirtualAlloc时返回NULL。
使用非托管程序调用此DLL的B函数进行测试,一切正常。
求解,急用

解决方案 »

  1.   

    非托管程序和.net程序内存区域是不一样的。应该使用指针转化下吧。可能的原因。
      

  2.   

    是ms11080的溢出测试程序,在.net下调用DLL会在virtualalloc函数调用时失败
    出错的代码是VirtualAlloc( (PVOID)0x02070000, 0x20000, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE )
    完整的源码在:http://bbs.51cto.com/thread-911629-1.html,我是将其修改后编译为DLL并导出函数用的。使用c++编写的loader加载测试正常,使用c#的加载会失败。现在机子上没有可以直接编译为DLL的源码,只能给链接了,抱歉。
    问过朋友他说可能是加载.net库之后0x02070000指向的内存会变成受保护的部分从而不能写入,由于说的模棱两可所以来坛子中请教各位。
    另:测试环境是win2003,也只能在2003下测试。