ASM 8086 Cheat Sheet by Mikael Peigney (Mika56) via cheatography.com/3808/cs/839/ Colors Deci mal Hexa Binary Color 0 00h 0000b Black 1 01h 0001b Blue 2 02h 0010b Green 3 03h 0011b Colbalt blue 4. ASAM Level of Care (LOC) Determination Guidelines (1 of 2) As emergency needs come first, the highest severity problem (with specific attention to Dimensions 1, 2 and 3) should guide the client’s entry point into the treatment continuum. The ASM 8085 Cheat Sheet was released by Deathtitan77 on Cheatography. Here's how they described it: ASM 8085 Cheat Sheet. Download the PDF version here.
They can be used in evaluations:? ${asm.tabs}
You will want to set your favourite options in ~/.radare2rc
since every line there will be interpreted at the beginning of each session. Mine for reference:
There is an easier interface accessible from the Visual mode, just typing Ve
Command syntax: [.][times][cmd][~grep][@[@iter]addr!size][|>pipe]
;
Command chaining: x 3;s+3;pi 3;s+3;pxo 4;
|
Pipe with shell commands: pd | less
!
Run shell commands: !cat /etc/passwd
!!
Escapes to shell, run command and pass output to radare buffer Note: The double exclamation mark tells radare to skip the plugin list to find an IO plugin handling this command to launch it directly to the shell. A single one will walk through the io plugin list.`
Radare commands: wx `!ragg2 -i exec`
~
grep~!
grep -v~[n]
grep by columns afl~[0]
~:n
grep by rows afl~:0
.cmd
Interprets command output..
repeats last commands (same as enter n)(
Used to define and run macros$
Used to define alias$$
: Resolves to current address@
) are absolute, we can use $$ for relative ones @ $$+4
?
Evaluate expression?$?
Help for variables used in expressions$$
: Here$s
: File size$b
: Block size$l
: Opcode length$j
: When $$
is at a jmp
, $j
is the address where we are going to jump to$f
: Same for jmp
fail address$m
: Opcode memory reference (e.g. mov eax,[0x10] => 0x10)???
Help for ?
command?i
Takes input from stdin. Eg ?i username
??
Result from previous operations?s from to [step]
: Generates sequence from ?p
: Get physical address for given virtual address?P
: Get virtual address for given physical one?v
Show hex value of math expr?l str
: Returns the length of string@@
: Used for iterationsThe block size is the default view size for radare. All commands will work with this constraint, but you can always temporally change the block size just giving a numeric argument to the print commands for example (px 20)
Most of commands such as (i)nfo and (p)rint commands accept a j
to print their output in json
Function analysis (normal mode)
Function analysis (visual mode)
Opcode analysis:
Mitigations:
Get function address in GOT table:pd 1 @ sym.imp<funct>
Returns a jmp [addr]
where addr
is the address of function in the GOT. Similar to objdump -R | grep <func>
Flags are labels for offsets. They can be grouped in namespaces as sym
for symbols ...
V
enters visual mode
Search depth can be configure with following properties:
Example: Searching function preludes:
Its possible to run a command for each hit. Use the cmd.hit
property:
Search for magic numbers
Search can be controlled with following properties:
Yara can also be used for detecting file signatures to determine compiler types, shellcodes, protections and more.
Zignatures are useful when dealing with stripped binaries. We can take a non-stripped binary, run zignatures on it and apply it to a different binary that was compiled statically with the same libraries.
Zignatures are applied as comments:
Basic block graphs
Call graphs
Convert .dot in .png
Generate graph for file:
Start r2 in debugger mode. r2 will fork and attach
To pass arguments:
To pass stdin:
Commands
To follow child processes in forks (set-follow-fork-mode in gdb)
PEDA like details: drr;pd 10@-10;pxr 40@esp
Debug in visual mode
All suite commands include a -r
flag to generate instructions for r2
Examples:
Example:
Examples:
64 bit | 32 bit | 16 bit | 8 bit | |
---|---|---|---|---|
A (accumulator) | RAX | EAX | AX | AL |
B (base, addressing) | RBX | EBX | BX | BL |
C (counter, iterations) | RCX | ECX | CX | CL |
D (data) | RDX | EDX | DX | DL |
RDI | EDI | DI | DIL | |
RSI | ESI | SI | SIL | |
Numbered (n=8..15) | Rn | RnD | RnW | RnB |
Stack pointer | RSP | ESP | SP | SPL |
Frame pointer | RBP | EBP | BP | BPL |
As well as XMM0 .. XMM15 for 128 bit floating point numbers.
Put function arguments (first to last) in the following registers (64 bitrepresentations): RDI, RSI, RDX, RCX, R8, R9, then push to stack (in reverse,has to be cleaned up by the caller!) XMM0 - XMM7 for floats
Return values are stored in RAX (int
) or XMM0 (float
)
RBP, RBX, R12, R13, R14, R15 will not be changed by the called function, allothers may be
Align stack pointer (RSP) to 16 byte, calling pushes 8 bytes!
Keep in mind that strings (in C) are 0-terminated
Like in a normal C program, the label that is (de facto) called first ismain
, with the args argc
(argcount) in RDI, and the char** argv
in RSI(the commandline arguments as in C's main function).
Definition size | Definition instruction |
---|---|
8 bit | db |
16 bit | dw |
32 bit | dd |
64 bit | ddq /do |
float | dd |
double | dq |
extended precision | dt |
cmp op1, op2
-> mimics sub op1, op2
but only changes the zero and carry flagfor comparing.
Prefixes:
j~ x
-> jump to x if ~cmov~ x, y
-> conditional mov x, y if ~setc~ x
-> set x to 1 if ~, x is 8 bit regMany suffixes, including:
a
(above, >)ae
(above or equal, >=)b
(below, <)be
(below or equal, <=)e
(equal, =)ne
(not equal, !=)global <entry>
-> exposes entry pointextern <function>
-> declares a function in another linked .o file (e.g. Cfunction, other asm file)section <sectiontype>
-> sets section, usually:.text
-> program code.data
-> dataThe program entry point of a standalone program is the label _start
. Whencompiled with gcc, C provides _start
, which inits and then jumps to main
,which should then be implemented by the program.
syscall
instructionnasm -felf64 -o <object> <filename>
ld -o <output> <object>
gcc -o <output> <object>