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位的状态并不重要。