c - 为什么相同的代码每次运行时给出不同的地址?
问题描述
每次运行代码时,我都会得到不同的值作为输出。当堆和堆栈地址固定时,为什么 malloc 返回不同的地址?我希望它从堆顶开始分配并每次返回一个固定地址。堆栈也是如此。
#include <stdio.h>
#include <stdlib.h>
int main(){
int *ptr = malloc(128);
int a;
printf("%p %p\n", ptr, &a);
return 1;
}
解决方案
堆和堆栈地址不固定。一些系统使用地址空间布局随机化来故意改变地址,这样攻击者就没有可预测的地址来进行攻击。
推荐阅读
- javascript - 在组件的动态列表中更改下拉值时强制渲染功能组件-本机反应
- architecture - Salesforce CDC 事件过滤
- c# - 如何渲染作为属性传递的组件
- python - Django NoReverseMatch 在 /topic/pk=
- javascript - 使用 503 Service Unavailable 响应异步获取
- python - 模型进行预测时烧瓶中的异步行为
- regex - 如何分别处理响应并在 microsoft bot composer 中添加多个预期的用户响应?
- kubernetes - 为什么 traefik 与路径中的 url 不匹配
- python - 尝试使用自制软件安装 python3 时出错
- java - JMeter(unix版本)分段错误似乎依赖于循环/线程