2009-05-12 11 views
14

malloc()とfree()は割り当てられたアドレスとそのサイズを格納します(Linux GCC)?いくつかの実装では、実際に割り当てられたメモリの前にどこかに格納されていますが、テストで確認できませんでした。malloc()/ free()は割り当てられたサイズとアドレスを格納しますか?

バックグラウンドは、誰かがこのために別のヒントを持っている可能性があります。 他のプロセスの文字列の現在の値を判断するために、プロセスのヒープメモリを分析することを少し試しています。 プロセス・ヒープ・メモリーにアクセスして処理しても問題ありません。ただし、文字列の値が変更され、プロセスが毎回メモリの新しい部分を割り当てるため、文字列のアドレスが変更されます。 文字列は固定された書式を持っているため、まだ簡単に見つけることができますが、いくつかの変更を加えれば、古いバージョンの文字列はヒープメモリに残ります(おそらく解放されますが、再利用/上書きはできません)。どの文字列が現在のものであるかを伝えます。

メモリにある文字列がmalloc/freeが知っているアドレスと比較することによってまだ使用されているかどうかを調べたい、現在のものを探したい。

CIAO、 エルマー

+0

以下の私の答えに加えて、これはちょっと役立つかもしれません。http://www.linuxforums.org/forum/linux-programming-scripting/52375-reading-memory-other-processes.html –

+0

あなたはまた、カーネル/ glibcのメモリマッピング部分の周り –

答えて

12

のmalloc /空きメモリ領域のサイズを保存することができる方法はたくさんあります。たとえば、mallocによって返された領域の直前に格納されている可能性があります。あるいは、別の場所でルックアップテーブルに格納することもできます。または、暗黙的に格納される可能性があります。特定のサイズの割り当て用に予約されている領域もあります。

Linux(glibc)のCライブラリがどのようにこれを行うのかを調べるには、http://ftp.gnu.org/gnu/glibc/からソースコードを入手し、malloc/malloc.cファイルを見てください。上部にはいくつかの文書があり、Doug LeaのA Memory Allocatorを参照しています。

+1

素敵で簡潔な、私はエイデンの奇妙な答えに苦労しました。 – RandomNickName42

1

これはもちろん、標準ライブラリの実装に従います。だからあなたのベスト・ベットは、おそらくライブラリのソースを掘り下げて(glibcがLinuxのデフォルトです)、あなたがそれを理解できるかどうかを見てください。それはおそらく些細なことではないでしょう。

関連する問題