在反汇编可执行文件时,我多次注意到编译器通常会跳转到其他无条件跳转,而不是简单地跳转到最终目的地。例如:

请注意,jmp 0x100001634它会写入jmp 0x100001681并跳过中间的其他两个跳转。不这样做有什么特别的原因吗?
在反汇编可执行文件时,我多次注意到编译器通常会跳转到其他无条件跳转,而不是简单地跳转到最终目的地。例如:

请注意,jmp 0x100001634它会写入jmp 0x100001681并跳过中间的其他两个跳转。不这样做有什么特别的原因吗?
除了其他人已经提到的有关编译器优化的内容之外,还有另一种可能性。有时,恶意软件可以通过使用大量不透明谓词(在本例中为无条件跳转)来执行控制流混淆。
事实上,如果您在恶意软件上使用 pintool (DBI) 执行指令跟踪,有时您会观察到大量按顺序执行的 jmp 指令。您可以在使用多态引擎的恶意软件中观察这些类型的子程序。它可以帮助阻止逆向工程,因为它在单步执行代码时会改变控制流。