windows - 从跳转返回主
问题描述
_main:
.
..
...
call label_1
operation_a
...
..
.
"call"将label_1 的地址推入堆栈,并执行它的代码。为了继续执行“operation_a”等,“label_1”必须包含一个“ret”,它弹出label_1的地址并继续执行“operation_a”等等。
在我的问题中,我有
_main:
.
..
...
je label_1
operation_a
...
..
.
在这种情况下,“je”跳转到 label_1,因此我不能将“ret”添加到“label_1”中的指令集,然后......
我怎样才能从那个跳转回到主代码?是否存在“调用”标签的条件跳转?
有朋友提到我可以在label_1的末尾添加一个“jmp aux_label”,然后在main函数中添加那个“aux_label”,但是如果我碰巧做了很多“je”,我最终会创建很多标签。
解决方案
没有条件调用之类的东西。但是您可以将调用与条件跳转结合起来:
...
jne no_call
call label_1
no_call:
operation_a
...
这样,如果不满足相等条件,则跳过该call
命令并且不会发生调用。如果满足相等条件,JNE
什么都不做,你做 a call
,然后最终ret
从它到operation_a
。
no_call
不是操作,而是标签。所以地址no_call
和地址operation_a
是一回事,以防不清楚。
if()
“JNE 到几行以下的标签”技巧与汇编中的语句一样接近。
在汇编代码中创建许多标签是生活中的不幸事实。:)
推荐阅读
- laravel - 无论如何我可以计算公共文件夹中特定文件的访问者吗?
- r - 如何在latex rmarkdown pdf中将数据框列行显示为不同的点?
- matplotlib - 如何删除散点图中点之间的空格
- javascript - Firestore:FirebaseError:缺少权限或权限不足
- python - Google-API 和 python 返回属性错误或内存地址
- php - 注意:试图获取非对象的属性“sys_id”
- python - Django - “author_id”列中的空值违反非空约束(图像上传)
- python - 计算条件下的重复次数
- python - 在熊猫数据框中根据日期组合行
- python-3.x - 在 python 中使用 PIPE 运行多个命令