程序集:呼叫后继续



我正在查看以下代码:

cmp edx edx
jle loc_40234
call some_func
add eax, eax

我想理解的是我什至如何到达第四行,因为它不是 loc(无法跳转到(,并且它紧跟在函数调用之后。我的意思是,呼叫就像跳跃一样,对吧?

编辑:好的,我理解基本思想。我应该指定:这段代码是some_func的一部分(这是我收集的一个循环(。

>cmp edx,edx会将edx与自身进行比较,因此它将始终是"相等的",并且始终采用jle

call将无法从此代码路径访问(如果它执行,其他一些代码必须直接跳转到call指令或jle指令,其标志已设置为评估为"更大"条件(。

call在技术上与jmp相似,但有小的额外扭曲。它将推送到下一条指令的堆栈地址(add(,所以如果some_func的代码会以某种方式使用堆栈中的这个地址跳到那里(最常见的函数以ret指令结尾,它正是这样做的,弹出堆栈值的顶部并跳转到它,这是返回地址,如果堆栈内容没有损坏并且堆栈指针是正确的(, 将达到add

当然,如果不检查some_func代码就不可能说它是否会返回到那个add.

最新更新