Gallopsled / pwntools

CTF framework and exploit development library
http://pwntools.com
Other
12.1k stars 1.71k forks source link

Assembly seems to be broken on riscv #2452

Open TethysSvensson opened 2 months ago

TethysSvensson commented 2 months ago

I've tried using the asm tool for riscv32 and riscv64 and it doesn't seem to work correctly.

Example:

$ asm -c riscv32 'nop'
[!] Could not find system include headers for riscv32-linux
0100
$ asm -c riscv32 'addi x0, x0, 0'
[!] Could not find system include headers for riscv32-linux
0100
$ asm -c riscv32 'addi x0, x0, 1'
[!] Could not find system include headers for riscv32-linux
13001000
$ asm -c riscv64 'nop'
[!] Could not find system include headers for riscv64-linux
0100
$ asm -c riscv64 'addi x0, x0, 0'
[!] Could not find system include headers for riscv64-linux
0100
$ asm -c riscv64 'addi x0, x0, 1'
[!] Could not find system include headers for riscv64-linux
13001000

Instructions in riscv cannot be only two bytes long.

Arusekk commented 2 months ago

See #2419

TethysSvensson commented 2 months ago

My bad, it seems like I don't know riscv very well at all.

Still, I don't think asm produce assembly that only works on processors with the C extension, unless explicitly enabled.

Xeonacid commented 2 weeks ago

Still, I don't think asm produce assembly that only works on processors with the C extension, unless explicitly enabled.

All existing riscv64 chips designed to run Linux have the C extension, and main Linux distributions (Debian, Ubuntu, Fedora, Arch Linux...) all use rv64gc as their baseline. I think including the C extension by default is reasonable.

TethysSvensson commented 2 weeks ago

As far as I remember, I was not targeting a Linux system at the time.