【发布时间】:2019-10-09 01:56:13
【问题描述】:
在以下代码中:
!6 movl $5, %ebx
寄存器显示的值是:
rbx 0x0000000000000005
ebx 在 64 位架构上是否会自动转换为 rdx?在该架构上写ebx 是“错误”还是或多或少是rdx 的别名?两者之间有什么显着差异吗?
例如,对我来说,它们在 gdb 中都产生相同的结果:
>>> p $rbx
$3 = 5
>>> p $rax
$4 = 1
>>> p $eax
$5 = 1
>>> p $ebx
$6 = 5
【问题讨论】:
-
我更新了 Employed Russian 的回答;它遗漏了写 EBX 确实 零扩展到完整 RBX 的重要细节,所以是的,
mov $5, %ebx是编译器使用的,而不是mov $5, %rbx用于 0..2^32 - 1 的值
标签: assembly gdb x86-64 cpu-registers