这很奇怪。因此,在下面的代码中,当我对pushq%r15(第9行)及其对应的popq%r15(第23行)进行注释时,代码可以正常工作,否则会产生分段错误。
_initialize函数是一个c函数,可以在里面执行一些malloc。当没有push / pop%r15时,它可以正常工作。
有关可能发生的事情的任何想法吗?
1 .globl _main
2 _main:
3 pushq %rbp
4 movq %rsp, %rbp
5
6 pushq %r13
7 pushq %r14
8 pushq %r12
9 pushq %r15
10 pushq %rbx
11 subq $0, %rsp
12
13
14 movq $16384, %rdi
15 movq $16384, %rsi
16 callq _initialize
17
18
19 movq $0, %rax
20 addq $0, %rsp
21
22 popq %rbx
23 popq %r15
24 popq %r12
25 popq %r14
26 popq %r13
27 popq %rbp
28 retq