【发布时间】:2021-01-05 00:13:08
【问题描述】:
我有以下程序集:
_start:
mov $strings, %rbx
mov $1, %r12d
print_loop:
mov %rbx, %rdi
这很简单,但下面是它在gdb 中针对这三行/指令中的每一个显示的内容:
-
mov $strings, %rbx0x00000000004000c4 ? mov $0x6000ea,%rbx # memory address of 'strings' ─── Stack ────────────────────────────────────────────────────────────────────────────────────────────────────── [0] from 0x00000000004000c4 in _start -
mov $1, %r12d0x00000000004000cb ? mov $0x1,%r12d ─── Stack ─────────────────────────────────────────────────────────────────────────────────────────────────────── [0] from 0x00000000004000cb in _start -
但是在第三条指令——标签后的第一条指令——事情看起来很奇怪:
0x00000000004000d1 ? mov %rbx,%rdi ─── Stack ─────────────────────────────────────────────────────────────────────────────────────────────────────── [0] from 0x00000000004000d1 in print_loop [1] from 0x0000000000000001 [2] from 0x00007fffffffe5aa [3] from 0x0000000000000000
这到底是什么意思,为什么会显示这样的内容?似乎堆栈仍应显示一行:
[0] from 0x00000000004000d1 in print_loop
- or -
[0] from 0x00000000004000d1 in _start
【问题讨论】: