c - 覆盖函数返回地址时在 macOS 上发生意外崩溃
问题描述
我正在编写一个程序,它将许多参数作为输入参数。我决定将通过寄存器传递的所有这些复制到堆栈中。为了使迭代更加一致,我决定将函数返回地址保留在当时未使用的寄存器之一中。每当我覆盖返回地址时,程序就崩溃了。您可以在下面找到说明问题的一小段代码。原因是什么?退货地址是否受到任何保护?
section .text
global _function
_function:
mov rdx, rsp ; save return address
mov rsp, 2 ; override return address, crashes here (segfault)
mov rsp, rdx ; restore address
ret
C程序:
#include <stdio.h>
extern int function (int n, ...);
int main() {
printf("%d", function(7, 1, 1, 1, 1, 1, 1, 2));
}
解决方案
推荐阅读
- python - 将所有XML文件转换为python文件夹中的JSON文件?
- android - 辅助功能服务单击自定义视图不起作用(performClick 未覆盖)
- php - 使用 Amazon RDS MySQL 数据库托管在 Heroku 上的 Laravel 应用程序导致连接超时
- angular - 使用 PrimNG TurboTable 和 Angular 6 获取索引
- python - django模型字段的不同setter和getter
- php - PHP在循环内提交表单后检索先前的值
- c - 通过 2D 矩阵 Bubble-Sort C
- dependency-injection - 尝试在不使用某个食谱的依赖项的情况下运行 Chef-client
- ngrx - @ngrx 动作被无限调用并带有效果
- google-apps-script - 从gs中的函数返回值到html