当将地址指针从 cpu 寄存器移动到外部存储器时,地址值会随着明显错误的签名扩展而改变
汇编代码:
.section .data
argc: .quad 0
.section .bss
argv: .space 8 # pointer variable definition
.section .text
_start:
.global _start
movq (%rsp),%rax #arguments number
movq %rax,argc
movq 8(%rsp),%rdi #string address of first argument of command line
movq %rdi,argv #pointer variable initialization
GDB 调试器单步执行:
(gdb) p /a $rdi
$1 = 0x7fffffffe335
(gdb) p /a argv
$2 = 0xffffffffffffe335
地址 0x7ffffffffe335 的 MSB 为零 ¿ 为什么 argv 值不相等而 MSB 为 1?¿ 如何在外部存储器中实现变量指针?
提前致谢
加州马约兹