i forget to attache one patch yesterday.
For winimage you need to add RtlCopyMemory in kernel32.dll, wich is define as a macro in wine.
MSDN said that function is part of Windows DDK, declared in wdm.h and ntddk.h.
(more info here : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ kmarch/hh/kmarch/k109_0zzm.asp)
emmanuel
Index: dlls/kernel/module.c =================================================================== RCS file: /home/wine/wine/dlls/kernel/module.c,v retrieving revision 1.6 diff -u -r1.6 module.c --- dlls/kernel/module.c 15 Apr 2004 00:04:05 -0000 1.6 +++ dlls/kernel/module.c 29 Apr 2004 21:24:23 -0000 @@ -181,8 +181,15 @@ } /* Not ELF, try DOS */ +#ifdef __powerpc__ +#define SwapWORD(a) (((a & 0xff00) >> 8) | ((a & 0x00ff) << 8)) +#define SwapDWORD(a) ( ((a & 0xff000000) >> 24) | ((a & 0x00ff0000) >> 8) | ((a & 0x0000ff00) << 8) | ((a & 0x000000ff) << 24) ) +#else +#define SwapWORD(a) a +#define SwapDWORD(a) a +#endif - if (header.mz.e_magic == IMAGE_DOS_SIGNATURE) + if (SwapWORD(header.mz.e_magic) == IMAGE_DOS_SIGNATURE) { /* We do have a DOS image so we will now try to seek into * the file by the amount indicated by the field @@ -191,22 +198,22 @@ * This will tell us if there is more header information * to read or not. */ - if (SetFilePointer( hfile, header.mz.e_lfanew, NULL, SEEK_SET ) == -1) + if (SetFilePointer( hfile, SwapDWORD(header.mz.e_lfanew), NULL, SEEK_SET ) == -1) return BINARY_DOS; if (!ReadFile( hfile, magic, sizeof(magic), &len, NULL ) || len != sizeof(magic)) return BINARY_DOS; - /* Reading the magic field succeeded so * we will try to determine what type it is. */ + if (!memcmp( magic, "PE\0\0", 4 )) { IMAGE_FILE_HEADER FileHeader; if (ReadFile( hfile, &FileHeader, sizeof(FileHeader), &len, NULL ) && len == sizeof(FileHeader)) { - if (FileHeader.Characteristics & IMAGE_FILE_DLL) return BINARY_PE_DLL; - return BINARY_PE_EXE; + if (SwapDWORD(FileHeader.Characteristics) & IMAGE_FILE_DLL) return BINARY_PE_DLL; + return BINARY_PE_EXE; } return BINARY_DOS; }
Le 29 avr. 04, à 23:04, emmanuel maillard a écrit :
Hi all,
I'm looking for people using wine on linuxPPC who want try my patches to run a NT PPC exe.
(i plan to reinstall linux/ppc to make my tests but i need to rearrange my HDs before, and it will
take times )
This doesn't work for me on MacOSX but this could be due to our port for darwin, this why i need to have feedback
from linux/ppc users.
PE headers are store in little endian even for an PPC file, so I test endiannes and swap PE infos if needed.
For my test i use winimage 3.0 for NT PPC, available here : http://www.winimage.com/download.htm
map_image seems good :
trace:module:map_image mapped PE file at 0x4f000-0xe5000
Trying to load PE image for unsupported architecture (PowerPC)
trace:module:map_image mapping section .text at 0x50000 off 400 size 6c600 flags 60000020
trace:module:map_image mapping section .rdata at 0xbd000 off 6ca00 size 1c00 flags 40000040
trace:module:map_image mapping section .data at 0xbf000 off 6e600 size 3600 flags c0000040
trace:module:map_image clearing 0xc2600 - 0xc3000
trace:module:map_image mapping section .pdata at 0xc8000 off 71c00 size 5c00 flags 40000040
trace:module:map_image mapping section .idata at 0xce000 off 77800 size 3000 flags c0000040
trace:module:map_image mapping section .reldata at 0xd1000 off 7a800 size 200 flags c0000040
trace:module:map_image mapping section .rsrc at 0xd2000 off 7aa00 size e000 flags 40000040
trace:module:map_image mapping section .reloc at 0xe0000 off 88a00 size 5000 flags 42000040
trace:module:do_relocations relocating from 0x400000-0x496000 to 0x4f000-0xe5000
trace:module:do_relocations 1848 relocations for page 6e000
trace:module:do_relocations 816 relocations for page 6f000
trace:module:do_relocations 80 relocations for page 70000
trace:module:do_relocations 40 relocations for page 71000
trace:module:do_relocations 80 relocations for page 72000
trace:module:do_relocations 32 relocations for page 73000
trace:module:do_relocations 1236 relocations for page 79000
trace:module:do_relocations 1240 relocations for page 7a000
trace:module:do_relocations 1240 relocations for page 7b000
trace:module:do_relocations 1236 relocations for page 7c000
trace:module:do_relocations 1240 relocations for page 7d000
trace:module:do_relocations 796 relocations for page 7e000
trace:module:do_relocations 1316 relocations for page 7f000
trace:module:do_relocations 704 relocations for page 80000
trace:module:do_relocations 184 relocations for page 82000
But when process start :
....
trace:module:MODULE_InitDLL entry : 0x0(L"WINIMAGE.exe",0x1) - END
0009:Starting process L"F:\\Desktop\\wimapp30\\WINIMAGE.exe" (entryproc=0xbe750)
wait few seconds ...
wine: Unhandled exception (thread 0009), starting debugger...
i test it with mosaic too but failed due to an undefined symbol in iphlpapi.dll
"err:module:load_builtin_dll failed to load .so lib for builtin L"iphlpapi.dll": dlcompat: dyld: wine Undefined symbols:
_res_9_init"
If someone with a Linux/x86 want to launch winimage PPC with +module enable to send me the output to see if my changes
give right values it will be helpfull to.
Thanks in advance
emmanuel
the patches (kernel/process.c, ntdll/loader.c, ntdll/virtual.c, server/mapping.c and winedump/pe.c) : <swap_them_all.tgz>
full winimage output with +module :<Winimage3.0-NT-PPC.log.gz>