Intel x86-64汇编跳转语句问题

问题描述 投票:0回答:1

我被要求将逆向工程汇编代码转换回C代码

    jge    .L4
    movq   $76, -16(%rbp)
    movq   $87, -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语句中吗?

c assembly x86-64 intel
1个回答
1
投票

没有任何备份。 jge不是函数调用,仅是一次跳转,不会将旧位置保​​存在任何地方。

因此,这基本上只是ifelse语句。用伪代码可以写成

if (ge) {
    // .L4
    movq   -16(%rbp), %rax
    imulq  -24(%rbp), %rax
    movq   %rax, -40(%rbp)
} else {
    movq   $76, -16(%rbp)
    movq   $87, -24(%rbp)
}
// .L5
do more stuff
© www.soinside.com 2019 - 2024. All rights reserved.