在查看我的反汇编代码时,我看到了很多以下内容:
00B442E9 push 4
00B442EB push 3
00B442ED lea ecx,[ebp-24h]
00B442F0 call Foo::Bar (0B41127h)
我理解在调用之前推送参数,但lea
在这做什么?
答案 0 :(得分:12)
在Visual C ++ for x86使用的thiscall
调用约定中,this
指针在ecx
寄存器中传递。在调用成员函数之前,此lea
指令将this
指针复制到ecx
寄存器中。
您可以在Stack Overflow问题"What's the purpose of the LEA instruction?"
中阅读有关lea
指令的所有内容
答案 1 :(得分:2)
我认为这只是
的优化形式mov ecx, ebp
sub ecx, 24h