https://bugs.winehq.org/show_bug.cgi?id=40068
Bug ID: 40068 Summary: Windows program crashes under Wine Product: Wine Version: 1.6.2 Hardware: x86 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs@winehq.org Reporter: andrew_kennedy7@yahoo.com Distribution: ---
Created attachment 53548 --> https://bugs.winehq.org/attachment.cgi?id=53548 backtrace.txt
Program is a 32 bit assembly program I wrote that runs fine in Windows XP, but crashes in Wine.
https://bugs.winehq.org/show_bug.cgi?id=40068
Bruno Jesus 00cpxxx@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Summary|Windows program crashes |Custom assembly program |under Wine |crashes under Wine
--- Comment #1 from Bruno Jesus 00cpxxx@gmail.com ---
Z:\root\TEMP\Speech5.exe
It looks like you are running wine as root, you should not do that. It can lead to undesired effects and it is also unsafe.
Wine build: wine-1.6.2
Wine 1.6.2 is no longer supported, please update to at least 1.8 and if it does not work try the latest development version (currently 1.9.2).
If possible attach the program so others can test too.
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #2 from Bruno Jesus 00cpxxx@gmail.com --- *** Bug 40080 has been marked as a duplicate of this bug. ***
https://bugs.winehq.org/show_bug.cgi?id=40068
Nathan version2013@openmailbox.org changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |version2013@openmailbox.org
--- Comment #3 from Nathan version2013@openmailbox.org --- Created attachment 53736 --> https://bugs.winehq.org/attachment.cgi?id=53736 backtrace for Firework3.exe using Wine-1.9.4
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #4 from Andrew Kennedy andrew_kennedy7@yahoo.com --- I am getting emails but don't see any responses to why the program is not running or what is being done to fix the problem.
Best regards
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #5 from Dmitry Timoshkov dmitry@baikal.ru --- (In reply to Andrew Kennedy from comment #4)
I am getting emails but don't see any responses to why the program is not running or what is being done to fix the problem.
That's impossible without a program demonstrating the problem, and since you are the author it would help a lot if the source is available too.
Also you were asked to test with a newer Wine version instead of 1.6.2.
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #6 from Nathan version2013@openmailbox.org --- Bug 40080 (see comment 2) has the program as an attachement. Source code is listed in the comments of Bug 40080, along with a link to the webpage, which has more info.
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #7 from Andrew Kennedy andrew_kennedy7@yahoo.com --- Attached is source code.
; Fireworks - with MMX blur and light effects ; by ronybc from Kerala,INDIA ; website: http://www.ronybc.8k.com
.686p .MMX .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\gdi32.inc include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib includelib \masm32\lib\gdi32.lib includelib \masm32\lib\user32.lib
; struct spark {float x,xv,y,yv;}; ; struct FireShell {DWORD life; float air; spark d[250];}; ; sizeof FireShell = 250*4*4+8 = 4008 bytes
EXX EQU 4 EXY EQU 8 AIR EQU 12 SPARC EQU 16
.data ClassName db "apocalypse",0 AppName db "Fireworks MMX ...by ronybc",0,0,0,0,0,0 info db "Fireworks Version: 3.40229 - Freeware",13,10 db 13,10 db "WARNING: This is a Fireware, softwares that push CPU temperature",13,10 db "to its maximum. It does No harm, but overclockers better stay away :)",13,10 db "Entire source code of this program is free available at my website. ",13,10 db 13,10 db "If you like the work, help the author with donations.",13,10 db "see http://www.ronybc.8k.com/support.htm%22,13,10 db 13,10 db "SPACE & ENTER keys toggles 'Gravity and Air' and",13,10 db "'Light and Smoke' effects respectively.",13,10 db "And clicks explode..! close clicks produce more light",13,10 db 13,10 db "Manufactured, bottled and distributed by",13,10 db "Silicon Fumes Digital Distilleries, Kerala, INDIA",13,10 db 13,10 db "Copyright 1999-2004 © Rony B Chandran. All Rights Reserved",13,10 db 13,10 db "This isn't the Final Version",13,10 db "check http://www.ronybc.8k.com for updates and more",0 seed dd 2037280626 wwidth dd 680 ; 1:1.618, The ratio of beauty ;) wheight dd 420 ; smaller the window faster the fires maxx dd 123 ; 123: values set on execution maxy dd 123 ; this thing is best for comparing lightx dd 123 ; cpu performance. lighty dd 123 flash dd 123 flfactor dd 0.92 adg dd 0.00024 ; 0.00096 acceleration due to gravity xcut dd 0.00064 nb dd 5 ; number of shells nd dd 400 ; sparks per shell sb dd 0 ; value set on execution maxpower dd 5 minlife dd 500 ; altered @WndProc:WM_COMMAND:1300 motionQ dd 16 ; 01-25, altered @WndProc:WM_COMMAND:1210 fcount dd 0 GMode dd 1 ; atmosphere or outer-space CMode dd 0 ; color shifter EMode dd 1 ; special effects click dd 0 stop dd 0 fadelvl dd 1 chemtable dd 00e0a0ffh, 00f08030h, 00e6c080h, 0040b070h, 00aad580h
bminf BITMAPINFO <<40,0,0,1,24,0,0,0,0,0,0>>
.data? hInstance HINSTANCE ? hwnd LPVOID ? hmnu HWND ? wnddc HDC ? hFThread HANDLE ? hHeap HANDLE ? idThread1 DWORD ? idThread2 DWORD ? bitmap1 LPVOID ? bitmap2 LPVOID ? hFShells LPVOID ? msg MSG <> wc WNDCLASSEX <>
.code
random PROC base:DWORD ; Park Miller random number algorithm mov eax, seed ; from M32lib/nrand.asm xor edx, edx mov ecx, 127773 div ecx mov ecx, eax mov eax, 16807 mul edx mov edx, ecx mov ecx, eax mov eax, 2836 mul edx sub ecx, eax xor edx, edx mov eax, ecx mov seed, ecx div base mov eax, edx ret random ENDP ; ------------------------------------------------------------------------- Light_Flash3 PROC x1:DWORD, y1:DWORD, lum:DWORD, src:DWORD, des:DWORD LOCAL mx:DWORD, my:DWORD, x2:DWORD, y2:DWORD, tff:DWORD mov eax,lum shr eax,1 ; Light_Flash: dynamic 2D lighting routine mov lum,eax ; does not uses any pre-computed data mov tff,255 ; ie. pure light frum tha melting cpu core :) mov eax,maxx mov mx,eax mov eax,maxy dec eax mov my,eax mov esi,src mov edi,des xor eax,eax mov y2,eax ylp3: ; 2x2 instead of per pixel lighting xor eax,eax ; half the quality, but higher speed mov x2,eax xlp3: mov eax,y2 sub eax,y1 imul eax mov ebx,x2 sub ebx,x1 imul ebx,ebx add eax,ebx mov edx,lum imul edx,edx xor ebx,ebx cmp eax,edx ja @F ; jump to end causes time waves push eax fild dword ptr[esp] fsqrt fidiv lum ; this code is -nonlinear- fld1 fsubrp st(1),st(0) fmul st(0),st(0) ; curve fmul st(0),st(0) ; curve more fimul tff fistp dword ptr[esp]
pop ebx imul ebx,01010101h @@: mov eax,y2 imul maxx add eax,x2 lea eax,[eax+eax*2] mov edx,maxx lea edx,[edx+edx*2] add edx,eax
movd MM2,ebx ; simply add with saturation movq MM0,[esi+eax] ; gamma correction is against this code psllq MM2,32 movq MM1,[esi+edx] movd MM3,ebx por MM2,MM3 paddusb MM0,MM2 movd [edi+eax],MM0 paddusb MM1,MM2 psrlq MM0,32 movd [edi+edx],MM1 movd ebx,MM0 psrlq MM1,32 mov [edi+eax+4],bx movd ecx,MM1 mov [edi+edx+4],cx emms @@: mov eax,x2 add eax,2 mov x2,eax cmp eax,mx jbe xlp3 mov eax,y2 add eax,2 mov y2,eax cmp eax,my jbe ylp3 ret Light_Flash3 ENDP ; ------------------------------------------------------------------------- Blur_MMX2 PROC ; 24bit color version mov edi,bitmap2 ; (Developed under an old SiS6326 graphic card mov esi,bitmap1 ; which prefers 24bit for faster operation) mov bitmap1,edi ; Note: SiS315 is excellent, good rendering quality mov bitmap2,esi pxor MM7,MM7 mov eax,fadelvl imul eax,00010001h mov [ebp-4],eax mov [ebp-8],eax movq MM6,[ebp-8] mov eax,maxx lea eax,[eax+eax*2] mov ebx,eax imul maxy push eax ; maxy*maxx*3 lea edx,[ebx-3] lea ebx,[ebx+3] neg edx xor eax,eax lea esi,[esi-3] @@: movd MM0,[esi] ; code enlarged version punpcklbw MM0,MM7 ; optimized for speed, not size movd MM1,[esi+8] movd MM2,[esi+16] punpcklbw MM1,MM7 punpcklbw MM2,MM7
movd MM3,[esi+6] movd MM4,[esi+14] movd MM5,[esi+22] punpcklbw MM3,MM7 paddw MM0,MM3 punpcklbw MM4,MM7 paddw MM1,MM4 punpcklbw MM5,MM7 paddw MM2,MM5
movd MM3,[esi+ebx] punpcklbw MM3,MM7 paddw MM0,MM3 movd MM4,[esi+ebx+8] movd MM5,[esi+ebx+16] punpcklbw MM4,MM7 paddw MM1,MM4 punpcklbw MM5,MM7 paddw MM2,MM5
movd MM3,[esi+edx] punpcklbw MM3,MM7 paddw MM0,MM3 movd MM4,[esi+edx+8] movd MM5,[esi+edx+16] punpcklbw MM4,MM7 paddw MM1,MM4 punpcklbw MM5,MM7 paddw MM2,MM5
psrlw MM0,2 ; neibours only, ie. smoky blur psrlw MM1,2 psrlw MM2,2 psubusw MM0,MM6 ; fade psubusw MM1,MM6 psubusw MM2,MM6 packuswb MM0,MM7 lea esi,[esi+12] packuswb MM1,MM7 packuswb MM2,MM7 movd [edi+eax],MM0 movd [edi+eax+8],MM1 movd [edi+eax+16],MM2 lea eax,[eax+12] cmp eax,[esp] jbe @B pop eax emms ; free fpu registers for following ret ; floating-point functions Blur_MMX2 ENDP ; ------------------------------------------------------------------------- FShell_explodeOS PROC hb:DWORD mov edi,hb add edi,SPARC mov eax,nd dec eax shl eax,4 @@: fld dword ptr[edi+eax] ; x coordinate fadd dword ptr[edi+eax+4] ; x velocity fstp dword ptr[edi+eax] fld dword ptr[edi+eax+8] ; y coordinate fadd dword ptr[edi+eax+12] ; y velocity fstp dword ptr[edi+eax+8] sub eax,16 jnc @B dec dword ptr[edi-SPARC] mov eax,[edi-SPARC] ; return(--life) ret FShell_explodeOS ENDP ; ------------------------------------------------------------------------- FShell_explodeAG PROC hb:DWORD mov edi,hb fld adg ; acceleration due to gravity fld dword ptr[edi+AIR] ; air resistance add edi,SPARC mov eax,nd dec eax shl eax,4 @@: fld dword ptr[edi+eax+4] ; x velocity fmul st(0),st(1) ; deceleration by air fst dword ptr[edi+eax+4] fadd dword ptr[edi+eax] ; x coordinate fstp dword ptr[edi+eax] fld dword ptr[edi+eax+12] ; y velocity fmul st(0),st(1) ; deceleration by air fadd st(0),st(2) ; gravity fst dword ptr[edi+eax+12] fadd dword ptr[edi+eax+8] ; y coordinate fstp dword ptr[edi+eax+8] sub eax,16 jnc @B fcompp ; marks st(0) and st(1) empty dec dword ptr[edi-SPARC] mov eax,[edi-SPARC] ; return(--life) ret FShell_explodeAG ENDP ; ------------------------------------------------------------------------- FShell_render PROC hb:DWORD, color:DWORD LOCAL expx:DWORD, expy:DWORD mov edi,hb mov eax,[edi+EXX] mov expx,eax mov eax,[edi+EXY] mov expy,eax add edi,SPARC mov ebx,color dec ebx ;and ebx,3 mov ecx,offset chemtable mov edx,hFShells ; floats are beautiful, and cheap source of add edx,32 ; the chemical used for multi colored fires mov eax,CMode or eax,eax cmovz edx,ecx mov edx,[edx+ebx*4] mov ecx,nd dec ecx shl ecx,4 mov esi,bitmap1 push maxy ; using stack adds speed push maxx ; (local variables) push edx @@: fld dword ptr[edi+ecx+4] fabs fld xcut ; low cost code for independant burnouts fcomip st(0),st(1) fistp dword ptr[esp-4] jae forget
fld dword ptr[edi+ecx] fistp dword ptr[esp-4] fld dword ptr[edi+ecx+8] fistp dword ptr[esp-8] mov eax,[esp-8] cmp eax,[esp+8] jae forget mov ebx,[esp-4] cmp ebx,[esp+4] jae forget imul dword ptr[esp+4] add eax,ebx lea eax,[eax+eax*2] mov edx,[esp] mov [esi+eax],dx shr edx,16 mov [esi+eax+2],dl forget: sub ecx,16 jnc @B ;add esp,12 'leave'ing (ENDP) ret FShell_render ENDP ; ------------------------------------------------------------------------- FShell_recycle PROC hb:DWORD, x:DWORD, y:DWORD mov edi,hb mov eax,x mov [edi+EXX],eax mov eax,y mov [edi+EXY],eax mov eax,x mov lightx,eax ; Light last one mov eax,y mov lighty,eax mov eax,flash ; having only one light source add eax,3200 ; 3200 million jouls...! mov flash,eax ; add if previous lighting not extinguished invoke random,20 inc eax imul minlife mov ebx,eax ; sync explosions by mouse clicks with rest mov eax,[edi] ; by maintaining minimum delay of 'minlife' xor edx,edx idiv minlife add edx,ebx mov [edi],edx invoke random,30 ; like its real world counterpart, creation process add eax,10 ; is long and boring but the end product is explodin.. mov [esp-4],eax ; refer C++ source also. Most of the below area mov eax,10000 ; is blind translation of that original C code mov [esp-8],eax ; i crawled on that code as a Human C compiler...! fld1 fild dword ptr[esp-4] fidiv dword ptr[esp-8] fsubp st(1),st(0) fstp dword ptr[edi+AIR] add edi,SPARC fild y fild x mov eax,1000 mov [esp-4],eax fild dword ptr[esp-4] ; 1000 (constant) invoke random,maxpower inc eax mov [esp-4],eax fild dword ptr[esp-4] ; power mov ecx,nd dec ecx shl ecx,4 @@: push ecx invoke random,2000 mov [esp-4],eax fild dword ptr[esp-4] fsub st(0),st(2) fdiv st(0),st(2) fmul st(0),st(1) mov ecx,[esp] fstp dword ptr[edi+ecx+4] fld st(0) fmul st(0),st(0) fld dword ptr[edi+ecx+4] fmul st(0),st(0) fsubp st(1),st(0) fsqrt invoke random,2000 mov [esp-4],eax fild dword ptr[esp-4] fsub st(0),st(3) fdiv st(0),st(3) fmulp st(1),st(0) mov ecx,[esp] fstp dword ptr[edi+ecx+12] fld st(2) fstp dword ptr[edi+ecx] fld st(3) fstp dword ptr[edi+ecx+8] pop ecx sub ecx,16 jnc @B fcompp fcompp ret FShell_recycle ENDP ; -------------------------------------------------------------------------
FireThread: invoke SetThreadPriority,idThread1,THREAD_PRIORITY_NORMAL;HIGHEST invoke GetDC,hwnd mov wnddc,eax invoke GetProcessHeap mov hHeap,eax invoke HeapAlloc,hHeap,HEAP_ZERO_MEMORY,4194304 add eax,4096 ; blur: -1'th line problem mov bitmap1,eax invoke HeapAlloc,hHeap,HEAP_ZERO_MEMORY,4194304 add eax,4096 ; blur: -1'th line problem mov bitmap2,eax mov eax,nd shl eax,4 add eax,SPARC mov sb,eax ; size of FShell = nd*16+8 imul nb ; array size = nb*sb invoke HeapAlloc,hHeap,HEAP_ZERO_MEMORY,eax mov hFShells,eax
finit ; initialise floating point unit mov ax,07fh ; low precision floats mov word ptr[esp-4],ax ; fireworks... not space rockets fldcw word ptr[esp-4]
sub ebp,12 ; as 3 local variables
mov eax,nb mov [ebp],eax mov eax,hFShells mov [ebp+4],eax initshells: ;mov eax,maxx ; naah... not needed ;shr eax,1 ; trusting auto-zero ;invoke FShell_recycle,[ebp+4],eax,maxy ;mov eax,sb ;add [ebp+4],eax ;dec dword ptr[ebp] ;jnz initFShells ;mov flash,6400 lp1: mov eax,motionQ mov dword ptr[ebp+8],eax lp2: mov eax,nb mov [ebp],eax mov eax,hFShells mov [ebp+4],eax lp3: invoke FShell_render,[ebp+4],[ebp] mov eax,GMode mov ecx,offset FShell_explodeAG mov ebx,offset FShell_explodeOS test eax,eax cmovz ecx,ebx push [ebp+4] call ecx test eax,eax jns @F invoke random,maxy push eax mov eax,maxx add eax,eax invoke random,eax mov edx,maxx shr edx,1 sub eax,edx push eax push [ebp+4] call FShell_recycle @@: mov eax,sb add [ebp+4],eax dec dword ptr[ebp] jnz lp3 dec dword ptr[ebp+8] jnz lp2 mov eax,EMode test eax,eax jz r1 mov eax,CMode ; switch pre/post blur according to - test eax,eax ; current chemical in fire jz @F invoke Blur_MMX2 @@: invoke Light_Flash3,lightx,lighty,flash,bitmap1,bitmap2 invoke SetDIBitsToDevice,wnddc,0,0,maxx,maxy,\ 0,0,0,maxy,bitmap2,ADDR bminf,DIB_RGB_COLORS mov eax,CMode test eax,eax jnz r2 invoke Blur_MMX2 jmp r2 r1: invoke SetDIBitsToDevice,wnddc,0,0,maxx,maxy,\ 0,0,0,maxy,bitmap1,ADDR bminf,DIB_RGB_COLORS mov eax,maxx imul maxy lea eax,[eax+eax*2] invoke RtlZeroMemory,bitmap1,eax r2: inc fcount ; count the frames fild flash fmul flfactor fistp flash invoke Sleep,5 ; control, if frames rate goes too high mov eax,stop test eax,eax jz lp1 invoke ReleaseDC,hwnd,wnddc invoke HeapFree,hHeap,0,bitmap1 invoke HeapFree,hHeap,0,bitmap2 invoke HeapFree,hHeap,0,hFShells mov idThread1,-1 invoke ExitThread,2003 hlt ; ...! i8085 memories ; ------------------------------------------------------------------------- .data fps db 64 dup (0) fmat db "fps = %u [www.ronybc.8k.com]",0 .code
MoniThread: invoke Sleep,1000 invoke wsprintf,ADDR fps,ADDR fmat,fcount invoke SetWindowText,hwnd,ADDR fps xor eax,eax mov fcount,eax mov eax,stop test eax,eax jz MoniThread mov idThread2,-1 invoke ExitThread,2003 ; ------------------------------------------------------------------------- Switch PROC oMode:DWORD, iid:DWORD xor eax,eax mov edx,oMode or al,byte ptr [edx] setz byte ptr [edx] mov eax,[edx] mov ebx,MF_CHECKED shl eax,3 and eax,ebx or eax,MF_BYCOMMAND invoke CheckMenuItem,hmnu,iid,eax ret Switch ENDP ; ------------------------------------------------------------------------- WndProc PROC hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM .IF uMsg==WM_MOUSEMOVE && wParam==MK_CONTROL xor edx,edx mov flash,2400 mov eax,lParam mov dx,ax shr eax,16 mov lightx,edx mov lighty,eax .ELSEIF uMsg==WM_SIZE && wParam!=SIZE_MINIMIZED xor edx,edx mov eax,lParam mov dx,ax shr eax,16 shr edx,2 shl edx,2 mov maxx,edx mov maxy,eax mov bminf.bmiHeader.biWidth,edx neg eax ; -maxy mov bminf.bmiHeader.biHeight,eax .ELSEIF uMsg==WM_KEYDOWN && wParam==VK_SPACE invoke Switch,OFFSET GMode,1200 .ELSEIF uMsg==WM_KEYDOWN && wParam==VK_RETURN invoke Switch,OFFSET EMode,1220 mov flash,0 .ELSEIF uMsg==WM_RBUTTONDOWN invoke MessageBox,hWnd,ADDR info,ADDR AppName,MB_OK or MB_ICONASTERISK .ELSEIF uMsg==WM_LBUTTONDOWN xor edx,edx mov eax,lParam mov dx,ax shr eax,16 push eax push edx mov edx,nb dec edx mov eax,click dec eax cmovs eax,edx mov click,eax imul sb add eax,hFShells push eax call FShell_recycle .ELSEIF uMsg==WM_CLOSE mov stop,1 ; stop running threads invoke Sleep,100 ; avoid FireThread drawing without window invoke DestroyWindow,hwnd invoke PostQuitMessage,0 .ELSEIF uMsg==WM_COMMAND .IF wParam==1010 invoke SendMessage,hwnd,WM_CLOSE,0,0 .ELSEIF wParam==1000 invoke SuspendThread,hFThread ; suffering technical difiiculties :) mov eax,maxx ; major motiv - to see ZeroMem in acion imul maxy lea eax,[eax+eax*2] invoke RtlZeroMemory,bitmap1,eax ; this thing is fast, invoke RtlZeroMemory,bitmap2,eax ; but hidden from some API docs push nb push hFShells @@: mov eax,maxx ;shr eax,1 shr eax,2 mov edx,[esp+4] dec edx imul eax,edx mov ebx,maxy shr ebx,1 invoke FShell_recycle,[esp+8],eax,ebx mov eax,sb add [esp],eax dec dword ptr[esp+4] jnz @B ;mov flash,6400 invoke ResumeThread,hFThread pop eax pop eax .ELSEIF wParam==1200 invoke Switch,OFFSET GMode,1200 .ELSEIF wParam==1210 invoke Switch,OFFSET CMode,1210 mov ecx,CMode mov eax,16 shr eax,cl mov motionQ,eax ; changing motionQ affects speed .ELSEIF wParam==1220 invoke Switch,OFFSET EMode,1220 mov flash,0 .ELSEIF wParam==1300 invoke CheckMenuItem,hmnu,1310,MF_BYCOMMAND or MF_UNCHECKED invoke CheckMenuItem,hmnu,1300,MF_BYCOMMAND or MF_CHECKED mov minlife,500 ; long interval between shoots .ELSEIF wParam==1310 invoke CheckMenuItem,hmnu,1300,MF_BYCOMMAND or MF_UNCHECKED invoke CheckMenuItem,hmnu,1310,MF_BYCOMMAND or MF_CHECKED mov minlife,100 ; short interval .ELSEIF wParam==1400 invoke MessageBox,hWnd,ADDR info,ADDR AppName,MB_OK or MB_ICONASTERISK .ENDIF .ELSE invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .ENDIF xor eax,eax ret WndProc ENDP ; -------------------------------------------------------------------------
start: invoke GetModuleHandle,NULL mov hInstance,eax mov wc.hInstance,eax mov wc.cbSize,SIZEOF WNDCLASSEX mov wc.style,CS_HREDRAW or CS_VREDRAW or CS_BYTEALIGNCLIENT mov wc.lpfnWndProc,OFFSET WndProc mov wc.cbClsExtra,NULL mov wc.cbWndExtra,NULL mov wc.hbrBackground,COLOR_MENUTEXT mov wc.lpszMenuName,NULL mov wc.lpszClassName,OFFSET ClassName invoke LoadCursor,NULL,IDC_ARROW mov wc.hCursor,eax invoke LoadIcon,hInstance,500 mov wc.hIcon,eax mov wc.hIconSm,eax invoke RegisterClassEx,ADDR wc invoke CreateWindowEx,WS_EX_OVERLAPPEDWINDOW,ADDR ClassName,ADDR AppName,\ WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\ CW_USEDEFAULT,wwidth,wheight,NULL,NULL,\ hInstance,NULL mov hwnd,eax add seed,eax ;) invoke LoadMenu,hInstance,600 mov hmnu,eax invoke SetMenu,hwnd,eax invoke CheckMenuItem,hmnu,1200,MF_BYCOMMAND or MF_CHECKED invoke CheckMenuItem,hmnu,1220,MF_BYCOMMAND or MF_CHECKED invoke CheckMenuItem,hmnu,1300,MF_BYCOMMAND or MF_CHECKED invoke ShowWindow,hwnd,SW_SHOWNORMAL invoke UpdateWindow,hwnd invoke CreateThread,0,4096,ADDR MoniThread,0,0,ADDR idThread1 invoke CreateThread,0,4096,ADDR FireThread,0,0,ADDR idThread2 mov hFThread,eax MsgLoop: invoke GetMessage,ADDR msg,0,0,0 test eax,eax jz EndLoop invoke TranslateMessage,ADDR msg invoke DispatchMessage,ADDR msg jmp MsgLoop EndLoop: @@: mov eax,idThread1 or eax,idThread2 not eax and eax,eax jnz @B invoke ExitProcess,eax
end start
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #8 from Andrew Kennedy andrew_kennedy7@yahoo.com --- I am using version 1.7.9 of Wine.
https://bugs.winehq.org/show_bug.cgi?id=40068
Dmitry Timoshkov dmitry@baikal.ru changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |download, source
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #9 from Dmitry Timoshkov dmitry@baikal.ru --- (In reply to Andrew Kennedy from comment #7)
Attached is source code.
; Fireworks - with MMX blur and light effects ; by ronybc from Kerala,INDIA ; website: http://www.ronybc.8k.com
Please don't paste such long source, attach it instead.
While firework2.exe downloaded from the above mentioned site work under Windows XP it crashes under Windows 7 almost same way as under Wine.
Looks like a stack corruption caused by hand written floating point/MMX code.
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #10 from Dmitry Timoshkov dmitry@baikal.ru --- Correct application name is firework3.exe.
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #11 from Andrew Kennedy andrew_kennedy7@yahoo.com --- (In reply to Dmitry Timoshkov from comment #10)
Correct application name is firework3.exe.
If it works under XP, what does Win 7 have to do with anything ?
There is no stack corruption under XP.
The program uses standard Win APIs just like Windows programs uses.
I have read where Wine can run hundreds of Windows programs.
I have only found 2 that can.
Andrew Kennedy
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #12 from Dmitry Timoshkov dmitry@baikal.ru --- (In reply to Andrew Kennedy from comment #11)
(In reply to Dmitry Timoshkov from comment #10)
Correct application name is firework3.exe.
If it works under XP, what does Win 7 have to do with anything ?
If the program doesn't work under Windows 7 and Wine, but works under Windows XP that means that there is a bug in the aplication which makes it incompatible with recent Windows versions, and accidently same bug doesn't allow it to run under Wine.
https://bugs.winehq.org/show_bug.cgi?id=40068
Sebastian Lackner sebastian@fds-team.de changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |STAGED CC| |dmitry@baikal.ru, | |erich.e.hoover@wine-staging | |.com, michael@fds-team.de, | |sebastian@fds-team.de Ever confirmed|0 |1 Staged patchset| |https://github.com/wine-com | |pholio/wine-staging/tree/ma | |ster/patches/ntdll-call_thr | |ead_func_wrapper
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #13 from Andrew Kennedy andrew_kennedy7@yahoo.com --- If Wine can not run any pre-Win7 programs, then I feel that is is VERY limited.
And useless for code writers of XP.
There are still boatloads of users still using XP.
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #14 from Sebastian Lackner sebastian@fds-team.de --- (In reply to Andrew Kennedy from comment #11)
There is no stack corruption under XP.
It always corrupts the stack, with more or less critical consequences. Michael Müller spotted what is going wrong:
--- snip --- FireThread: [...] sub ebp,12 ; as 3 local variables --- snip ---
The register %ebp was never properly initialized, effectively corrupting the variables of the parent function. Depending on the Windows version, the registers are initialized a bit different, effectively hiding all the trouble on Windows XP. Dmitry wrote a patch to "fix" it, which I've added to the Staging tree.
I can't guarantee that the patch will be accepted though. It is out of the scope of wine to be 100% bug-compatible with Windows, especially when your application is clearly doing something which can't work.
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #15 from Andrew Kennedy andrew_kennedy7@yahoo.com --- (In reply to Sebastian Lackner from comment #14)
(In reply to Andrew Kennedy from comment #11)
There is no stack corruption under XP.
It always corrupts the stack, with more or less critical consequences. Michael Müller spotted what is going wrong:
--- snip --- FireThread: [...] sub ebp,12 ; as 3 local variables --- snip ---
The register %ebp was never properly initialized, effectively corrupting the variables of the parent function. Depending on the Windows version, the registers are initialized a bit different, effectively hiding all the trouble on Windows XP. Dmitry wrote a patch to "fix" it, which I've added to the Staging tree.
I can't guarantee that the patch will be accepted though. It is out of the scope of wine to be 100% bug-compatible with Windows, especially when your application is clearly doing something which can't work.
Thanks for your help.
I can not finding the fix in the staging tree.
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #16 from Sebastian Lackner sebastian@fds-team.de --- (In reply to Andrew Kennedy from comment #15)
Thanks for your help.
I can not finding the fix in the staging tree.
The required patch is this one: https://github.com/wine-compholio/wine-staging/tree/master/patches/ntdll-cal...
(Also mentioned at the top, in the "Staged patchset" field of bugzilla.)
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #17 from Andrew Kennedy andrew_kennedy7@yahoo.com --- Thanks.
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #18 from Andrew Kennedy andrew_kennedy7@yahoo.com --- (In reply to Andrew Kennedy from comment #17)
Thanks.
I do not know how to apply the patch.
I need to know what procedure to change and the particular changes I need to make.
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #19 from Dmitry Timoshkov dmitry@baikal.ru --- (In reply to Andrew Kennedy from comment #18)
I do not know how to apply the patch.
I need to know what procedure to change and the particular changes I need to make.
https://wiki.winehq.org/Patching https://wiki.winehq.org/Building_Wine
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #20 from Andrew Kennedy andrew_kennedy7@yahoo.com --- Instructions are ANYTHING but simple.
I found no wine source directory.
I put the patch in the same directory as the assembly source code.
# patch -p1 < stack.patch patch: **** Only garbage was found in the patch input.
I do hope that Dmitry knows that the source code is assembly language and not c.
Does it patch the executable itself ?
I will try the patch with the .exe.
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #21 from Andrew Kennedy andrew_kennedy7@yahoo.com --- Patch does not contain any instances of firework3, so I see no way it can patch my source.
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #22 from Sebastian Lackner sebastian@fds-team.de --- (In reply to Andrew Kennedy from comment #20)
Instructions are ANYTHING but simple.
I found no wine source directory.
I put the patch in the same directory as the assembly source code.
# patch -p1 < stack.patch patch: **** Only garbage was found in the patch input.
I do hope that Dmitry knows that the source code is assembly language and not c.
Does it patch the executable itself ?
I will try the patch with the .exe.
The patch is for Wine itself, not for your assembly program. What the assembly program does is still wrong of course, but it avoids the crash in the same way as on Windows XP. If you are having trouble building Wine yourself, please refer to the WineHQ forums for further help.
Fixing the assembly program is even better of course, if you want to do that - the issue is explained in comment 14, and can be easily fixed by allocating a proper stack frame at the beginning of the function and initializing %ebp before using it. Based on the original description I assume you are a bit familiar with assembler and can easily do this change yourself.
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #23 from Andrew Kennedy andrew_kennedy7@yahoo.com --- Where is my wine source dir so I can apply the patch ?
I am working with several people to patch the source code, but it is taking a while.
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #24 from Andrew Kennedy andrew_kennedy7@yahoo.com --- Created attachment 53760 --> https://bugs.winehq.org/attachment.cgi?id=53760 Corrected source code and executable
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #25 from Dmitry Timoshkov dmitry@baikal.ru --- (In reply to Andrew Kennedy from comment #24)
Created attachment 53760 [details] Corrected source code and executable
It's still broken.
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #26 from Andrew Kennedy andrew_kennedy7@yahoo.com --- It works in Puppy Linux.
How do I get the Wine debugger.
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #27 from Andrew Kennedy andrew_kennedy7@yahoo.com --- (In reply to Dmitry Timoshkov from comment #25)
(In reply to Andrew Kennedy from comment #24)
Created attachment 53760 [details] Corrected source code and executable
It's still broken.
I corrected this
FireThread: [...] sub ebp,12 ; as 3 local variables --- snip ---
The register %ebp was never properly initialized, effectively corrupting the variables of the parent function.
Corrected line is
; PROBLEM HERE ?? ebp was never properly initialized ;sub ebp,12 ; as 3 local variables sub esp,12 ; CORRECT statment
As far as I am concerned, it IS fixed.
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #28 from Dmitry Timoshkov dmitry@baikal.ru --- (In reply to Andrew Kennedy from comment #27)
I corrected this
FireThread: [...] sub ebp,12 ; as 3 local variables --- snip ---
The register %ebp was never properly initialized, effectively corrupting the variables of the parent function.
Corrected line is
; PROBLEM HERE ?? ebp was never properly initialized ;sub ebp,12 ; as 3 local variables sub esp,12 ; CORRECT statment
As far as I am concerned, it IS fixed.
Quoting Sebastian's reply from Comment 22: "the issue is explained in comment 14, and can be easily fixed by allocating a proper stack frame at the beginning of the function and initializing %ebp before using it. Based on the original description I assume you are a bit familiar with assembler and can easily do this change yourself."
What you did above doesn't qualify as a proper fix.
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #29 from Andrew Kennedy andrew_kennedy7@yahoo.com --- Sure it does.
I have posted my fixed program to Linux forums for testing on other distros.
Proof will be in the pudding.
If it is not fixed, explain why it works with Puppy Linux ??
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #30 from Andrew Kennedy andrew_kennedy7@yahoo.com --- And what version of Linux are you testing it with ?
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #31 from Dmitry Timoshkov dmitry@baikal.ru --- (In reply to Andrew Kennedy from comment #29)
Sure it does.
I have posted my fixed program to Linux forums for testing on other distros.
Proof will be in the pudding.
If it is not fixed, explain why it works with Puppy Linux ??
Yes, the "fixed" version happens to work. But it works by a pure luck. If you pretend to know how to program in assembler you probably should know basic concepts like stack, local stack frame, and how to use them using x86 assembler.
But I'd say this going off-topic here, please use forums for further help.
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #32 from Andrew Kennedy andrew_kennedy7@yahoo.com --- No luck involved. Just the fruit of help from many programmers.
The program fix was provided by assembly programmers with over 20 years of experience.
How much programming experience do you have ?
I am still waiting for a link for downloading the Wine debugger.
With the Wine debugger, I should be able to fix many problems which will reduce my bug posts. :-)
Have a nice evening.
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #33 from Andrew Kennedy andrew_kennedy7@yahoo.com --- << it work in win10 << can you post your final source code ?
<< Logged << Fa is a musical note to play with CL
https://bugs.winehq.org/show_bug.cgi?id=40068
--- Comment #34 from Austin English austinenglish@gmail.com --- (In reply to Andrew Kennedy from comment #23)
Where is my wine source dir so I can apply the patch ?
It's at the top of the Patching wiki page: git clone git://source.winehq.org/git/wine.git wine-git
Please read more carefully.
(In reply to Andrew Kennedy from comment #32)
How much programming experience do you have ?
Maybe you should check git log in wine's source for that answer.
I am still waiting for a link for downloading the Wine debugger.
It's included wine, but may be shipped separately in packaged versions. You're looking for 'winedbg'.
https://bugs.winehq.org/show_bug.cgi?id=40068
Zebediah Figura z.figura12@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |z.figura12@gmail.com
--- Comment #35 from Zebediah Figura z.figura12@gmail.com --- I'm really quite curious as to why this bug has been kept open and not immediately resolved as INVALID.
https://bugs.winehq.org/show_bug.cgi?id=40068
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |focht@gmx.net Summary|Custom assembly program |Custom assembly program |crashes under Wine |'Fireworks' v3.x crashes | |due to stack corruption | |(%ebp used as frame pointer | |in app code but not | |initialized in function | |prolog)
--- Comment #36 from Anastasius Focht focht@gmx.net --- Hello folks,
--- quote --- I'm really quite curious as to why this bug has been kept open and not immediately resolved as INVALID. --- quote ---
Indeed, there is little reason to keep this ticket alive unless there are important commercial apps/games suffering from exactly the same problem.
The comment thread is quite hilarious to read tho ;-)
--- quote --- The program fix was provided by assembly programmers with over 20 years of experience.
How much programming experience do you have ? --- quote ---
I remembered a fitting quote from Kurt Tucholsky, a German satirical essayist, poet, and critic ... this is when the Internet comes quite handy:
--- quote --- Erfahrung heisst gar nichts. Man kann seine Sache auch 35 Jahre schlecht machen. --- quote ---
Translated:
--- quote --- Experience means nothing because you could do your thing badly for 35 years. --- quote ---
Regards
https://bugs.winehq.org/show_bug.cgi?id=40068
Nikolay Sivov bunglehead@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |INVALID Status|STAGED |RESOLVED
--- Comment #37 from Nikolay Sivov bunglehead@gmail.com --- Marking invalid.
https://bugs.winehq.org/show_bug.cgi?id=40068
André H. nerv@dawncrow.de changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |nerv@dawncrow.de Status|RESOLVED |CLOSED
--- Comment #38 from André H. nerv@dawncrow.de --- closing invalid