#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
構造体定義だと複雑なことをするのね