Skip to content

Instantly share code, notes, and snippets.

@agatti
Created October 25, 2023 19:01
Show Gist options
  • Save agatti/6c1341fb3107712825164e2f2cda1aed to your computer and use it in GitHub Desktop.
Save agatti/6c1341fb3107712825164e2f2cda1aed to your computer and use it in GitHub Desktop.
RISC-V native_closure.py
0x00000000 ADDI SP, SP, -52 0xFCC10113
0x00000004 SW RA, 0(SP) 0x00112023
0x00000008 SW S0, 4(SP) 0x00812223
0x0000000C SW S1, 8(SP) 0x00912423
0x00000010 SW S2, 12(SP) 0x01212623
0x00000014 SW S3, 16(SP) 0x01312823
0x00000018 SW S4, 20(SP) 0x01412A23
0x0000001C SW S5, 24(SP) 0x01512C23
0x00000020 SW S6, 28(SP) 0x01612E23
0x00000024 SW S7, 32(SP) 0x03712023
0x00000028 SW S8, 36(SP) 0x03812223
0x0000002C SW S9, 40(SP) 0x03912423
0x00000030 SW S10, 44(SP) 0x03A12623
0x00000034 SW S11, 48(SP) 0x03B12823
[API] LOAD_REG_REG_OFFSET {register_destination: T0, register_base: A0, offset: 1, resolved_offset: 0x00000004}
0x00000038 LW T0, 4(A0) 0x00452283
[API] LOAD_REG_REG_OFFSET {register_destination: S2, register_base: T0, offset: 2, resolved_offset: 0x00000008}
0x0000003C LW S2, 8(T0) 0x0082A903
[API] LOAD_REG_REG_OFFSET {register_destination: T0, register_base: T0, offset: 3, resolved_offset: 0x0000000C}
0x00000040 LW T0, 12(T0) 0x00C2A283
[API] LOAD_REG_REG_OFFSET {register_destination: T0, register_base: T0, offset: 0, resolved_offset: 0x00000000}
0x00000044 LW T0, 0(T0) 0x0002A283
[API] MOV_LOCAL_REG {local: 0, stack_offset: 0x00000000, register: A0}
0x00000048 LW A0, 0(SP) 0x00012503
[API] LOAD_REG_REG_OFFSET {register_destination: A0, register_base: A0, offset: 2, resolved_offset: 0x00000008}
0x0000004C LW A0, 8(A0) 0x00852503
[API] MOV_LOCAL_REG {local: 1, stack_offset: 0x00000004, register: A0}
0x00000050 LW A0, 4(SP) 0x00412503
[API] MOV_REG_IMM {register: A0, immediate: 5}
0x00000054 ADDI A0, ZERO, 5 0x00500513
[API] MOV_LOCAL_REG {local: 3, stack_offset: 0x0000000C, register: A0}
0x00000058 LW A0, 12(SP) 0x00C12503
[API] MOV_REG_LOCAL_ADDR {register: A0, local: 0, stack_offset: 0x00000000}
0x0000005C ADDI A0, SP, 0 0x00010513
[API] CALL_IND {index: 45, offset: 0x000000B4}
0x00000060 JALR RA, T0, 180 0x0B4280E7
[API] MOV_REG_LOCAL {register: S0, local: 9, stack_offset: 0x00000024}
0x00000064 SW S0, 36(SP) 0x02812223
[API] MOV_REG_LOCAL {register: S1, local: 8, stack_offset: 0x00000020}
0x00000068 SW S1, 32(SP) 0x02912023
[API] LOAD_REG_REG_OFFSET {register_destination: A0, register_base: S0, offset: 1, resolved_offset: 0x00000004}
0x0000006C LW A0, 4(S0) 0x00442503
[API] MOV_LOCAL_REG {local: 5, stack_offset: 0x00000014, register: A0}
0x00000070 LW A0, 20(SP) 0x01412503
[API] LOAD_REG_REG_OFFSET {register_destination: A0, register_base: S1, offset: 1, resolved_offset: 0x00000004}
0x00000074 LW A0, 4(S1) 0x0044A503
[API] MOV_REG_REG {register_destination_index: A2, register_source_index: A0}
0x00000078 ADD A2, ZERO, A0 0x00A00633
[API] MOV_REG_LOCAL {register: A1, local: 5, stack_offset: 0x00000014}
0x0000007C SW A1, 20(SP) 0x00B12A23
[API] MOV_REG_IMM {register: A0, immediate: 27}
0x00000080 ADDI A0, ZERO, 27 0x01B00513
[API] CALL_IND {index: 18, offset: 0x00000048}
0x00000084 JALR RA, T0, 72 0x048280E7
[API] MOV_REG_LOCAL {register: T1, local: 7, stack_offset: 0x0000001C}
0x00000088 SW T1, 28(SP) 0x00612E23
[API] MOV_REG_REG {register_destination_index: A2, register_source_index: T1}
0x0000008C ADD A2, ZERO, T1 0x00600633
[API] MOV_REG_REG {register_destination_index: A1, register_source_index: A0}
0x00000090 ADD A1, ZERO, A0 0x00A005B3
[API] MOV_REG_IMM {register: A0, immediate: 27}
0x00000094 ADDI A0, ZERO, 27 0x01B00513
[API] CALL_IND {index: 18, offset: 0x00000048}
0x00000098 JALR RA, T0, 72 0x048280E7
[API] JUMP {label: 0, destination: 0x000000A0, displacement: 4}
0x0000009C JAL ZERO, 4 0x0040006F
[API] LOAD_REG_REG_OFFSET {register_destination: A1, register_base: T0, offset: 0, resolved_offset: 0x00000000}
0x000000A0 LW A0, 0(T0) 0x0002A503
[API] JUMP {label: 0, destination: 0x000000A0, displacement: 0}
0x000000A0 JAL ZERO, 0 0x0000006F
0x000000A0 LW RA, 0(SP) 0x00012083
0x000000A4 LW S0, 4(SP) 0x00412403
0x000000A8 LW S1, 8(SP) 0x00812483
0x000000AC LW S2, 12(SP) 0x00C12903
0x000000B0 LW S3, 16(SP) 0x01012983
0x000000B4 LW S4, 20(SP) 0x01412A03
0x000000B8 LW S5, 24(SP) 0x01812A83
0x000000BC LW S6, 28(SP) 0x01C12B03
0x000000C0 LW S7, 32(SP) 0x02012B83
0x000000C4 LW S8, 36(SP) 0x02412C03
0x000000C8 LW S9, 40(SP) 0x02812C83
0x000000CC LW S10, 44(SP) 0x02C12D03
0x000000D0 LW S11, 48(SP) 0x03012D83
0x000000D4 ADDI SP, SP, 52 0x03410113
0x000000D8 JALR ZERO, RA, 0 0x00008067
---CODE-BLOCK-START---
import pathlib
import binascii
code = binascii.a2b_hex('1301C1FC2320110023228100232491002326210123283101232A4101232C5101232E61012320710323228103232491032326A1032328B1038322450003A9820083A2C20083A20200032501000325850003254100130550000325C10013050100E780420B2322810223209102032544000325410103A544003306A000232AB1001305B001E7808204232E610033066000B305A0001305B001E78082046F0040008320010003244100832481000329C10083290101032A4101832A8101032BC101832B0102032C4102832C8102032DC102832D01031301410367800000000000000000')
pathlib.Path('code.bin').write_bytes(code)
---CODE-BLOCK-END---
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment