2016-11-11 43 views
2

我有以下难题要解决,我不知道我该怎么做。它说:拼图 - 确定哪些地址属于全局/本地/堆变量

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

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

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

这些都是可用的信息,我真的很感兴趣解决这个难题的任何想法。阅读评论后

编辑:

如果我看一下运行时 - 存储组织链接(http://lambda.uta.edu/cse5317/notes/node33.html)有它很可能是v2v3是具有最大的地址,v1是因为堆变量的局部变量它位于堆栈和静态数据之间,并且是全局变量,它不会在运行时像本地机器一样在堆栈中声明,而是在二进制文件的.data节中声明。

+0

我可能是错的,但我有强烈的感觉,这个问题没有任何意义。 –

+0

可能相关:http://stackoverflow.com/q/1966920/1679849 –

+0

感谢链接@squeamishossifrage。我编辑了我的问题。 – WillLur

回答

0

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