From: Michael V. <mj...@un...> - 2000-10-17 16:33:09
|
Over the summer when I had much more time on my hands I started toying around with running Linux binaries on Windows (like lxrun). Since every so often there seems to be somebody asking about running UML on Windows, I though I'd share some of what I learned. I started entirely much from scratch and wrote an elfloader to load a Linux binary into a Windows process and start executing it. To prevent the int $80s from killing the process, I had to create a "monitor" process that basically acted as a debugger. Whenever the Linux binary executed a int $80, the monitor would gain control and redirect execution to the appropriate syscall. I was able to get simple utilities like "cat" and "echo" working, as well as a stripped down version of bash that could even fork() sometimes! Cedric Adjih writes: > I don`t know if Win98 would be useable, I got crashes when using > "int $80" with a genuine Win98 (and more normal blue screen reporting > illegal operation when in vmware). I think these are some > problems with Windows port: The workaround (ie. nasty kludge) I came up for Win9x was to search the .code segments and rewrite any "int $80" I found to a "int $03" (debugger breakpoint). Note that I used use long encoding of 0x03CD instead of the single byte 0xCC encoding. One annoying thing about that is that int $03 is a trap and int $80 is a fault (or maybe the other way around), so you have to increment PC after int $03 but not int $80 -- which means you need a check for Win9x vs. WinNT > - For 98, the equivalent of an mmap function is necessary. Is it > possible? (Cygnus mmap is limited because of limitations of W98/W95). yes, the lack of VirtualAllocEx() on Win95/98 is really annoying! > Design might be different, for instance if it is easy on NT to > change the memory mapping of one process: then one could use only > two processes: the tracer process and a "traced" process. > "Signal"-based scheduling might also be changed. There is also the issue of whether the syscalls execute as the tracer process or as the traced process. There are avantages and disavantages to both. I still have my source kicking around somewhere, I could make it available if there is interest. It's pretty rough around the edges though. Michael |