none
启动程序时报错:访问越界 RRS feed

  • 问题

  • 一个win32 console程序,调用A.dll(我无法查看其细节),调式时没有错误,但直接启动exe出错。

    Unhandled exception at 0x78144500 (msvcr80.dll) in test.exe: 0xC0000005: Access violation reading location 0x00000000.

    调用栈:

    > msvcr80.dll!strlen(unsigned char * buf=0x00000000)  Line 81 Asm
      msvcp80.dll!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::assign(const char * _Ptr=0x00000000)  Line 1080 + 0xb bytes C++
      A.dll!01c53d8a()  
      [Frames below may be incorrect and/or missing, no symbols loaded for A.dll] 
      ntdll.dll!7c930202()  
      ntdll.dll!7c93017b()  
      msvcr80.dll!operator new(unsigned int size=32)  Line 59 + 0x8 bytes C++
      msvcp80.dll!std::_Allocate<char>(unsigned int _Count=2090008728, char * __formal=0x00181fb0)  Line 44 + 0x6 bytes C++

    在我的计算机中,ntdll.dll位于C:\WINDOWS\system32。请问这是什么原因,要如何解决?谢谢。


    D
    2010年11月29日 9:12

答案

  • 在调用函数 strlen 的时候,你传递的指针是个空值。最好判断一下先。BTW,上面已经说的很清楚了,你都没仔细看。

     if( p!= null ) strlen(p)

    2010年11月29日 9:15

全部回复

  • 在调用函数 strlen 的时候,你传递的指针是个空值。最好判断一下先。BTW,上面已经说的很清楚了,你都没仔细看。

     if( p!= null ) strlen(p)

    2010年11月29日 9:15
  • 谢谢,的确是传入的buf为NULL,但是我没有DLL的源码,无法定位到具体的函数,而且debug时并没有出现这样的错误,call stack里面也并没有显示我是从哪个函数调用的,有办法逆向定位到具体函数吗?谢谢。
    D
    2010年11月29日 10:23
  • 不是a.dll的问题

    从msvcr80.dll!strlen(unsigned char * buf=0x00000000)  Line 81 Asm看应该是strlen语句出的问题

    你在你的工程里搜一下这个函数检查一下

    2010年11月30日 2:55