etc:users:jcmvbkbc:wine_mcbc
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
etc:users:jcmvbkbc:wine_mcbc [2007/10/12 02:00] – создано jcmvbkbc | etc: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:// | http:// | ||
- | == Патчи для компиляции wine в МСВС 3.0 изм.13 == | ||
- | == Проблемы времени выполнения == | ||
- | wine-preloader падает с segmentation fault после загрузки кода приложения, | ||
+ | ===== Проблемы времени выполнения ===== | ||
+ | |||
+ | ==== Первоначальный запуск wine неполностью инициализирует ~/.wine ==== | ||
+ | |||
+ | Симптомы: | ||
+ | < | ||
+ | $ wine | ||
+ | WINE@Etersoft 1.0.8 | ||
+ | First running... Using WINEPREFIX=/ | ||
+ | Creating default file tree... | ||
+ | / | ||
+ | / | ||
+ | Building local environment... | ||
+ | Device ' | ||
+ | ... | ||
+ | Device ' | ||
+ | / | ||
+ | WINE@Etersoft has been configured for the first time. | ||
+ | Use / | ||
+ | Copy your program into and install it. | ||
+ | </ | ||
+ | В результате каталог c: | ||
+ | Однако, | ||
+ | < | ||
+ | $ wine-kthread ./1cv7s.exe | ||
+ | wine: Unhandled page fault on read access to 0x00000000 at address 0x402586f8 (thread 0009), starting debugger... | ||
+ | err: | ||
+ | Read the Wine Developers Guide on how to set up winedbg or another debugger | ||
+ | </ | ||
+ | |||
+ | ==== wine-preloader загружает wine-kthread и падает с segmentation fault при попытке начать его исполнение ==== | ||
+ | |||
+ | Ход разборок: | ||
+ | < | ||
+ | gdb --args / | ||
+ | </ | ||
+ | < | ||
+ | (gdb) run | ||
+ | ... | ||
+ | jumping to 600019c0 | ||
+ | |||
+ | Program received signal SIGSEGV, Segmentation fault. | ||
+ | 0x60005240 in ?? () | ||
+ | </ | ||
+ | disassemble не работает, | ||
+ | < | ||
+ | (gdb) x/64i $eip-32 | ||
+ | 0x60005220: | ||
+ | 0x60005225: | ||
+ | 0x60005228: | ||
+ | 0x6000522e: | ||
+ | 0x60005230: | ||
+ | 0x60005233: | ||
+ | 0x60005235: | ||
+ | 0x60005237: | ||
+ | 0x6000523d: | ||
+ | 0x60005240: | ||
+ | </ | ||
+ | < | ||
+ | (gdb) info registers | ||
+ | eax 0x1000 | ||
+ | ecx 0x802 2050 | ||
+ | edx 0x1000 | ||
+ | ebx 0x60013868 | ||
+ | esp 0xbfffdf58 | ||
+ | ebp 0xbffff074 | ||
+ | esi 0x63f2b | ||
+ | edi 0x0 0 | ||
+ | eip 0x60005240 | ||
+ | eflags | ||
+ | cs | ||
+ | ss | ||
+ | ds | ||
+ | es | ||
+ | fs | ||
+ | gs | ||
+ | </ | ||
+ | получается, | ||
+ | |||
+ | Написал тест: | ||
+ | < | ||
+ | void f(int i) | ||
+ | { | ||
+ | int r[4096]; | ||
+ | f(i+1); | ||
+ | } | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | f(0); | ||
+ | } | ||
+ | </ | ||
+ | падает в одном и том же (по стеку и по i) месте, как при обычном запуске, | ||
+ | |||
+ | Нашел **настоящую** разницу: | ||
+ | < | ||
+ | ... | ||
+ | stat("/ | ||
+ | old_mmap(0x7ffe0000, | ||
+ | old_mmap(0x1000, | ||
+ | old_mmap(NULL, | ||
+ | open("/ | ||
+ | ... | ||
+ | </ | ||
+ | Когда же через wine-preloader: | ||
+ | < | ||
+ | ... | ||
+ | stat("/ | ||
+ | old_mmap(0x7ffe0000, | ||
+ | old_mmap(0x7ffe0000, | ||
+ | old_mmap(0x7ffe0000, | ||
+ | munmap(0x6021a000, | ||
+ | old_mmap(0x7ffe0000, | ||
+ | munmap(0x6021a000, | ||
+ | old_mmap(0x7ffe0000, | ||
+ | ... | ||
+ | old_mmap(0x87fe0000, | ||
+ | old_mmap(0x8ffe0000, | ||
+ | old_mmap(0x8ffe0000, | ||
+ | ... | ||
+ | old_mmap(0xbffd0000, | ||
+ | old_mmap(0x1000, | ||
+ | brk(0x7c004000) | ||
+ | open("/ | ||
+ | fstat(4, {st_mode=S_IFREG|0755, | ||
+ | --- SIGSEGV (Segmentation fault) @ 0 (0) --- | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | {{tag> |
etc/users/jcmvbkbc/wine_mcbc.1192140044.txt.gz · Last modified: 2008/01/03 02:32 (external edit)