Intel x86-64汇编跳转语句问题
Intel x86-64 assembly jump statement question
我的任务是将汇编代码逆向工程为 C 代码
jge .L4
movq , -16(%rbp)
movq , -24(%rbp)
jmp .L5
.L4:
movq -16(%rbp), %rax
imulq -24(%rbp), %rax
movq %rax, -40(%rbp)
.L5:
do more stuff
我的问题是在完成 L4(使用排序操作的 if 语句)指令后,我是返回并执行代码以将 76 和 87 移动到内存位置还是移动到 L5?移动 76 和 87 的指令也可能在 else 语句中吗?
没有任何东西可以备份。 jge
不是函数调用,它只是一个跳转,不会在任何地方保存旧位置。
所以这基本上只是一个 if
和 else
语句。在伪代码中它可以写成
if (ge) {
// .L4
movq -16(%rbp), %rax
imulq -24(%rbp), %rax
movq %rax, -40(%rbp)
} else {
movq , -16(%rbp)
movq , -24(%rbp)
}
// .L5
do more stuff
注意if/else
块的顺序与汇编代码的顺序相反,因为当条件为真时jge
跳过紧接着的块。
我的任务是将汇编代码逆向工程为 C 代码
jge .L4
movq , -16(%rbp)
movq , -24(%rbp)
jmp .L5
.L4:
movq -16(%rbp), %rax
imulq -24(%rbp), %rax
movq %rax, -40(%rbp)
.L5:
do more stuff
我的问题是在完成 L4(使用排序操作的 if 语句)指令后,我是返回并执行代码以将 76 和 87 移动到内存位置还是移动到 L5?移动 76 和 87 的指令也可能在 else 语句中吗?
没有任何东西可以备份。 jge
不是函数调用,它只是一个跳转,不会在任何地方保存旧位置。
所以这基本上只是一个 if
和 else
语句。在伪代码中它可以写成
if (ge) {
// .L4
movq -16(%rbp), %rax
imulq -24(%rbp), %rax
movq %rax, -40(%rbp)
} else {
movq , -16(%rbp)
movq , -24(%rbp)
}
// .L5
do more stuff
注意if/else
块的顺序与汇编代码的顺序相反,因为当条件为真时jge
跳过紧接着的块。