2016-11-11 7 views
2

私は以下のパズルを解く必要があります。それは言う:パズル - どのアドレスがグローバル/ローカル/ヒープ変数に属するかを調べる

変数のアドレスを出力するUbuntu Linux Cプログラムがあります。

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

私は、プログラムが共有メモリを使用せず、少なくとも1つの変数がヒープ変数であることを知っています。これらの変数のどれがglobal/local/heapであるか。

これはすべて入手可能な情報です。このパズルを解決するためのあらゆるアイディアに本当に関心があります。

のコメントを読んだ後、編集:

私はランタイムを見れば - そこに保管機関リンク(http://lambda.uta.edu/cse5317/notes/node33.html)以来v1がヒープ変数であること、v2v3が最大のアドレスを持つため、ローカル変数であることを思わそれはスタックと静的データの間にあり、ローカル変数のように実行時にスタック上で宣言されることのないグローバル変数であり、バイナリの.dataセクションではv4です。

+0

私は間違っているかもしれませんが、私はこの質問が理にかなっているという強い感情を持っています。 –

+0

おそらく関連しています:http://stackoverflow.com/q/1966920/1679849 –

+0

リンク@ squeamishossifrageありがとう。私は私の質問を編集しました。 – WillLur

答えて

0

/proc/PID/mapsの内容を分析してみてください(proc(5)を参照)。私はこれがアドレスが属するメモリ領域を決定する最も正しい方法だと考えています。

関連する問題