让我试着更好地解释我的问题.我知道我们可以使用其他结构来改变执行流程(包括 *** 作堆栈)……我知道如果我们更改写在堆栈上的返回地址,执行流程将更改为堆栈上写入的地址.我需要知道的是:是否存在任何不寻常的执行情况,其中下一条指令不是跟随CALL的指令?我的意思是,我希望确保它不会发生,除非出现意外情况(如内存访问冲突导致结构化异常处理程序).
我担心的是,商业应用程序总体上是否总是遵循上述模式.请注意,在这种情况下,我有一个例外的固定(重要的是要知道它们是否存在于这种情况下,对于我正在发展为M. Sc.程序的学科的研究项目).我知道,例如,编译器有时可以将RET更改为JMP(尾调用优化).我想知道这样的事情是否会改变RET之后执行的指令的顺序,主要是,如果CALL总是在RET之后执行的指令之前.
解决方法 一个“表现良好”的C程序可以由编译器转换为不遵循这种模式的程序.例如,出于混淆的原因,代码可以使用push / ret组合而不是jmp. 总结以上是内存溢出为你收集整理的RET之后的指令总是CALL之后的指令吗?全部内容,希望文章能够帮你解决RET之后的指令总是CALL之后的指令吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)