Assembly 反汇编代码中两个零值的比较-不必要?
已反汇编x86-64可执行文件后,反汇编程序将显示部分可执行文件的以下说明Assembly 反汇编代码中两个零值的比较-不必要?,assembly,x86-64,disassembly,Assembly,X86 64,Disassembly,已反汇编x86-64可执行文件后,反汇编程序将显示部分可执行文件的以下说明 xor r14d, r14d ; zero r14d xor ecx, ecx ; zero ecx mov qword [ss:rbp+var_40], rcx ; move rcx (now zeroed) into var_40 ; … additional code that doesn't make any ch
xor r14d, r14d ; zero r14d
xor ecx, ecx ; zero ecx
mov qword [ss:rbp+var_40], rcx ; move rcx (now zeroed) into var_40
; … additional code that doesn't make any changes to var_40 or r14d …
mov esi, r14d ; move r14d into esi
mov rcx, qword [ss:rbp+var_40] ; move var_40 back into rcx
cmp rsi, rcx ; compare rsi and rcx, both zero?
似乎正在比较
rsi
和rcx
,尽管可以保证它们都为零。然后,代码在比较之后分支。我的想法正确吗?如果正确,为什么会发生这种情况?您确定rcx的上32b为零吗?可能是为了强制使用一些标志?可能代码稍后会循环,此时值可能已经更改。@Jester这是一个很好的建议,现在就开始研究。谢谢@风向标这意味着顶部也是零,或者你忘记了隐式的零扩展了吗?你确定rcx的上32b是零吗?也许是为了强制一些标志?也许代码稍后会循环,到那时值可能已经改变了。@Jester一个很好的建议,现在开始研究这个问题。谢谢@风向标,这意味着顶部也是零,还是你忘记了隐式的零延伸?