added references to other x86 emulators in the readme
This commit is contained in:
parent
12777e29c6
commit
dfe82da74c
57
readme.md
57
readme.md
@ -1,41 +1,62 @@
|
|||||||
De-obfuscated JSLinux
|
De-obfuscated JSLinux
|
||||||
=========================================================
|
=========================================================
|
||||||
|
|
||||||
I wanted to understand how the amazing [JsLinux][1] worked.
|
I wanted to understand how the amazing [JsLinux][1] worked, so in a
|
||||||
|
fit of mania I hand de-obfuscated the codebase while studying it over
|
||||||
|
a few days' time. In the off-chance someone else might be interested
|
||||||
|
in this code as a basis for further weird in-browser x86 hacking I
|
||||||
|
posted this redacted version of the code here, with permission of
|
||||||
|
Mr. Bellard.
|
||||||
|
|
||||||
However the original was passed through a minifier and was completely incomprehensible in that form. (Mr Bellard's standards for the code that he open sources is very high.) I couldn't wait for the proper release of the opus, so in a fit of mania I hand de-obfuscated the codebase (primarily the core cpu-emulation routines and a bit of the rest as well) while studying it over a few days' time.
|
I highly recommend checking out another open-source x86 emulation
|
||||||
|
project that includes vga support, "v86" ([demo][6] / [source][7]).
|
||||||
In the off-chance someone else might be interested in this code as a basis for further weird in-browser x86 hacking I'm posting this
|
There's yet another open-source 386-style emulator in javascript
|
||||||
redacted version of the code here, with permission of Mr. Bellard.
|
called [jslm32][3]. For a simpler architecture, take a look at the
|
||||||
|
remarkable linux on [jor1k][5] emulator project.
|
||||||
Note that there is another ground-up project to build an open-source 386-style emulator in javascript called [jslm32][3].
|
|
||||||
I also recommend looking at the remarkable linux on [jor1k][5] emulator project.
|
|
||||||
|
|
||||||
### Status
|
### Status
|
||||||
|
|
||||||
The current codebase should run on most modern versions of Chrome, Safari, and Firefox. If you're running it locally, you will need to load it via a local server to allow the XHR requests to load the binaries.
|
The current codebase should run on most modern versions of Chrome,
|
||||||
|
Safari, and Firefox. If you're running it locally, you will need to
|
||||||
|
load it via a local server to allow the XHR requests to load the
|
||||||
|
binaries.
|
||||||
|
|
||||||
jslinux-deobfuscated is still a dense, messy code base from any pedagogic point of view. However for those interested in Mr. Bellard's code,
|
jslinux-deobfuscated is still a dense, messy code base from any
|
||||||
this version is nowhere near so incomprehensible as the original. Nearly all of the global variables and function names have been named
|
pedagogic point of view. However for those interested in
|
||||||
somewhat sensibly. Many pointers to references have been added to the source.
|
Mr. Bellard's code, this version is nowhere near so incomprehensible
|
||||||
|
as the original. Nearly all of the global variables and function
|
||||||
|
names have been named somewhat sensibly. Many pointers to references
|
||||||
|
have been added to the source.
|
||||||
|
|
||||||
The core opcode execution loop has been commented to indicate what instruction the opcode refers to.
|
The core opcode execution loop has been commented to indicate what
|
||||||
|
instruction the opcode refers to.
|
||||||
|
|
||||||
### Unresolved
|
### Unresolved
|
||||||
|
|
||||||
One mystery is, why does CPUID(1) return 8 << 8 in EBX? EBX[15:8] is now used to indicate CLFLUSH line size, but that field must have been used for something else in the past.
|
One mystery is, why does CPUID(1) return 8 << 8 in EBX? EBX[15:8] is
|
||||||
|
now used to indicate CLFLUSH line size, but that field must have been
|
||||||
|
used for something else in the past.
|
||||||
|
|
||||||
The CALL/RET/INT/IRET routines are still quite confused and haven't yet been rewritten. The code dealing with segmentation, and some of the code for real-mode remains relatively messy.
|
The CALL/RET/INT/IRET routines are still quite confused and haven't
|
||||||
|
yet been rewritten. The code dealing with segmentation, and some of
|
||||||
|
the code for real-mode remains relatively messy.
|
||||||
|
|
||||||
Any recommendations / clarifications are welcome!
|
Any recommendations / clarifications are welcome!
|
||||||
|
|
||||||
### ETC
|
### ETC
|
||||||
|
|
||||||
I highly recommend, by the way, the excellent [JSShaper][2] library for transforming large javascript code bases. The hacks I made from it are in this repo: a little symbol-name-transformer node.js script and an emacs function for doing this in live buffers.
|
I highly recommend, by the way, the excellent [JSShaper][2] library
|
||||||
|
for transforming large javascript code bases. The hacks I made from
|
||||||
|
it are in this repo: a little symbol-name-transformer node.js script
|
||||||
|
and an emacs function for doing this in live buffers.
|
||||||
|
|
||||||
### License
|
### License
|
||||||
|
|
||||||
This is a pedagogical/aesthetic derivative of the original JSLinux code Copyright (c) 2011-2014 Fabrice Bellard. It is posted here with permission of the original author subject to his original constraints : Redistribution or commercial use is prohibited without the (original) author's permission.
|
This is a pedagogical/aesthetic derivative of the original JSLinux
|
||||||
|
code Copyright (c) 2011-2014 Fabrice Bellard. It is posted here with
|
||||||
|
permission of the original author subject to his original
|
||||||
|
constraints : Redistribution or commercial use is prohibited without
|
||||||
|
the (original) author's permission.
|
||||||
|
|
||||||
### References
|
### References
|
||||||
Some other helpful references for understanding what's going on:
|
Some other helpful references for understanding what's going on:
|
||||||
@ -62,3 +83,5 @@ Some other helpful references for understanding what's going on:
|
|||||||
[3]: https://github.com/ubercomp/jslm32
|
[3]: https://github.com/ubercomp/jslm32
|
||||||
[4]: https://bugs.webkit.org/show_bug.cgi?id=72154
|
[4]: https://bugs.webkit.org/show_bug.cgi?id=72154
|
||||||
[5]: https://github.com/s-macke/jor1k
|
[5]: https://github.com/s-macke/jor1k
|
||||||
|
[6]: http://copy.sh/v86/
|
||||||
|
[7]: https://github.com/copy/v86
|
||||||
|
Loading…
Reference in New Issue
Block a user