Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ability to specify more parameters to asm() function to specify target architecture #2539

Open
OBarronCS opened this issue Feb 4, 2025 · 1 comment
Labels

Comments

@OBarronCS
Copy link

The pwntools asm and make_elf_from_assembly functions are really amazing - they are great for really quickly testing out small snippets of assembly instructions. It would be great to be able to have more fine grained control with the arguments that are passed to the assembler and linker inside of the asm function.

This was spurred by testing a 32-bit RISC-V script that had an assembly instruction that required a RISC-V ISA extension that can be enabled via an assembler flag.

For example, the following RISC-V assembly snippet uses the bset instruction specified in the RISC-V zbs extension (I tested this with the apt gcc-14-riscv64-linux-gnu package installed):

#!/usr/bin/env python3

from pwn import *

context.arch = "riscv32"

RISCV=f"""
li a2, 4
bset a2,zero,a2
"""
out = make_elf_from_assembly(RISCV)

print(out)
print("-"*80)
gdb.debug(out)

pause()

These extensions are typically enabled by appending strings to the -march flag passed to the assembler. For example, to enable the zbs extension, you can change the following line:

'riscv32': [gas, '-march=rv32gc', '-mabi=ilp32'],

to

'riscv32': [gas, '-march=rv32gc_zbs', '-mabi=ilp32'],

(note the _zbs)

Perhaps there could be new named parameters such extensions that are passed to the assembler, and similarly another parameter to modify/(override?) the binary format.

@Arusekk
Copy link
Member

Arusekk commented Feb 4, 2025 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants