这是一个简单的程序:
%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
有什么想法吗?我知道如果我声明a
为dq
,它会好的,但我想了解它为什么会发生。