C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了RET之后的指令总是CALL之后的指令吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
一个表现良好的C程序中,return语句(RET)是否总是返回CALL语句后面的指令?我知道这是认设置,但我想检查是否有人知道或记住这个标准不适用的情况的真实例子(常见的编译器优化或其他东西……).有人告诉我,它可能发生在一个@L_673_3@指针(@L_673_3@指针将值放在堆栈上,而不是CALL …我搜索它但我没有看到任何解释).

我试着更好地解释我的问题.我知道我们可以使用其他结构来改变执行流程(包括操作堆栈)……我知道如果我们更改写在堆栈上的返回地址,执行流程将更改为堆栈上写入的地址.我需要知道的是:是否存在任何不寻常的执行情况,其中下一条指令不是跟随CALL的指令?我的意思是,我希望确保它不会发生,除非出现意外情况(如内存访问冲突导致结构化异常处理程序).

我担心的是,商业应用程序总体上是否总是遵循上述模式.请注意,在这种情况下,我有一个例外的固定(重要的是要知道它们是否存在于这种情况下,对于我正在发展为m. Sc.程序的学科的研究项目).我知道,例如,编译器有时可以将RET更改为JMP(尾调用优化).我想知道这样的事情是否会改变RET之@L_696_12@的指令的顺序,主要是,如果CALL总是在RET之@L_696_12@的指令之前.

解决方法

一个“表现良好”的C程序可以由编译器转换为不遵循这种模式的程序.例如,出于混淆的原因,代码可以使用push / ret组合而不是jmp.

大佬总结

以上是大佬教程为你收集整理的RET之后的指令总是CALL之后的指令吗?全部内容,希望文章能够帮你解决RET之后的指令总是CALL之后的指令吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。