热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

VC/MFC请教前辈高人0xC0000005:读取位置时发生访问冲突(100分)

AuxiliaryLogin.exe中的0x704e12ac(GameAuxiliary.dll)处未处理的异常:0xC0000005:读取位置0x05f31fe8时发生访问冲突
AuxiliaryLogin.exe 中的 0x704e12ac (GameAuxiliary.dll) 处未处理的异常: 0xC0000005: 读取位置 0x05f31fe8 时发生访问冲突 

操作系统:正版 windows 7 旗舰版  
编程环境:VS2008 
使用语言:C++/MFC
程序模式:HOOK+DLL
问题概述:小弟写了个功能函数。写完后测试成功。因为打算使用多线程。所以把此函数代码以及变量定义~通过剪切~从原类移动
          到新建类中。问题出现啦。经过几天逆向调试排查。多线程是正确。要访问滴地址验证是有效滴。确定问题是正是访址
          错误~个人怀疑~问题可能是因为:此函数原在主线程中执行~移动到新建类前~ 并没有对指针做销毁~析构工作~而是简单
          滴通过剪切做移动~导致指针在内存中还是存在滴~
          也就是说~~程序执行时~主线程和新线程滴有2个指针~同时在访问目标内存而导致冲突


不知道我滴怀疑是否正确。。。如果正确希望高人能给出一个详细滴解决方法。。。

如果不正确。。。请高人指点

如问题得以解决。。。定以高分相赠

85 个解决方案

#1


关注,强列的!

#2


关注,强列的!

#3


谢谢。谢谢。
引用 1 楼 leitianjun 的回复:
关注,强列的!

#4


实在是苦恼

#5


LZ这问题太有水平了……

代码贴上来看看啊,不要自问自答……

#6


“问题描述”部分搞不懂你在说什么。
0xC0000005错误的含义是非法访问内存地址,包括读、写、执行三种类型的访问,可能情况有两种:一种是该地址没有分配内存,也就是无效地址,在调试器中查看该地址显示“??”;另一种是该地址不允许指定类型的访问,例如内存地址是只读的,而程序要改写内存中的数据等。
遇到此类问题时,调试程序,在出错时中断,首先查看最终出错的原因,再看代码是不是自己的,如果不是自己的代码,可以根据调用堆栈找出是自己调用了哪个函数引起的问题并定为到调用的代码上,查看相关变量的值,找出存在问题的变量,再查找问题的来源。
如果你的程序是在安装Hook时修改代码出现了这个错误,那是因为代码区默认是不可改写的,需要用VirtualProtect将其改为可写后才能修改。

#7


Debug下调试call stack窗口看看运行到哪个函数抛出异常。。。

#8


这类问题他人是无法完全帮助你的,只有根据自己经验来慢慢调试吧!

#9


出错的指令地址已经告诉你了, 在调试模式下 汇编窗口中 Ctrl+G 指向错误地址, 根据交叉编译的代码很容易查到问题。
0xC0000005访问非法地址

#10


你调用堆栈调试下,看代码指向了哪里,然后把出错代码发过来~~~

直接发访问冲突~~~难度比较高啊- -!

#11


void CDialogBase::BeginFight()
{
 for (int i=0x5f31fe8; i<(0x5f31fe8+0x1fff*4);i+=4)
 {
  _asm
  {
   mov eax,eax
   mov eax,eax
  }
  ObjectBase=(DWORD*)i;
  ObjectType=(DWORD*)(*ObjectBase+0x8);
  MOnsterID=(DWORD*)(*ObjectBase+0xc);
  MOnsterDie=(DWORD*)(*ObjectBase+0x380);
  ObjectDistance=(float*)(*ObjectBase+0x31c);
  MOnsterBlood=(float*)(*ObjectBase+0x148);
  MOnsterName=(DWORD*)(*ObjectBase+0x320);
  SelectHit=(DWORD*)0x5F3BC28;
  SelectHit=(DWORD*)(*SelectHit+0x1a54);
  BufferID.Format(_T("%x"),*MonsterID);
  EidtMake.SetWindowText(BufferID);
  if((*ObjectType==0x2e)&&(*ObjectDistance<=100)&&(*MOnsterBlood==1))
  {
   *if(*SelectHit==0xffff)
   {
    ObjectBuffer=ObjectBase;
    DWORD SelectMOnster=*ObjectBuffer;
    _asm
    {
     mov edi,SelectMonster
     mov eax,[edi]
     push 0
     push 1
     push 0x44D
     mov ecx,edi
     mov eax,[eax+0x4]
     call eax
    }
   }
   SelectHit=(DWORD*)0x5F3BC28;
   SelectHit=(DWORD*)(*SelectHit+0x1a54);
   *SelectHit=*MonsterID;
   _asm
   {
    mov ecx,0x5f3bc28
    mov ecx,[ecx]
    mov eax,0x0470b10
    call eax
   } 
  }
  return;
 }
}
UINT __cdecl CDialogBase::ThreadProcessFight(LPVOID pParam)
{
 UINT Scope=(UINT)pParam;
 while (ThreadRun)
 {
  DialogBase->BeginFight();
  Sleep(3000);
 }
 return NULL;
}
void CDialogBase::OnBnClickedButtonBeginfight()
{
 UpdateData(TRUE);
 ScopeBuffer=EidtScope;
 ThreadRun=TRUE;
 if ((CheckBeginFight.GetCheck()==0))
 {
  AfxMessageBox(_T("请选择定点打怪"));
 }
 else if (ScopeBuffer<1||ScopeBuffer>100)
 {
  AfxMessageBox(_T("请按提示出入正确数值:(1-100)"));
 }
 else
 {
   ThreadFight=AfxBeginThread(ThreadProcessFight,&ScopeBuffer);
 }
}
void CDialogBase::OnBnClickedButtonEndfight()
{
 ThreadRun=FALSE;
}
引用 5 楼 lmxmx 的回复:
LZ这问题太有水平了……

代码贴上来看看啊,不要自问自答……

#12


附逆向调试代码如下:
623E19D0 >  55              push ebp
623E19D1    8BEC            mov ebp,esp
623E19D3    83EC 0C         sub esp,0C
623E19D6    56              push esi
623E19D7    57              push edi
623E19D8    C745 F4 CCCCCCC>mov dword ptr ss:[ebp-C],CCCCCCCC
623E19DF    C745 F8 CCCCCCC>mov dword ptr ss:[ebp-8],CCCCCCCC
623E19E6    C745 FC CCCCCCC>mov dword ptr ss:[ebp-4],CCCCCCCC
623E19ED    894D FC         mov dword ptr ss:[ebp-4],ecx
623E19F0    C745 F8 E81FF30>mov dword ptr ss:[ebp-8],5F31FE8
623E19F7    EB 09           jmp short GameAuxi.623E1A02
623E19F9    8B45 F8         mov eax,dword ptr ss:[ebp-8]
623E19FC    83C0 04         add eax,4
623E19FF    8945 F8         mov dword ptr ss:[ebp-8],eax
623E1A02    817D F8 E49FF30>cmp dword ptr ss:[ebp-8],5F39FE4
623E1A09    0F8D F8010000   jge GameAuxi.623E1C07
623E1A0F    8BC0            mov eax,eax                                                // 为调试而加入滴花指令
623E1A11    8BC0            mov eax,eax                                                //
623E1A13    8B4D FC         mov ecx,dword ptr ss:[ebp-4]
623E1A16    8B55 F8         mov edx,dword ptr ss:[ebp-8]
623E1A19    8991 9C000000   mov dword ptr ds:[ecx+9C],edx    //经调试~程序运行此处崩溃~还原成高级语言ObjectBase=(DWORD*)i;~也就是程序第一句读址就失败啦
623E1A1F    8B45 FC         mov eax,dword ptr ss:[ebp-4]
623E1A22    8B88 9C000000   mov ecx,dword ptr ds:[eax+9C]
623E1A28    8B11            mov edx,dword ptr ds:[ecx]
623E1A2A    83C2 08         add edx,8
623E1A2D    8B45 FC         mov eax,dword ptr ss:[ebp-4]
623E1A30    8990 A0000000   mov dword ptr ds:[eax+A0],edx
623E1A36    8B4D FC         mov ecx,dword ptr ss:[ebp-4]
623E1A39    8B91 9C000000   mov edx,dword ptr ds:[ecx+9C]
623E1A3F    8B02            mov eax,dword ptr ds:[edx]
623E1A41    83C0 0C         add eax,0C
623E1A44    8B4D FC         mov ecx,dword ptr ss:[ebp-4]
623E1A47    8981 B0000000   mov dword ptr ds:[ecx+B0],eax
623E1A4D    8B55 FC         mov edx,dword ptr ss:[ebp-4]
623E1A50    8B82 9C000000   mov eax,dword ptr ds:[edx+9C]
623E1A56    8B08            mov ecx,dword ptr ds:[eax]
623E1A58    81C1 80030000   add ecx,380
623E1A5E    8B55 FC         mov edx,dword ptr ss:[ebp-4]
623E1A61    898A B4000000   mov dword ptr ds:[edx+B4],ecx
623E1A67    8B45 FC         mov eax,dword ptr ss:[ebp-4]
623E1A6A    8B88 9C000000   mov ecx,dword ptr ds:[eax+9C]
623E1A70    8B11            mov edx,dword ptr ds:[ecx]
623E1A72    81C2 1C030000   add edx,31C
623E1A78    8B45 FC         mov eax,dword ptr ss:[ebp-4]
623E1A7B    8990 A4000000   mov dword ptr ds:[eax+A4],edx
623E1A81    8B4D FC         mov ecx,dword ptr ss:[ebp-4]
623E1A84    8B91 9C000000   mov edx,dword ptr ds:[ecx+9C]
623E1A8A    8B02            mov eax,dword ptr ds:[edx]
623E1A8C    05 48010000     add eax,148
623E1A91    8B4D FC         mov ecx,dword ptr ss:[ebp-4]
623E1A94    8981 A8000000   mov dword ptr ds:[ecx+A8],eax
623E1A9A    8B55 FC         mov edx,dword ptr ss:[ebp-4]
623E1A9D    8B82 9C000000   mov eax,dword ptr ds:[edx+9C]
623E1AA3    8B08            mov ecx,dword ptr ds:[eax]
623E1AA5    81C1 20030000   add ecx,320
623E1AAB    8B55 FC         mov edx,dword ptr ss:[ebp-4]
623E1AAE    898A AC000000   mov dword ptr ds:[edx+AC],ecx
623E1AB4    8B45 FC         mov eax,dword ptr ss:[ebp-4]
623E1AB7    C780 B8000000 2>mov dword ptr ds:[eax+B8],5F3BC28
623E1AC1    8B4D FC         mov ecx,dword ptr ss:[ebp-4]
623E1AC4    8B91 B8000000   mov edx,dword ptr ds:[ecx+B8]
623E1ACA    8B02            mov eax,dword ptr ds:[edx]
623E1ACC    05 541A0000     add eax,1A54
623E1AD1    8B4D FC         mov ecx,dword ptr ss:[ebp-4]
623E1AD4    8981 B8000000   mov dword ptr ds:[ecx+B8],eax
623E1ADA    8B55 FC         mov edx,dword ptr ss:[ebp-4]
623E1ADD    8B82 B0000000   mov eax,dword ptr ds:[edx+B0]
623E1AE3    8BF4            mov esi,esp
623E1AE5    8B08            mov ecx,dword ptr ds:[eax]
623E1AE7    51              push ecx
623E1AE8    68 C0B53E62     push GameAuxi.623EB5C0                   ; UNICODE "%x"
623E1AED    68 04033F62     push offset GameAuxi.BufferID
623E1AF2    FF15 B4B13E62   call dword ptr ds:[<&mfc90ud.#3462>]     ; mfc90ud.#3462
623E1AF8    83C4 0C         add esp,0C
623E1AFB    3BF4            cmp esi,esp
623E1AFD    E8 AE260000     call GameAuxi._RTC_CheckEsp
623E1B02    8BF4            mov esi,esp
623E1B04    B9 04033F62     mov ecx,offset GameAuxi.BufferID
623E1B09    FF15 B0B13E62   call dword ptr ds:[<&mfc90ud.#1133>]     ; mfc90ud.#5186
623E1B0F    3BF4            cmp esi,esp
623E1B11    E8 9A260000     call GameAuxi._RTC_CheckEsp
623E1B16    50              push eax
623E1B17    8B4D FC         mov ecx,dword ptr ss:[ebp-4]
623E1B1A    81C1 60040000   add ecx,460
623E1B20    E8 AF1D0000     call GameAuxi.CWnd::SetWindowTextW       ; jmp 到 mfc90ud.#9073
623E1B25    8B55 FC         mov edx,dword ptr ss:[ebp-4]
623E1B28    8B82 A0000000   mov eax,dword ptr ds:[edx+A0]
623E1B2E    8338 2E         cmp dword ptr ds:[eax],2E
623E1B31    0F85 C9000000   jnz GameAuxi.623E1C00
623E1B37    8B4D FC         mov ecx,dword ptr ss:[ebp-4]
623E1B3A    8B91 A4000000   mov edx,dword ptr ds:[ecx+A4]
623E1B40    D902            fld dword ptr ds:[edx]
623E1B42    DC1D E8B73E62   fcomp qword ptr ds:[_real]
623E1B48    DFE0            fstsw ax
623E1B4A    F6C4 41         test ah,41
623E1B4D    0F8A AD000000   jpe GameAuxi.623E1C00
623E1B53    8B45 FC         mov eax,dword ptr ss:[ebp-4]
623E1B56    8B88 A8000000   mov ecx,dword ptr ds:[eax+A8]
623E1B5C    D901            fld dword ptr ds:[ecx]
623E1B5E    DC1D E0B73E62   fcomp qword ptr ds:[_real]
623E1B64    DFE0            fstsw ax
623E1B66    F6C4 44         test ah,44
623E1B69    0F8A 91000000   jpe GameAuxi.623E1C00
623E1B6F    8B55 FC         mov edx,dword ptr ss:[ebp-4]
623E1B72    8B82 B8000000   mov eax,dword ptr ds:[edx+B8]
623E1B78    8138 FFFF0000   cmp dword ptr ds:[eax],0FFFF
623E1B7E    75 35           jnz short GameAuxi.623E1BB5
623E1B80    8B4D FC         mov ecx,dword ptr ss:[ebp-4]
623E1B83    8B55 FC         mov edx,dword ptr ss:[ebp-4]
623E1B86    8B82 9C000000   mov eax,dword ptr ds:[edx+9C]
623E1B8C    8981 BC000000   mov dword ptr ds:[ecx+BC],eax
623E1B92    8B4D FC         mov ecx,dword ptr ss:[ebp-4]
623E1B95    8B91 BC000000   mov edx,dword ptr ds:[ecx+BC]
623E1B9B    8B02            mov eax,dword ptr ds:[edx]
623E1B9D    8945 F4         mov dword ptr ss:[ebp-C],eax
623E1BA0    8B7D F4         mov edi,dword ptr ss:[ebp-C]
623E1BA3    8B07            mov eax,dword ptr ds:[edi]
623E1BA5    6A 00           push 0
623E1BA7    6A 01           push 1
623E1BA9    68 4D040000     push 44D
623E1BAE    8BCF            mov ecx,edi
623E1BB0    8B40 04         mov eax,dword ptr ds:[eax+4]
623E1BB3    FFD0            call eax
623E1BB5    8B4D FC         mov ecx,dword ptr ss:[ebp-4]
623E1BB8    C781 B8000000 2>mov dword ptr ds:[ecx+B8],5F3BC28
623E1BC2    8B55 FC         mov edx,dword ptr ss:[ebp-4]
623E1BC5    8B82 B8000000   mov eax,dword ptr ds:[edx+B8]
623E1BCB    8B08            mov ecx,dword ptr ds:[eax]
623E1BCD    81C1 541A0000   add ecx,1A54
623E1BD3    8B55 FC         mov edx,dword ptr ss:[ebp-4]
623E1BD6    898A B8000000   mov dword ptr ds:[edx+B8],ecx
623E1BDC    8B45 FC         mov eax,dword ptr ss:[ebp-4]
623E1BDF    8B88 B0000000   mov ecx,dword ptr ds:[eax+B0]
623E1BE5    8B55 FC         mov edx,dword ptr ss:[ebp-4]
623E1BE8    8B82 B8000000   mov eax,dword ptr ds:[edx+B8]
623E1BEE    8B09            mov ecx,dword ptr ds:[ecx]
623E1BF0    8908            mov dword ptr ds:[eax],ecx
623E1BF2    B9 28BCF305     mov ecx,5F3BC28
623E1BF7    8B09            mov ecx,dword ptr ds:[ecx]
623E1BF9    B8 100B4700     mov eax,470B10
623E1BFE    FFD0            call eax
623E1C00    EB 05           jmp short GameAuxi.623E1C07
623E1C02  ^ E9 F2FDFFFF     jmp GameAuxi.623E19F9
623E1C07    5F              pop edi
623E1C08    5E              pop esi
623E1C09    83C4 0C         add esp,0C
623E1C0C    3BEC            cmp ebp,esp
623E1C0E    E8 9D250000     call GameAuxi._RTC_CheckEsp
623E1C13    8BE5            mov esp,ebp
623E1C15    5D              pop ebp
623E1C16    C3              retn
引用 6 楼 cnzdgs 的回复:
“问题描述”部分搞不懂你在说什么。
0xC0000005错误的含义是非法访问内存地址,包括读、写、执行三种类型的访问,可能情况有两种:一种是该地址没有分配内存,也就是无效地址,在调试器中查看该地址显示“??”;另一种是该地址不允许指定类型的访问,例如内存地址是只读的,而程序要改写内存中的数据等。
遇到此类问题时,调试程序,在出错时中断,首先查看最终出错的原因,再看代码是不是自己的,如果不是自己……

#13


没理解哥哥滴意思
引用 10 楼 blpluto 的回复:
你调用堆栈调试下,看代码指向了哪里,然后把出错代码发过来~~~

直接发访问冲突~~~难度比较高啊- -!

#14


ObjectBase=(DWORD*)i;
看你的i是否为合法地址等, 对应语句,多加一点调试Debug输出

#15


如楼上所说,i的值应该是无效的~~你断点查下i的值是否合法

#16


i是有效滴~~~用外部工具测试过~~~而且这段代码之前在主线程里是可以正常运行滴。。。问题出在移植到新线程后
引用 14 楼 oyljerry 的回复:
ObjectBase=(DWORD*)i;
看你的i是否为合法地址等, 对应语句,多加一点调试Debug输出

#17


引用 7 楼 visualeleven 的回复:
Debug下调试call stack窗口看看运行到哪个函数抛出异常。。。
能具体说下吗?不太理解哥哥。。。

#18


别沉了。。。。

#19


楼主,能解释一下你的程序是作什么的吗?是哪一行或者哪几行出的问题吗?你就简单地放一堆代码,谁看得懂?没有看懂,那又有谁能帮助你呢?
我记得有一个贴子好像是叫作《提问的艺术》,建议楼主看看如何提问问题

#20


引用 19 楼 jszj 的回复:
楼主,能解释一下你的程序是作什么的吗?是哪一行或者哪几行出的问题吗?你就简单地放一堆代码,谁看得懂?没有看懂,那又有谁能帮助你呢?
我记得有一个贴子好像是叫作《提问的艺术》,建议楼主看看如何提问问题

说句实在话。。。全能型高手我承认是有。。。但是毕竟很少。。。一般人很少会面面俱到。。。我滴意思是不是什么领域都会涉及并且精通滴。。。我滴问题描述已经写滴很清楚啦。。。明眼人一眼就能开出问题所在。。。至于那些在此领域不擅长或者不熟悉滴朋友。。。我就算远程把我滴坏境全展现给他看。。。他也是找不出问题所在滴。。。我滴问题无非是一段测试成功滴函数。。。移动到子线程就出现了内存访问冲突。。。那熟悉MFC多线程滴朋友一眼就能看出我滴问题出在不了解MFC多线程机制。。。比如需要用临界区做同步访问全局变量等等。。。

#21


野的指针?

#22


引用 21 楼 alphaxz1 的回复:
野的指针?

。。。。。。。。

#23


好热闹,可惜就是没有解决问题……

#24


你在那两个call eax参数压栈之前都pushad,pushfd,call完再pop

#25


引用 24 楼 zhanshen2891 的回复:
你在那两个call eax参数压栈之前都pushad,pushfd,call完再pop



不是那个问题。。。请仔细看帖

#26


引用 23 楼 lisunlin0 的回复:
好热闹,可惜就是没有解决问题……


那哥哥来帮忙解决下哇。。。。

#27


帮 顶

#28


是不是线程跑的太快了,0x5f31fe8地址里的东西还没初始化?

#29


如果不是自己的地址,要提升权限,改读写模式等.

#30


引用 28 楼 uucall007 的回复:
是不是线程跑的太快了,0x5f31fe8地址里的东西还没初始化?


线程跑滴太快???是什么意思???

现在已经确定问题所在。。。

就是因为MFC 多线程 访问变量滴问题上。。。

我用过临界 做同步  但是也没效果。。。

#31


引用 29 楼 lxy1996 的回复:
如果不是自己的地址,要提升权限,改读写模式等.


是DLL注入滴。。。

#32


外挂...................................

#33


知道是外挂滴人多啦。。。
但是没人觉得新鲜。。。
就你逞能。。。
引用 32 楼 zzz3265 的回复:
外挂...................................

#34


UINT  __cdecl CDialogBase::ThreadProcessFight(LPVOID pParam)
把红色的调用约定去掉!

#35


还有这句不好:
 EidtMake.SetWindowText(BufferID);
最好不要在辅助线程里操作界面,那应该是主线程的事

#36


还有记得把ThreadRun变量声明为volatile,这样好一些。

#37


线程跑得太快就是指你的主线程还没初始化完毕,你的线程就访问了未初始化变量。你试一试让线程暂停的方式开启,并在主线程初始化完毕后恢复。

#38


因为你说过:"i是有效滴~~~用外部工具测试过~~~而且这段代码之前在主线程里是可以正常运行滴。。。问题出在移植到新线程后",所以我觉得是线程跑太快了.:)

#39


引用 36 楼 gg606 的回复:
还有记得把ThreadRun变量声明为volatile,这样好一些。


哥哥说滴这几个解决方案。我都试验过啦。还是没有解决问题。。。

我又经过细致滴调试了。。。问题确定在访问变量上。。。只要我滴线程一访问类滴成员变量。或者全局变量。

(不管是指针还是什么类型滴变量) 就会出现这种内存冲突。。。

我之前也做过临界区同步。。。可是也无效。。。

#40


引用 37 楼 uucall007 的回复:
线程跑得太快就是指你的主线程还没初始化完毕,你的线程就访问了未初始化变量。你试一试让线程暂停的方式开启,并在主线程初始化完毕后恢复。


这个还没试验过。。。我去试验一下。。。

#41


引用 38 楼 uucall007 的回复:
因为你说过:"i是有效滴~~~用外部工具测试过~~~而且这段代码之前在主线程里是可以正常运行滴。。。问题出在移植到新线程后",所以我觉得是线程跑太快了.:)


还是不行哇。。。一访问 类成员变量 或者全局变量  就冲突。。。

#42


引用 22 楼 dormancy_elife 的回复:
引用 21 楼 alphaxz1 的回复:
野的指针?

。。。。。。。。

估计就是这问题。
结贴率是0。

#43


引用 41 楼 dormancy_elife 的回复:
引用 38 楼 uucall007 的回复:
因为你说过:"i是有效滴~~~用外部工具测试过~~~而且这段代码之前在主线程里是可以正常运行滴。。。问题出在移植到新线程后",所以我觉得是线程跑太快了.:)


还是不行哇。。。一访问 类成员变量 或者全局变量 就冲突。。。

光有类指针没有类对象,这么明确的问题定位那是很容易解决的。

#44


BeginFight都来了,本来想帮你看一下的,还是算了。外挂既然利润那么大,那么挣这个钱就全靠你自己了。不过说到外挂的内存异常,你要考虑到除了你的程序以外,游戏本身的内存是否会一直可以访问,内存可以访问是否有什么前提。(比如必须要选怪才能开始打怪,内存才有值? 也可能是内存值并不固定等等) 

#45


不行你就定义一个全局类指针,比如你的类是Class A{...},你就定义一个A *p = NULL;并在初始化的时候把this赋给它。p = this;这样在你的线程函数中就能访问类成员了。

#46


我现在结贴率已经不是零。只是发这帖子之前有2个问题还没有解决。。目前已经都解决啦。。。也都结贴啦。。。


不过话又说回来。。。别管我是不是零。。。很多人。。。帮不了别人解决问题。。。还总惦记着分。。。搞笑
引用 42 楼 gordon3000 的回复:
引用 22 楼 dormancy_elife 的回复:
引用 21 楼 alphaxz1 的回复:
野的指针?

。。。。。。。。

估计就是这问题。
结贴率是0。

#47


哥哥说滴好像有戏。。。

你滴意思是多线程在访问类变量前。。。要先创建类对象哈。。。

这个我试验下。。。如果搞定。。马上结贴。。。
引用 43 楼 gordon3000 的回复:
引用 41 楼 dormancy_elife 的回复:
引用 38 楼 uucall007 的回复:
因为你说过:"i是有效滴~~~用外部工具测试过~~~而且这段代码之前在主线程里是可以正常运行滴。。。问题出在移植到新线程后",所以我觉得是线程跑太快了.:)


还是不行哇。。。一访问 类成员变量 或者全局变量 就冲突。。。

光有类指针没有类对象,这么明确的问题定位那是很容易解决的……

#48


你说滴挺热闹滴。。。

看你说滴话。。。你也没什么惊人之笔哇。。。

你说滴这些。都是最基础滴调试思路。。。

一般人。都是把能想到滴解决方案都试验个遍。。。最后不得意才会来发帖求助。。。。

不然发帖解决问题又慢。又麻烦。谁没事就发???

你想摆高姿态。。。拜托你把你自己滴能力提升些再摆。。。

不然。说出话来很丢人滴。。。
引用 44 楼 zuoluoyun 的回复:
BeginFight都来了,本来想帮你看一下的,还是算了。外挂既然利润那么大,那么挣这个钱就全靠你自己了。不过说到外挂的内存异常,你要考虑到除了你的程序以外,游戏本身的内存是否会一直可以访问,内存可以访问是否有什么前提。(比如必须要选怪才能开始打怪,内存才有值? 也可能是内存值并不固定等等)

#49


以前腾讯举报的外挂制作,基本是判2~3年。反正年轻人,2、3年不算什么。当然技术不过关的,外挂不够完美还判不了那么多,最多就浪费点青春而已。
祝你早日解决你的C0000005错误,这个错误基本可以肯定是访问的内存非法。

引用 48 楼 dormancy_elife 的回复:
你说滴挺热闹滴。。。

看你说滴话。。。你也没什么惊人之笔哇。。。

你说滴这些。都是最基础滴调试思路。。。

一般人。都是把能想到滴解决方案都试验个遍。。。最后不得意才会来发帖求助。。。。

不然发帖解决问题又慢。又麻烦。谁没事就发???

你想摆高姿态。。。拜托你把你自己滴能力提升些再摆。。。

不然。说出话来很丢人滴。。。

引用 44 楼 zuoluoyun 的……

#50


唉。。。井底之蛙。。。

你辈小儿之见。。。
不足与高士共语。。。
引用 49 楼 zuoluoyun 的回复:
以前腾讯举报的外挂制作,基本是判2~3年。反正年轻人,2、3年不算什么。当然技术不过关的,外挂不够完美还判不了那么多,最多就浪费点青春而已。
祝你早日解决你的C0000005错误,这个错误基本可以肯定是访问的内存非法。


引用 48 楼 dormancy_elife 的回复:
你说滴挺热闹滴。。。

看你说滴话。。。你也没什么惊人之笔哇。。。

你说滴这些。都是最基础滴调试思路……

推荐阅读
author-avatar
daniel
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有