【问题标题】:Puzzle - Determine which of the addresses belong to global/local/heap variables谜题 - 确定哪些地址属于全局/局部/堆变量
【发布时间】:2017-03-26 04:57:06
【问题描述】:

我有以下难题要解决,但我不确定我该怎么做。它说:

有一个 Ubuntu Linux C 程序可以输出变量的地址。

v1: 0xa156128
v2: 0xff97410c
v3: 0xf750e34b
v4: 0x804a0c0

我知道该程序不使用共享内存,并且这些变量中至少有一个是堆变量。其中哪个变量是global / local / heap

这就是所有可用的信息,我对解决这个难题的任何想法都很感兴趣。

阅读cmets后编辑:

如果我查看运行时 - 存储组织链接 (http://lambda.uta.edu/cse5317/notes/node33.html),似乎 v2v3 是具有最大地址的局部变量,v1 是堆变量,因为它介于堆栈和静态数据,v4 是全局变量,它不像本地变量那样在运行时在堆栈上声明,而是在二进制文件的 .data 部分中声明。

【问题讨论】:

  • 我可能是错的,但我有一种强烈的感觉,这个问题毫无意义。
  • 感谢@squeamishossifrage 的链接。我编辑了我的问题。

标签: c hex memory-address


【解决方案1】:

尝试分析 /proc/PID/maps 的内容(参见 proc(5))。我相信这是确定地址所属内存区域的最正确方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-01
    • 2021-09-14
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    相关资源
    最近更新 更多