assemble
Command assemble
If you have installed keystone, then gef
will provide a convenient command to assemble native instructions directly to
opcodes of the architecture you are currently debugging.
Call it via assemble or its alias asm:
gef➤ asm [INSTRUCTION [; INSTRUCTION ...]]

By setting the --arch ARCH and --mode MODE the target platform for the
assembly can be changed. Available architectures and modes can be displayed
with --list-archs.
gef➤ asm --list-archs
Available architectures/modes (with endianness):
- ARM
* ARM (little, big)
* THUMB (little, big)
* ARMV8 (little, big)
* THUMBV8 (little, big)
- ARM64
* AARCH64 (little)
- MIPS
* MIPS32 (little, big)
* MIPS64 (little, big)
- PPC
* PPC32 (big)
* PPC64 (little, big)
- SPARC
* SPARC32 (little, big)
* SPARC64 (big)
- SYSTEMZ
* SYSTEMZ (little, big)
- X86
* 16 (little)
* 32 (little)
* 64 (little)
gef➤ asm --arch x86 --mode 32 [INSTRUCTION [; INSTRUCTION ...]]
gef➤ asm --arch arm [INSTRUCTION [; INSTRUCTION ...]]
To choose the endianness use --endian ENDIANNESS (by default, little):
gef➤ asm --endian big [INSTRUCTION [; INSTRUCTION ...]]
Using the --overwrite-location LOCATION option, gef will write the assembly
code generated by keystone directly to the memory location specified. This
makes it extremely convenient to simply overwrite opcodes.

Another convenient option is --as-shellcode which outputs the generated
shellcode as an escaped python string. It can then easily be used in your
python scripts.
