1

这是一个简单的程序:

%include 'utils/system.inc'

section .data
  first:  db 'First is bigger', 0xA,0
  second: db 'Second is bigger', 0xA,0
  a:      db 18
  b:      db 20
section .text
global start
start:
 mov rax, [a wrt rip]
 mov rbx, [b wrt rip]
 cmp rax, rbx
 jle else                        
 mov rsi, qword first
 mov rdx, 0x10
 jmp end
else:
 mov rsi, qword second
 mov rdx, 0x11
end:
 xor rax, rax
 xor rbx, rbx
 mov rax, 0x2000004
 mov rdi, stdout
 syscall

 xor rdi, rdi
 mov rax, 0x2000001
 syscall 

问题是变量a包含的值与 18 不同。这lldb向我展示了:

(lldb) pa
(void *) $0 = 0x0000000000001412
(lldb) pb
(void *) $1 = 0x0000000000000014
(lldb) p --format decimal a

有什么想法吗?我知道如果我声明adq,它会好的,但我想了解它为什么会发生。

4

0 回答 0