本帖最后由 jiangsheng 于 2010-07-04 07:49:23 编辑

解决方案 »

  1.   

    在使用这块内存之前可以使用AfxIsValidAddress对其进行检查。 
      

  2.   

    结构化异常如cpu异常、内存访问违规异常、除零异常你是捕获不到的
      

  3.   

    有些异常不是try catch能解决的。
      

  4.   

    回1,2楼的兄弟:这个函数地址是不会变的 每次CALL肯定都是正确的,出问题的地方是在函数内部。
    回3楼的兄弟 :访问违规时再被我调用的原进程的函数内部,我没办法做检查。
    回4,5楼兄弟:那我应该用什么办法解决这个问题呢? 是向量化异常,或者是SEH 吗?请指教
      

  5.   

    使用__try{}__except(1){}来捕获这样.另外,函数地址一般可能根据模块基址来定位,一般动态获取而不写死.
      

  6.   


    我做过一个反汇编程序,
    与你的问题差不多,
    你需要注意 CALL 指令前后都会操作堆栈,
    你可以尝试 JMP 指令,这样不操作堆栈,
    比如:
    MOV EBX, 0x007BDE30
    JMP EBX
    这样出错概率相对要小一点,,
      

  7.   

    7楼兄弟:用了你说的方法后 出现了 error C2712: 无法在要求对象展开的函数中使用 __try
    回8楼 :我无法做地址有效性判断 因为出错的地址我是调用的函数内部调用的 我没办法修改那个函数
    回9楼:同上
      

  8.   

    搞定了 结贴 7楼正解   至于出现error C2712: 无法在要求对象展开的函数中使用 __try的问题 把被检查的那部分代码单独做个函数 里面不要写需要析构的代码就OK了 结贴。同时也谢谢其他兄弟的热心解答