x86-64 playground is an online assembly editor and GDB-like debugger, powered by a Wasm port of the Blink x86-64-linux emulator.
It is designed to make assembly tooling more accessible on the web. You can use it as a standalone web app at https://x64.halb.it or embed it in web pages to enhance your technical documentation with interactive elements.
- Test and debug your assembly snippets from the browser, on an emulated x86-64-Linux environment. The web app offers a wide range of popular amd64 assemblers: GNU Binutils, Fasm, Nasm. You can fully customize the command line arguments or even provide your own assemblers.
- Run and debug your assembly snippets, or any x86-64-Linux ELF you upload. The app features an accessible interface inspired by the GDB debugger where you can step into your program, and visualize disassembly, memory and registers of the emulated process.
- Share your assembly snippets with others, or embed the app in any web page to add interactive elements to your technical articles.
- Offline first: All the code you write, or the excutables you debug are never sent to the server. Everything is emulated client side in your browser, and works without an internet connection.
The web app works as a single static page, without any server side component. It's compiled and hosted on GitHub pages. Both the emulator and debugger run client side, in a webAssembly port of the blink emulator which has been patched and modified to run as a C library. The low-level emulator APIs are expsed to the web app presentation layer via a Typescript wrapper.
See the Design document file for an overview of the technical choices behind the project.
This project is subdivided in two areas of development:
- The web app
- the Blink WASM engine
The web app is located in the webapp folder,
and is a regular Typescript+Svelte+vite web app.
Check out webapp/README.md for instructions on how to
build, modify and run it.
The magic that powers the webapp is the WASM bundle
stored in webapp/assets/blinkenlib.wasm, which contains
the compiled Blink engine. Since the compiled file
is stored in git, you can work on the web app without worrying about
extra compilation steps, GNU autotools, or other spooky tools.
If you want to understand or modify the low-level behaviour of the emulator, you will need to get your hands on the blink library, and recompile it.
This will result in a new file that will override the existing file in
webapp/assets/blinkenlib.wasm.
This section is described roughly in docs/setup.md. For more context, check out the design document for this Project, The commits in this fork of blink, and the standalone project blink.js
The logo for this website is based on work distributed under the Creative Commons Attribution License CC BY 3.0 by Nur Achmadi Yusuf


