所以我在汇编中编写了一个代码,我试图用GDB验证我的输出,并发现了令人费解的事情! 所以最初:
%r15 == 0 and
%rsp == 0x7fffffffe378
然后
#inst src, dest
movq %rsp, %r15
%r15 == 0x7fffffffe378 and
%rsp == 0x7fffffffe378
然后
subq $88, %rsp
%r15 == 0x7fffffffe378 and
%rsp == 0x7fffffffe318 (new value) btw (378_base{16} - 88_base{10} == 320_base{16}!
终于
subq $88, %r15
%r15 == 0x7fffffffe320 and
%rsp == 0x7fffffffe318
r15和rsp应该不一样吗?它们与8有什么不同? 发生了什么事?
解决: 我的原始代码是:
(1) movq %rsp, %r15
(2) subq $88, %rsp
(3) pushf
(4) subq $88, %r15
(5) cmpq %rsp, %r15
(6) jne notEqual
(7) popf
当然,由于第3行的pushf,代码总是会跳转到“notEqual”!
答案 0 :(得分:1)
解决:我原来的代码是:
(1) movq %rsp, %r15
(2) subq $88, %rsp
(3) pushf
(4) subq $88, %r15
(5) cmpq %rsp, %r15
(6) jne notEqual
(7) popf
当然,由于第3行的pushf,代码总是会跳转到“notEqual”!