cea-sec/miasm

View on GitHub
example/samples/human.S

Summary

Maintainability
Test Coverage
    ;;  Walk a human link list and print its information
main:
    TEST       RDI, RDI
    JZ         next

    PUSH       RBX
    MOV        RBX, RDI
loop_arg:
    LEA        RSI, QWORD PTR [RBX+0x10]
    LEA        RDI, QWORD PTR [name-_+RIP]
    XOR        EAX, EAX
    CALL       printf

    MOVZX      ESI, WORD PTR [RBX+0x8]
    LEA        RDI, QWORD PTR [age-_+RIP]
    XOR        EAX, EAX
    CALL       printf

    MOV        ESI, DWORD PTR [RBX+0xC]
    XOR        EAX, EAX
    LEA        RDI, QWORD PTR [height-_+RIP]
    CALL       printf

    MOV        RBX, QWORD PTR [RBX]
    TEST       RBX, RBX
    JNZ        loop_arg

    POP        RBX
next:


    LEA        RBX, QWORD PTR [struct_human_ptr-_+RIP]
loop_global:
    CMP        RBX, 0
    JZ         end

    LEA        RSI, QWORD PTR [RBX+0x10]
    LEA        RDI, QWORD PTR [name-_+RIP]
    XOR        EAX, EAX
    CALL       printf
    MOV        RBX, QWORD PTR [RBX]
    JMP        loop_global
end:
    RET

printf:
    ;; Dummy printf
    RET

age:
.string "Age: %d\n"
height:
.string "Height: %d\n"
name:
.string "Name: %s\n"
struct_human_ptr:
.dword 0xdead, 0xcafe