#include <stdio.h> typedef char String[1024]; int main(void) { typedef struct { String name; int hp; int attack; } Monster; Monster seiryu = {"青竜", 100, 15}; printf(seiryu.name, seiryu.hp, seiryu.attack); return 0; }
|$LN3| stp fp,lr,[sp,#-0x10]! mov fp,sp bl __security_push_cookie sub sp,sp,#0x410 add x8,sp,#8 str x8,[sp] ldr x9,[sp] adrp x8,|$SG4988| add x8,x8,|$SG4988| ldr w10,[x8] str w10,[x9] ldrsh w10,[x8,#4] strh w10,[x9,#4] ldrsb w8,[x8,#6] strb w8,[x9,#6] add x0,sp,#0xF mov x2,#0x3F9 mov w1,#0 bl memset mov w8,#0x64 str w8,[sp,#0x408] mov w8,#0xF str w8,[sp,#0x40C] mov w0,#0 add sp,sp,#0x410 bl __security_pop_cookie ldp fp,lr,[sp],#0x10 ret ENDP ; |main|
もう少しシンプルにする
int main(void) { typedef struct { String name; } Monster; Monster seiryu = {"青竜"}; // printf(seiryu.name, seiryu.hp, seiryu.attack); return 0; }
|main| PROC |$LN3| stp fp,lr,[sp,#-0x10]! mov fp,sp bl __security_push_cookie sub sp,sp,#0x400 add x8,sp,#8 str x8,[sp] ldr x9,[sp] adrp x8,|$SG4986| add x8,x8,|$SG4986| ldr w10,[x8] str w10,[x9] ldrsh w10,[x8,#4] strh w10,[x9,#4] ldrsb w8,[x8,#6] strb w8,[x9,#6] add x0,sp,#0xF mov x2,#0x3F9 mov w1,#0 bl memset mov w0,#0 add sp,sp,#0x400 bl __security_pop_cookie ldp fp,lr,[sp],#0x10 ret
x8, x9に入れたものをw10にstr, ldr
ldrshは16ビットにstr
構造体定義だと複雑なことをするのね