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
etc:users:jcmvbkbc:wine_mcbc [2007/10/13 19:23] jcmvbkbcetc:users:jcmvbkbc:wine_mcbc [2016/08/08 20:53] (current) – ↷ Page moved from users:jcmvbkbc:wine_mcbc to etc: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.1192288984.txt.gz · Last modified: 2008/01/03 02:32 (external edit)