首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不理解这种行为:更改指针所指向的值会导致指针值本身在C中更改?

不理解这种行为:更改指针所指向的值会导致指针值本身在C中更改?
EN

Stack Overflow用户
提问于 2022-11-02 06:46:00
回答 1查看 48关注 0票数 0

我的目标是编写一个类似金丝雀的机制来检测字符缓冲区中的溢出。我想要做的是获取缓冲区末尾的地址,并在那里放置一个金丝雀,这样写过去的缓冲区就会导致金丝雀值的改变。经过一些调试后,我发现一个问题是,当我向地址写入值时,地址本身的值会意外地发生变化。有人能解释一下为什么会发生这种事吗?

示例:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

int main(int argc, char *argv[])
{
  srand(time(NULL));
  int secret = rand();
  char buf[8];
  char *aft_buf = buf + 8;
  printf("aft buf address = %p\n", aft_buf);
  int *canary = (int *) aft_buf;
  *canary = secret;
  printf("canary address = %p\n", canary); // this value becomes different from aft_buf. why?
  
  return 0;
}

我正在用gcc -fno-stack-protector编译,当我用-O2标志编译时,我不会遇到这个问题。

EN

回答 1

Stack Overflow用户

发布于 2022-11-02 06:56:22

你需要为金丝雀留出空间:

代码语言:javascript
复制
char buf[8+sizeof(int)];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74285294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档