1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | stp x20, x19, [sp,
stp x29, x30, [sp,
add x29, sp,
sub sp, sp,
mov x0, x2
adrp x8,
ldr x8, [x8,
ldr x8, [x8] ; ___stack_chk_guard
stur x8, [x29, var_18]
bl imp___stubs__objc_retain ; objc_retain
bl imp___stubs__objc_retainAutorelease ;
mov x20, x0
adrp x8,
ldr x1, [x8,
bl imp___stubs__objc_msgSend ; objc_msgSend
mov x19, x0
mov x0, x20
bl imp___stubs__objc_release ; objc_release
mov x0, x19
bl imp___stubs__strlen ; strlen
mov x20, sp
add w8, w0,
add x8, x8,
and x8, x8,
mov x9, sp
sub x1, x9, x8
mov sp, x1
cmp w0,
b.lt loc_106521c44
mov sp, x20 ; argument "instance" for method
sub sp, x29,
ldp x29, x30, [sp,
ldp x20, x19, [sp],
b imp___stubs__objc_autoreleaseReturnValue ;
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
mov x20, sp
add w8, w0,
add x8, x8,
and x8, x8,
mov x9, sp
sub x1, x9, x8
mov sp, x1
cmp w0,
b.lt loc_106521c44
mov sp, x20 ; argument "instance" for method
sub sp, x29,
ldp x29, x30, [sp,
ldp x20, x19, [sp],
b imp___stubs__objc_autoreleaseReturnValue ;
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
不能理解的 只是这一段
x20 = sp
w8 = w0 + 1
x8 = x8 + 15
x8 = x8 &
x9 = sp
x1 = x9 - x8
sp = x1
x1 = sp - (w0 + 16 )&
if (w0 < 1 )
{
loc_106521c44
}
sp = x20
上面是我的翻译过程 但是 如果 翻译成c语言。首先这个sp 用c语言怎么取。还是我翻译错了。这个sp是不是固定的。
|