通常,在 x86 中,要加载指向空终止字符串的指针,您将使用
MOV EDX, OFFSET ds:mystring
然而,在 x64 中,我注意到编译器是这样做的
lea rdx, OFFSET FLAT:$mystring ; 'it is ten'
这是为什么?
通常,在 x86 中,要加载指向空终止字符串的指针,您将使用
MOV EDX, OFFSET ds:mystring
然而,在 x64 中,我注意到编译器是这样做的
lea rdx, OFFSET FLAT:$mystring ; 'it is ten'
这是为什么?
如果你拆解说明
mov edx, offset ds:mystring
对比
lea rdx, offset ds:mystring
您会注意到 LEA 指令长度(以字节为单位)更小。它是一个编译器优化!
或者,它可能是编译器以更简单的方式解决指针运算的方式。
查看此以获取有关两者的更多信息。