It seems to be a problem with any 32-bit Mono app ran with 'wine64'. I think it converts the bytecode to 64-bit machine code (even though the header is PE32).
You can recreate by copy and pasting the following: # create csharp code cat << END > helloworld.cs using Microsoft.Win32; using System;
public class HelloWorld { static public void Main () { Console.WriteLine ("Hello World"); } } END
# compile mcs helloworld.cs mcs -platform:x64 helloworld.cs -out:helloworld64.exe
# confirm headers file helloworld.exe helloworld64.exe
# Output should be # helloworld.exe: PE32 executable (console) Intel 80386 Mono/.Net assembly, for MS Windows # helloworld64.exe: PE32+ executable (console) x86-64 Mono/.Net assembly, for MS Windows
# run 64-bit version wine64 helloworld64
# run 32-bit version (LdrInitializeThunk Main exe initialization failed, status c0000017) wine64 helloworld
On 17/10/18 8:12 pm, Alexandre Julliard wrote:
Brendan McGrath brendan@redmandi.com writes:
wine64 was using IMAGE_NT_HEADERS to access header information regardless of the execution type; hence it would use IMAGE_OPTIONAL_HEADER64 for a 32bit app.
wine64 should not be used for a 32-bit binary, it should exec the 32-bit loader instead. Do you have a sample app to reproduce this?