Open Source & Linux Lab

It's better when it's simple

User Tools

Site Tools


etc:users:jcmvbkbc:wine_mcbc

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
etc:users:jcmvbkbc:wine_mcbc [2007/10/13 19:23] jcmvbkbcusers:jcmvbkbc:wine_mcbc [2016/08/07 00:34] – ↷ Page moved from user:jcmvbkbc:wine_mcbc to users:jcmvbkbc:wine_mcbc kel
Line 1: Line 1:
-== Начало истории для меня ==+====== Wine под МСВС ====== 
 +===== Начало истории для меня =====
 http://etersoft.ru http://etersoft.ru
-== Патчи для компиляции wine в МСВС 3.0 изм.13 =+ 
-== Проблемы времени выполнения == +===== Проблемы времени выполнения ===== 
-wine-preloader падает с segmentation fault после загрузки кода приложения, при попытке начать его исполнение.+ 
 +==== Первоначальный запуск wine неполностью инициализирует ~/.wine ==== 
 + 
 +Симптомы: 
 +<code> 
 +$ wine 
 +WINE@Etersoft 1.0.8 
 +First running... Using WINEPREFIX=/home/dumb/.wine 
 +Creating default file tree... 
 +/usr/bin/wine: line 194:  2506 Segmentation fault      WINESAFE=yes "${WINELOADER}" rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 128 wine.inf 
 +/usr/bin/wine: line 195:  2509 Segmentation fault      WINESAFE=yes "${WINELOADER}" regedit.exe "$CROOT/windows/inf/vendor.reg" 
 +Building local environment... 
 +Device 'a:' created as link for '/mnt/floppy' target. 
 +... 
 +Device 'lpt4' created as link for '/dev/lp3' target. 
 +/usr/bin/wine: line 268:  2535 Segmentation fault      $WINELOADER wineboot 
 +WINE@Etersoft has been configured for the first time. 
 +Use /home/dumb/wine_c as WINE C:\ disk. 
 +Copy your program into and install it. 
 +</code> 
 +В результате каталог c:\windows\system32 не содержит dll, но все работает с dll из /usr/lib/wine/
 +Однако, взяв заполненный c:\windows\system32 ничего запустить не могу: 
 +<code> 
 +$ wine-kthread ./1cv7s.exe 
 +wine: Unhandled page fault on read access to 0x00000000 at address 0x402586f8 (thread 0009), starting debugger... 
 +err:seh:start_debugger Couldn't start debugger ("winedbg --auto 8 56") (1359) 
 +Read the Wine Developers Guide on how to set up winedbg or another debugger 
 +</code> 
 + 
 +==== wine-preloader загружает wine-kthread и падает с segmentation fault при попытке начать его исполнение ====
  
 Ход разборок: Ход разборок:
Line 50: Line 80:
 gs             0x0      0 gs             0x0      0
 </code> </code>
-получается, после сдвига стека на 0x1000 вниз все сломалось. wine-preloader зарезервировал маленький стек?+получается, после сдвига стека на 0x1000 вниз все сломалось. wine-preloader резервирует мало стека? 
 + 
 +Написал тест: 
 +<code> 
 +void f(int i) 
 +
 +  int r[4096]; 
 +  f(i+1); 
 +
 + 
 +int main() 
 +
 +  f(0); 
 +
 +</code> 
 +падает в одном и том же (по стеку и по i) месте, как при обычном запуске, так и при запуске wine-preloader'ом. С объемом стека все в порядке. 
 + 
 +Нашел **настоящую** разницу: после загрузки wine-kthread резервирует пямять. Когда он запускается сам по себе картина такова: 
 +<code> 
 +... 
 +stat("/usr/bin/wineserver", {st_mode=S_IFREG|0755, st_size=343953, ...}) = 0 
 +old_mmap(0x7ffe0000, 1073741824, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x7ffe0000 
 +old_mmap(0x1000, 1110016, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x1000 
 +old_mmap(NULL, 4096, PROT_NONE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0 
 +open("/usr/lib/wine/ntdll.dll.so", O_RDONLY) = 4 
 +... 
 +</code> 
 +Когда же через wine-preloader: 
 +<code> 
 +... 
 +stat("/usr/bin/wineserver", {st_mode=S_IFREG|0755, st_size=343953, ...}) = 0 
 +old_mmap(0x7ffe0000, 1073741824, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = -1 ENOMEM (Cannot allocate memory) 
 +old_mmap(0x7ffe0000, 536870912, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = -1 ENOMEM (Cannot allocate memory) 
 +old_mmap(0x7ffe0000, 268435456, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x6021a000 
 +munmap(0x6021a000, 268435456)           = 0 
 +old_mmap(0x7ffe0000, 134217728, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x6021a000 
 +munmap(0x6021a000, 134217728)           = 0 
 +old_mmap(0x7ffe0000, 67108864, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x6021a000 
 +... 
 +old_mmap(0x87fe0000, 134217728, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x87fe0000 
 +old_mmap(0x8ffe0000, 268435456, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = -1 ENOMEM (Cannot allocate memory) 
 +old_mmap(0x8ffe0000, 134217728, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x8ffe0000 
 +... 
 +old_mmap(0xbffd0000, 65536, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = -1 ENOMEM (Cannot allocate memory) 
 +old_mmap(0x1000, 1110016, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = -1 ENOMEM (Cannot allocate memory) 
 +brk(0x7c004000)                         = 0x7c004000 
 +open("/usr/lib/wine/ntdll.dll.so", O_RDONLY) = 4 
 +fstat(4, {st_mode=S_IFREG|0755, st_size=549156, ...}) = 0 
 +--- SIGSEGV (Segmentation fault) @ 0 (0) --- 
 +... 
 +</code> 
 + 
 +{{tag>МСВС}}
etc/users/jcmvbkbc/wine_mcbc.txt · Last modified: 2016/08/08 20:53 by kel