выполняю такой код Код (Text): lea eax, [.wsd] stdcall CallWS2_32, _WSAStartup, 0202h, eax IfSo eax, 0, .Go ret .Go: stdcall CallWS2_32, _socket, AF_INET, SOCK_STREAM, 0 stdcall CallWS2_32, _WSACleanup из основново треда и все нормально работает но если я создаю новый тред и выполняю этод код там то прога падает на функции socket. падает в nvappfilter.dll addres a467. непойму в чем дело =( если кто знает подскажите в чем баг.
вот более полный код Код (Text): Entry: db 0cch stdcall TestX ; тут все ок stdcall RunThread, TestThread, 0 ;& newer exit stdcall CallKernel32, _Sleep, INFINITE ret proc TestX stdcall uses eax ebx edx edi esi locals .wsd: db sizeof.WSADATA dup (?) endl stdcall GetMainModules, TRUE, TRUE lea eax, [.wsd] stdcall CallWS2_32, _WSAStartup, 0202h, eax IfSo eax, 0, .Go ret .Go: stdcall CallWS2_32, _socket, AF_INET, SOCK_STREAM, 0 stdcall CallWS2_32, _WSACleanup ret endp proc RunThread stdcall uses ebx ecx edx, startaddr, param lea eax, [param] push eax mov ebx, esp stdcall CallKernel32, _CreateThread, NULL, NULL, d_w_p [startaddr], eax, CREATE_SUSPENDED, ebx push eax stdcall CallKernel32, _ResumeThread, eax pop eax ret endp proc TestThread stdcall uses ebx esi edi, .lpparam db 0cch stdcall TestX ; здесь падаем
вот так работает Код (Text): include 'win32ax.inc' .code proc start locals .wsd: db sizeof.WSADATA dup (?) endl lea eax, [.wsd] stdcall [WSAStartup], 0202h, eax stdcall TestX ; òóò âñå îê stdcall RunThread, TestThread, 0 ;& newer exit invoke Sleep, -1 ret endp proc TestX stdcall uses eax ebx edx edi esi locals .wsd: db sizeof.WSADATA dup (?) endl ; lea eax, [.wsd] ; stdcall [WSAStartup], 0202h, eax stdcall [socket], AF_INET, SOCK_STREAM, 0 ; stdcall [WSACleanup] ret endp proc RunThread stdcall uses ebx ecx edx, startaddr, param lea eax, [param] push eax mov ebx, esp stdcall [CreateThread], NULL, NULL, [startaddr], eax, CREATE_SUSPENDED, ebx push eax stdcall [ResumeThread], eax pop eax ret endp proc TestThread stdcall uses ebx esi edi, .lpparam ;db 0cch stdcall TestX ; çäåñü ïàäàåì ret endp .end start видимо для процесса надо один раз сделать WSAStartup и все
а вот и нет я несколько раз подряд запускал тест из основного треда и все было ок. кстати падение происходит в nvappfilter.dll на функе проверки стека код на котором падает Код (Text): mov eax, 13880h call chhkstk ... chkstk: push ecx cmp eax, 4096 lea ecx, [esp+8] jb a470 a467: sub ecx, 4096 sub eax, 4096 test [ecx], eax ; здесь падаем cmp eax, 4096 jae a467: a470: ....
мудрый человек подсказал что косячек в нвидиа фаере. фаер был убит и теперь все работает. ps. очень жаль что этого мудрого человека на этом форуме забанили =(