if the CPU used by the host supports instructions that are not supported by the guest OS (like AVX, AVX2, FMA3, FMA4, AVX-512),
these assembly optimisations are shown as available, therefore once a program starts, it detects AVX as available, so it tries to use the AVX registers,
but the guest OS (Windows XP) supports up to SSE4.2 and such a program crashes with 0xc000001d code.
This issue doesn't occur in VirtualBox 5.1.26 (latest stable).
Code: Select all
Disassembly:
1c887e20: 1c50 sbb al, 50h
1c887e22: 8d4df4 lea ecx, [ebp-0ch]
1c887e25: e8e1c40100 call 1c8a430b
1c887e2a: 6898188e1c push 1c8e1898
1c887e2f: 8d45f4 lea eax, [ebp-0ch]
1c887e32: c745f430d08c1c mov dword ptr [ebp-0ch], 1c8cd030
1c887e39: 50 push eax
1c887e3a: e8acd80100 call 1c8a56eb
1c887e3f: cc int 3
1c887e40: 55 push ebp
1c887e41: 8bec mov ebp, esp
1c887e43: 83ec10 sub esp, 10h
1c887e46: 56 push esi
1c887e47: 8bf2 mov esi, edx
1c887e49: 8b550c mov edx, [ebp+0ch]
1c887e4c: 8bc2 mov eax, edx
1c887e4e: c1ee02 shr esi, 02h
1c887e51: 83e0f0 and eax, 0f0h
1c887e54: 2bd0 sub edx, eax
1c887e56: 8945f4 mov [ebp-0ch], eax
1c887e59: 837d1000 cmp dword ptr [ebp+10h], 00h
1c887e5d: 57 push edi
1c887e5e: 89550c mov [ebp+0ch], edx
1c887e61: 0f8eeb000000 jle 1c887f52
1c887e67: 8b7d18 mov edi, [ebp+18h]
1c887e6a: 8d14b500000000 lea edx, [esi*4+00000000]
1c887e71: 8b751c mov esi, [ebp+1ch]
1c887e74: 8955f0 mov [ebp-10h], edx
1c887e77: 8b45f4 mov eax, [ebp-0ch]
1c887e7a: 8bd7 mov edx, edi
1c887e7c: 8955fc mov [ebp-04h], edx
1c887e7f: 8975f8 mov [ebp-08h], esi
1c887e82: 85c0 test eax, eax
1c887e84: 7e6c jle 1c887ef2
1c887e86: 48 dec eax
1c887e87: 8bf7 mov esi, edi
1c887e89: 8b7df8 mov edi, [ebp-08h]
1c887e8c: 8bd1 mov edx, ecx
1c887e8e: c1e804 shr eax, 04h
1c887e91: 40 inc eax
1c887e92: eb0c jmp 1c887ea0
1c887e94: 8da42400000000 lea esp, [esp+00]
1c887e9b: eb03 jmp 1c887ea0
1c887e9d: 8d4900 lea ecx, [ecx+00h]
[color=#FF0000][b]1c887ea0: c4e2 les esp, edx <-- FAULT[/b][/color]
1c887ea2: 7d30 jge 1c887ed4
1c887ea4: 06 push es
1c887ea5: c4e2 les esp, edx
1c887ea7: 7d30 jge 1c887ed9
1c887ea9: 0fc5fd71 pextrw ebp, mm7, 71h
1c887ead: f0 lock
1c887eae: 08c5 or ch, al
1c887eb0: fd std
1c887eb1: ebc9 jmp 1c887e7c
1c887eb3: c4e2 les esp, edx
1c887eb5: 7d33 jge 1c887eea
1c887eb7: c1c5fc rol ebp, 0fch
1c887eba: 5b pop ebx
1c887ebb: c0c5fc rol ch, 0fch
1c887ebe: 2902 sub [edx], eax
1c887ec0: c4e3 les esp, ebx
1c887ec2: 7d19 jge 1c887edd
1c887ec4: c801c4e2 enter c401, 0e2h
1c887ec8: 7d33 jge 1c887efd
1c887eca: c0c5fc rol ch, 0fch
1c887ecd: 5b pop ebx
1c887ece: c083c6108d5240 rol byte ptr [ebx+528d10c6], 40h
1c887ed5: 83c710 add edi, 10h
1c887ed8: c5fc lds edi, esp
1c887eda: 2942e0 sub [edx-20h], eax
1c887edd: 48 dec eax
1c887ede: 75c0 jnz 1c887ea0
1c887ee0: 8b45f4 mov eax, [ebp-0ch]
1c887ee3: 8975fc mov [ebp-04h], esi
1c887ee6: 8b751c mov esi, [ebp+1ch]
1c887ee9: 8b55fc mov edx, [ebp-04h]
1c887eec: 897df8 mov [ebp-08h], edi
1c887eef: 8b7d18 mov edi, [ebp+18h]
1c887ef2: 837d0c00 cmp dword ptr [ebp+0ch], 00h
1c887ef6: 7e42 jle 1c887f3a
1c887ef8: 837d0c08 cmp dword ptr [ebp+0ch], 08h
1c887efc: 8b75f8 mov esi, [ebp-08h]
1c887eff: c4e2 les esp, edx
1c887f01: 7d30 jge 1c887f33
1c887f03: 02c5 add al, ch
1c887f05: fd std
1c887f06: 71f0 jno 1c887ef8
1c887f08: 08c4 or ah, al
1c887f0a: e27d loop 1c887f89
1c887f0c: 300e xor [esi], cl
1c887f0e: 8b751c mov esi, [ebp+1ch]
1c887f11: c5fd lds edi, ebp
1c887f13: ebc9 jmp 1c887ede
1c887f15: c4e2 les esp, edx
1c887f17: 7d33 jge 1c887f4c
1c887f19: c1c5fc rol ebp, 0fch
1c887f1c: 5b pop ebx
1c887f1d: c0c5fc rol ch, 0fch
Built on Anton3 on Sat Jul 15 11:46:46 2017 using compiler version 1500
Windows 5.1 (Windows XP x86 build 2600) [Service Pack 3]
Memory status: virtual free 1378M/2048M, commit limit 9816M, physical total 6000M
EAX = 0000000c
EBX = 0014f0f0
ECX = 18e00540
EDX = 18e00540
EBP = 251bfde8
ESI = 1e3b0020
EDI = 1e42e920
ESP = 251bfdd0
EIP = 1c887ea0
EFLAGS = 00010207
FPUCW = ffff027f
FPUTW = ffffffff
Crash reason: Illegal instruction
Crash context:
An instruction not supported by the CPU was executed in module 'dither'.
Pointer dumps:
EBX 0014f0f0: 1c8d4c94 08000004 1c8e887c 1c8d4c8c 1c8d4c7c 1c8d4cb4 00000001 18e79b70
ECX 18e00540: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
EDX 18e00540: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
ESI 1e3b0020: 82828282 82828282 82828282 82828282 82828282 82828282 83828382 83838382
EDI 1e42e920: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
ESP 251bfdd0: 00000010 0012eb34 00000340 000000c0 1e42e920 1e3b0020 251bfe18 1c887920
251bfdf0: 000003c0 00000003 000000ed 1e3b0020 1e3b0020 1e42e920 1c892a72 00010000
251bfe10: 00000001 18e00508 251bfe88 1c88f4db 18e00540 00000340 00000002 00000010
251bfe30: 00000001 1e42e920 000003c0 000000c3 000000ed 00000000 00000000 0014f0f0
EBP 251bfde8: 251bfe18 1c887920 000003c0 00000003 000000ed 1e3b0020 1e3b0020 1e42e920
251bfe08: 1c892a72 00010000 00000001 18e00508 251bfe88 1c88f4db 18e00540 00000340
251bfe28: 00000002 00000010 00000001 1e42e920 000003c0 000000c3 000000ed 00000000
251bfe48: 00000000 0014f0f0 18e004f8 1c88fb9e 10723618 00000001 00000000 00000000
Thread call stack:
1c887ea0: dither!_AvisynthPluginInit2@4 [1c850000+d020+2ae80]
1c887920: dither!_AvisynthPluginInit2@4 [1c850000+d020+2a900]
1c892a72: dither!_AvisynthPluginInit2@4 [1c850000+d020+35a52]
1c88f4db: dither!_AvisynthPluginInit2@4 [1c850000+d020+324bb]
1c88fb9e: dither!_AvisynthPluginInit2@4 [1c850000+d020+32b7e]
1c88dc2a: dither!_AvisynthPluginInit2@4 [1c850000+d020+30c0a]
1c88ebe1: dither!_AvisynthPluginInit2@4 [1c850000+d020+31bc1]
05503c1c: avstp!00003c1c
055091c5: avstp!avstp_wait_completion [05500000+40e0+50e5]
05502306: avstp!00002306
0550595a: avstp!avstp_wait_completion [05500000+40e0+187a]
05505a82: avstp!avstp_wait_completion [05500000+40e0+19a2]
7c80b849: kernel32!GetModuleFileNameA [7c800000+b68f+1ba]