none
JM在VS2005下运行出错 RRS feed

  • 问题

  • 偶用JM软件(用于H.264编解码)在VS2005上编译的时候没有错误,可运行时出现下列错误:

    “lencod.exe”: 已加载“E:\JM\bin\lencod.exe”,已加载符号。
    “lencod.exe”: 已加载“C:\Windows\System32\ntdll.dll”,未加载任何符号。
    “lencod.exe”: 已加载“C:\Windows\System32\kernel32.dll”,未加载任何符号。
    “lencod.exe”: 已加载“C:\Windows\System32\ws2_32.dll”,未加载任何符号。
    “lencod.exe”: 已加载“C:\Windows\System32\msvcrt.dll”,未加载任何符号。
    “lencod.exe”: 已加载“C:\Windows\System32\advapi32.dll”,未加载任何符号。
    “lencod.exe”: 已加载“C:\Windows\System32\rpcrt4.dll”,未加载任何符号。
    “lencod.exe”: 已加载“C:\Windows\System32\nsi.dll”,未加载任何符号。
    程序“[9772] lencod.exe: 本机”已退出,返回值为 0 (0x0)。

    结果就是执行后出现的DOS界面消失了,以前是没有问题的,可突然就这样了。。。


    单步执行时,到memset.asm中,执行到下面最后一行时:
     
        test    al,al ; memset using zero initializer?
        jne    dword_align
        cmp    edx,0100h ; block size exceeds size threshold?
        jb      dword_align
        cmp    DWORD PTR __sse2_available,0 ; SSE2 supported?
        je      dword_align

        jmp    _VEC_memzero ; use fast zero SSE2 implementation

    出现一个对话框,说“没有可用于当前位置的源代码”,随后就执行不下去了,这时如果F5继续,就会出现上述错误,不过错误信息的最后一句变为“程序“[9996] lencod.exe: 本机”已退出,返回值为 300 (0x12c)。”

    不知道这是怎么回事。。。。以前用得好好的,后来偶突然想起前天用WINDOWS优化大师优化注册表来着,不过偶在优化前已经备份了,恢复注册表之后还是这样。。
    2009年6月11日 12:44

答案

全部回复

  • memset.asm……看起来你有访问越界问题。
    MSMVP VC++
    • 已标记为答案 magicku 2009年7月1日 7:41
    2009年6月11日 17:47
    版主
  • 请问版主这个问题怎么解决呢??
    2009年6月12日 0:46
    • 已标记为答案 magicku 2009年7月1日 7:41
    2009年6月12日 1:09
    版主
  • 版主的意思是偶出现缓冲区溢出了吧。。可以前为什么没有错误,现在却又溢出了呢??还有就是这种错误一般是VS的问题,还是系统自身的问题??

    2009年6月12日 1:29
  • 缓冲区溢出有可能比较难重现,以前没有问题并不代表没有BUG。缓冲区溢出是代码的BUG,和开发环境以及系统都没有关系。


    MSMVP VC++
    2009年6月17日 3:36
    版主
  • 这和注册表没关系,你在debug下编译后运行在出错的地方选择Debug,然后再看调用堆栈,若出错的DLL是windows的DLL就是你内存越界了.
    最好把报错弹出的对话框上显示的内容也发出来.

    若没有弹出的的话,那就是程序正常结束,你看看你的调用参数是不是不正确?


    0xBAADF00D
    2009年6月17日 9:43
    版主
  • 在编译的时候有这一条信息:“1>LINK : 缺少程序数据库 e:\JM\lencod\Debug_vc8\lencod.pdb;正在执行完全链接”感到很奇怪,但并没有出错,运行的时候就出错了。。

    单步运行时,在调用堆栈里有这么几条信息:
    “  [下面的框架可能不正确和/或缺失,没有为 kernel32.dll 加载符号] 
         ntdll.dll!77c3e4b6()  
         ntdll.dll!77c3e489()  



    不过太奇怪了。。在回帖之前又重新单步运行试了一下,除了上面的信息,到没有了貌似越界的错误,取而代之的是在运行完一个函数之后,DOS界面一闪,又重新回到前面的一个函数,然后就这样陷入死循环了。。。

    这个编码软件在程序方面应该并没有错误,因为前些日子我一直在用,只不过突然就这样出现错误了。。。

    2009年6月22日 2:39
  • lencod.pdb这个只是一个调试信息的储存文件.

    你把出错地方的代码贴上来.
    0xBAADF00D
    2009年6月22日 13:46
    版主
  • 跟一下代码吧。可能有地方非法访问了。你贴的提示只是没有调试信息。


    麻烦把正确答案设为解答。
    2009年6月23日 0:48
    版主
  • 单步运行时,运行到下面的最后一行就运行不下去了,倒没有出现出错的对话框,只是光标一直停在那:
    dwords:
    ; set all 4 bytes of eax to [value]
            mov     ecx,eax         ; ecx=0/0/0/value
            shl     eax,8           ; eax=0/0/value/0

            add     eax,ecx         ; eax=0/0val/val

            mov     ecx,eax         ; ecx=0/0/val/val

            shl     eax,10h         ; eax=val/val/0/0

            add     eax,ecx         ; eax = all 4 bytes = [value]

    ; Set dword-sized blocks
            mov     ecx,edx         ; move original count to ecx
            and     edx,3           ; prepare in edx byte count (for tail loop)
            shr     ecx,2           ; adjust ecx to be dword count
            jz      tail            ; jump if it was less then 4 bytes

            rep     stosd


    还有,偶也想标答案,但不知标哪个。。。。

    2009年6月23日 2:20
  • 是不是函数栈溢出了
    麻烦把正确答案设为解答。
    2009年6月23日 4:27
    版主
  • 肯定是程序有BUG,好好检查吧。原来运行正确只是偶然,这种情况见多了。
    0xBAADF00D
    2009年6月23日 4:28
    版主
  • 这个软件在别人的机子上都没有问题,只有我的有。。。。太郁闷了。。以前运行时没有出现过错误,一直在用。。后来就不行了。。

    2009年6月24日 3:20