为什么 MSVC x64 Compiler 会像这样加载地址?

逆向工程 x86 x64 指针 微信
2021-06-18 23:57:01

通常,在 x86 中,要加载指向空终止字符串的指针,您将使用

MOV EDX, OFFSET ds:mystring

然而,在 x64 中,我注意到编译器是这样做的

lea rdx, OFFSET FLAT:$mystring ; 'it is ten'

这是为什么?

1个回答

如果你拆解说明

mov edx, offset ds:mystring

对比

lea rdx, offset ds:mystring

您会注意到 LEA 指令长度(以字节为单位)更小。它是一个编译器优化!

或者,它可能是编译器以更简单的方式解决指针运算的方式。

查看以获取有关两者的更多信息。