Paul C's Blog

To be funny,to grow up!

0%

1
2
3
4
v9 = *(_QWORD *)__stack_chk_guard_ptr;//防止堆栈溢出
//告诉系统,阻止调试器依附
result = ptrace(0, 0, (caddr_t)1, 0);//利用ptrace反调试

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 字节)
+----------------+
| ... (下面的栈帧内容) |
+----------------+