Skip to content

Commit acd2f50

Browse files
author
dorothychen
authored
Update README.md
1 parent 04f34d4 commit acd2f50

File tree

1 file changed

+23
-37
lines changed

1 file changed

+23
-37
lines changed

README.md

+23-37
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Interactive Disassembler GUI
1515
About
1616
-----
1717

18-
Disasm is a web application written in Flask. It allows you to disassemble ELF files into Intel x86 assembly. The assembly and analysis can be displayed in a browser so that you can click around and interact with it.
18+
Disasm is a browser-based application, built on Flask, that allows you to disassemble ELF files into Intel x86 assembly. The assembly and analysis is displayed in a browser so that you can click around and interact with it.
1919

2020
Before running
2121
-----------------
@@ -33,16 +33,15 @@ There is optional IACA integration. To use it, you must first download IACA from
3333

3434
[PyPy](http://pypy.org/) is an alternative implementation of python that provides a considerable speedup. To use it, there is a little more setup involved.
3535

36-
1. Setup the requirements for pypy using either of the following:
37-
* Use pip_pypy
38-
* `pip_pypy install -r requirements.pypy.txt` (regular pip doesn't install to a directory that pypy can find)
39-
* Use virtualenv and pip
40-
2. Ensure that you have either `c++filt` or `gc++filt` on your machine/in your `$PATH` (The demangler library we use does not work with pypy. If you know of a python demangler library that can run on pypy, let us know!)
36+
1. Set up the requirements for pypy using either of the following methods:
37+
* `pip_pypy install -r requirements.pypy.txt` (regular pip doesn't install to a directory that pypy can find)
38+
* OR create a pypy virtualenv and `pip install -r requirements.pypy.txt` within that virtualenv
39+
2. Ensure that you have either `c++filt` or `gc++filt` on your machine and in your `$PATH`. The demangler library we use does not work with pypy so we use command line tools instead. If you know of a python demangler library that can run on pypy, please let us know!
4140

4241
Running
4342
-------
4443

45-
The best way to run the application is the following way:
44+
You can run the application with
4645

4746
```python
4847
python run.py
@@ -63,12 +62,12 @@ pypy run.py
6362
### Options
6463

6564
* -f <file(s)>, --files <file(s)>
66-
* File(s) that you want to appear on the homepage to disassemble.
65+
* File(s) that you want to disassemble.
6766

6867
Features
6968
--------
7069

71-
Features marked with an asterisk (*) require that the .dwarf_info and .dwarf_aranges sections be defined in order to use it.
70+
Features marked with an asterisk (*) require that the .dwarf_info section be defined in order to use it.
7271

7372
### Disassembly
7473

@@ -98,7 +97,7 @@ Whenever possible, the contents of a register will be displayed, including the o
9897

9998
### Register tracking *
10099

101-
Observe which instructions read and/or write to a particular register. To activate this feature, right click the desired register and select the appropriate option.
100+
Observe which instructions read and/or write to a particular register by right clicking on the desired register and selecting the appropriate option from the dropdown menu.
102101

103102
![registers written to and read from](screenshots/relevant-registers.png "Display all of the instructions that write to or read from this register")
104103

@@ -110,13 +109,13 @@ Instructions that write to a flag(s) will display a white flag next to the mnemo
110109

111110
### Jump table resolution
112111

113-
Jump tables are parsed. Clicking on the first instruction in a jump table sequence will display a the table the mapping between value in rdi (the condition) and the address to jump to. Clicking on one of these addresses will allow you to jump to this instruction as well.
112+
Jump tables are parsed. Clicking on the jump table instruction displays the mapping between each condition value and the address to jump to. Clicking on each of these addresses jumps to the respective instruction.
114113

115114
![jump table parsing](screenshots/jump-table.png "Display the information relevant to the detected jump table")
116115

117116
### Rip-relative address resolution and interpretation
118117

119-
A rip-relative adddress (e.g, "rip + 0x129d866") can be resolved into a single address by right clicking on that part of the instruction. The value at this address can also be read from the file as an 8/16/32/64-bit signed decimal/unsigned decimal/hexadecimal/binary number, single/double precision floating point number, or null-terminated C String (up to 128 bytes).
118+
A rip-relative adddress (e.g, `rip + 0x129d866`) can be resolved into a single address by right clicking on that part of the instruction. The value at this address can also be read from the file as an 8/16/32/64-bit signed decimal/unsigned decimal/hexadecimal/binary number, single/double precision floating point number, or null-terminated C String (up to 128 bytes).
120119

121120
![rip relative resolution and interpretation](screenshots/rip-relative.gif "Resolving the RIP-relative address and interpreting the data at that address")
122121

@@ -154,50 +153,37 @@ When a file is uploaded, it will be stored on the server for quicker lookup late
154153

155154
### NOP byte size
156155

157-
There are various different NOP instructions, each of which is encoded as a different operation, and each with a different size. Instead of displaying the operation (which is essentially meaningless), the size of the NOP will be displayed.
156+
NOP operations (which are essentially meaningless) are replaced with the size of the NOP.
158157

159158
![NOP byte size](screenshots/nop-byte-size.png "Display the size of the NOP instruction")
160159

161160
### Keyboard shortcuts
162161

163162
#### Function search
164163

165-
* Up/down
166-
* Navigate through the list of functions
167-
* Enter
168-
* Disassemble the currently selected function
169-
* ?
170-
* Display the help menu
164+
* Up/down: Navigate through the list of functions
165+
* Enter: Disassemble the currently selected function
166+
* ?: Display the help menu
171167

172168
#### Disassembly
173169

174-
* Up/down
175-
* Navigate through the instructions
170+
* Up/down: Navigate through the instructions
176171
* Right Arrow
177-
* On jmp/call
178-
* Go to target address
179-
* On ret
180-
* Return to the calling function (only available if this function was reached by entering going through a call instruction)
172+
* On jmp/call: Go to target address
173+
* On ret: Return to the calling function (only available if this function was reached by entering going through a call instruction)
181174
* Left Arrow
182175
* Undo previous jump/call (if applicable)
183-
* Enter
184-
* Open the analysis window relevant to this instruction
176+
* Enter: Open the analysis window relevant to this instruction
185177

186178
##### Analysis window open
187179

188-
* Shift + up/down
189-
* Go up/down the function stack
190-
* Tab
191-
* Cycle through the analysis tabs
192-
* Escape
193-
* Close the analysis window
180+
* Shift + up/down: Go up/down the function stack
181+
* Tab: Cycle through the analysis tabs
182+
* Escape: Close the analysis window
194183

195184
Bugs
196185
----
197-
198-
No known bugs.
199-
200-
If any bugs are found, please contact `[email protected]` or `[email protected]` with as much of the following information as possible:
186+
If you find any bugs, please contact `[email protected]` or `[email protected]` with as much of the following information as possible:
201187

202188
* Version of python being run
203189
* Source code language and version

0 commit comments

Comments
 (0)