C++ 指令覆盖以前的结果

C++ 指令覆盖以前的结果,c++,reverse-engineering,disassembly,C++,Reverse Engineering,Disassembly,我目前正在分析一个二进制文件,遇到以下三条指令: movzx ecx, byte [rax+r9] movzx edx, byte [rbx+r9] lea ecx, [rcx+rdx] 我很清楚这些说明的含义,但是第一个和第三个组合没有任何意义。第一个movzx将[rax+r9]处的值复制到ecx中,然后ecx再次被lea指令覆盖?为什么我们需要第一个movzx 我想我只是遗漏了一些东西,这是一个令人讨厌的编译器技巧,因此我感谢任何帮助。ecx和rcx共享相同的低位32位,因

我目前正在分析一个二进制文件,遇到以下三条指令:

movzx   ecx, byte [rax+r9]
movzx   edx, byte [rbx+r9]
lea     ecx, [rcx+rdx]
我很清楚这些说明的含义,但是第一个和第三个组合没有任何意义。第一个movzx将[rax+r9]处的值复制到ecx中,然后ecx再次被lea指令覆盖?为什么我们需要第一个movzx


我想我只是遗漏了一些东西,这是一个令人讨厌的编译器技巧,因此我感谢任何帮助。

ecx
rcx
共享相同的低位32位,因此第一条指令为第三条指令设置了一个参数。没有看到这一点花费了我几个小时-非常感谢!为了清楚起见,与直觉相反,移动到
ecx
设置
rcx
的所有位,因此执行代码之前
rcx
的上32位的状态并不重要。
ecx
rcx
共享相同的下32位,因此,第一个指令为第三个指令设置了一个论点。没有看到这一点花费了我几个小时——非常感谢!为了清楚起见,与直觉相反,移动到
ecx
设置
rcx
的所有位,因此执行代码之前
rcx
的上32位的状态并不重要。