スタック情報(有効なコアに必要な他のビット)だけを含む "シンコア"を書き出すライブラリがありますが、ヒープ。これは必ずしも有用なわけではありませんが、コアは完全なコアよりはるかに小さく、時にはヒープの内容を提供したくない場合もあります。新しいLinuxカーネルでスタックメモリセグメントを見つける方法
このライブラリは、/proc/<PID>/maps
を読み、[stack]
と[stack:<tid>]
のセグメント(このプロセスにはスレッドがたくさんあります)を見つけることによって動作しました。例えば、私はこのような出力を参照してくださいね。
...
7fe848000000-7fe848021000 rw-p 00000000 00:00 0
7fe848021000-7fe84c000000 ---p 00000000 00:00 0
7fe84c1ff000-7fe84c200000 ---p 00000000 00:00 0
7fe84c200000-7fe84ca00000 rw-p 00000000 00:00 0 [stack:25672]
7fe84ca00000-7fe84cc00000 rw-p 00000000 00:00 0
7fe84cdff000-7fe84ce00000 ---p 00000000 00:00 0
7fe84ce00000-7fe84d600000 rw-p 00000000 00:00 0 [stack:25534]
7fe84d600000-7fe84d800000 rw-p 00000000 00:00 0
7fe84d9ff000-7fe84da00000 ---p 00000000 00:00 0
7fe84da00000-7fe84e200000 rw-p 00000000 00:00 0 [stack:25532]
7fe84e200000-7fe84e600000 rw-p 00000000 00:00 0
7fe84e7fd000-7fe84e7fe000 ---p 00000000 00:00 0
7fe84e7fe000-7fe84effe000 rw-p 00000000 00:00 0 [stack:25531]
7fe84effe000-7fe84efff000 ---p 00000000 00:00 0
7fe84efff000-7fe84f7ff000 rw-p 00000000 00:00 0 [stack:25530]
7fe84f7ff000-7fe84f800000 ---p 00000000 00:00 0
7fe84f800000-7fe850000000 rw-p 00000000 00:00 0 [stack:25529]
7fe850000000-7fe850021000 rw-p 00000000 00:00 0
7fe850021000-7fe854000000 ---p 00000000 00:00 0
7fe854000000-7fe854400000 rw-p 00000000 00:00 0
7fe8545ff000-7fe854600000 ---p 00000000 00:00 0
...
7fff5ce1d000-7fff5ce3e000 rw-p 00000000 00:00 0 [stack]
...
など(Ubuntuの12.04)と3.13(Ubuntuの14.04)。
しかし、より新しいカーネル(例えば、Ubuntu 16.04からの4.4)では、/proc/<PID>/maps
ファイルはスレッドごとのスタックセグメントのエントリを含まないように見えます。私はメインスタックを見るだけです[stack]
;スタックセグメントのように見えるすべてのメモリセグメントには空のパス名セクションがあります。
これは、「シンコア」が薄すぎるため、メインスレッドのスタックだけが提供されることを意味します。
新しいカーネルで/proc/<PID>/smaps
を調べようとしましたが、スレッドスタックに関連付けられているセグメントとそうでないセグメントを判別する方法が見つかりませんでした。
はまた、私はあるprocfsに(5)のマニュアルページをチェックし、それはまだ私が見てしなければならないものとして[stack:<tid>]
フォーマットを示していますが、私はそれを見ていないよ...
誰もが、この情報が入った任意のアイデアを持っています他の利用可能な情報から推論できるかどうか
おそらく、[The Stack Clash](https://blog.qualys.com/securitylabs/2017/06/19/the-stack-clash)の概念証明に役立つ情報があります。 – jww
興味深い考えですが、私が調べたものはスレッドスタックではなくメインスタック( '[stack]')を攻撃するように見えました。 – MadScientist