1 2 3 4
| v9 = *(_QWORD *)__stack_chk_guard_ptr; result = ptrace(0, 0, (caddr_t)1, 0);
|
ARM64调用约定
在ARM 64位体系结构中,函数参数通常会存储在一组特定的寄存器中,这些寄存器包括:
- 参数0(x0):用于存储第一个函数参数。
- 参数1(x1):用于存储第二个函数参数。
- 参数2(x2):用于存储第三个函数参数。
- 参数3(x3):用于存储第四个函数参数。
- 参数4-7(x4-x7):用于存储额外的函数参数。
所以,根据ARM 64位体系结构的调用约定,参数应该存储在这些寄存器中,而不是ECX和EDX。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| +----------------+ | [xsp+48h] v9 | (8 字节) +----------------+ | [xsp+50h] | (8 字节间隔) +----------------+ | [xsp+38h] v8 | (8 字节) +----------------+ | [xsp+40h] | (8 字节间隔) +----------------+ | [xsp+28h] v7 | (8 字节) +----------------+ | [xsp+30h] | (8 字节间隔) +----------------+ | [xsp+18h] v6 | (8 字节) +----------------+ | [xsp+20h] | (8 字节间隔) +----------------+ | [xsp+8h] v5 | (8 字节) +----------------+ | ... (下面的栈帧内容) | +----------------+
|