0

私の理解では、ELFヘッダーはプログラム実行ビュー用です。セクションはリンカーのビューです。

しかし、Linux コマンド 'readelf' は、セクション (AWX) およびヘッダー (RWE) ごとにメモリ アクセス許可フラグがあることを示しています。

本は、複数のセクションが単一のヘッダーにマージされていると言っています。リンカーが複数のセクションを単一のヘッダーにマージし、各セクションに異なるアクセス許可フラグがあるとどうなりますか??

/proc/[pid]/maps などのアクセス許可の関係は何ですか

root@declspec-desktop:/tmp# cat /proc/1951/maps
004a5000-005f8000 r-xp 00000000 08:01 511     /lib/tls/i686/cmov/libc-2.11.1.so
005f8000-005fa000 r--p 00153000 08:01 511     /lib/tls/i686/cmov/libc-2.11.1.so
005fa000-005fb000 rw-p 00155000 08:01 511     /lib/tls/i686/cmov/libc-2.11.1.so

セクションとヘッダーのアクセス許可??

これらの権限 (の) はどのように/proc/[pid]/maps決定されますか?

4

2 に答える 2

0

上記の例に対する私の理解によると、 /proc//maps のアクセス許可は、さまざまなセクションに関連付けられたアクセス許可です。たとえば、上記のスニペットでは、「r-xp」というアクセス許可を持つエントリは、.text セグメントのアドレス (コードが存在する場所) を示します。このため、確認すると、「w」アクセス許可が含まれていません実行中のバイナリに新しいコードを書くことは想定されていません。したがって、上記の例では-

004a5000-005f8000 r-xp 00000000 08:01 511     /lib/tls/i686/cmov/libc-2.11.1.so - TEXT AREA which contains executable code

005f8000-005fa000 r--p 00153000 08:01 511     /lib/tls/i686/cmov/libc-2.11.1.so - Area that contains read only variables or constants (.rodata data)

005fa000-005fb000 rw-p 00155000 08:01 511     /lib/tls/i686/cmov/libc-2.11.1.so - Area where we have variables used by program i.e. (.data)

申し訳ありませんが、他の質問をフォローできませんでした。詳しく教えてください。また、どの本について話しているのですか?

于 2012-08-17T01:25:39.597 に答える
0

私の理解では、プログラム ヘッダー (またはセグメント) には、それにマージされたセクションのアクセス許可のビット単位の OR が含まれています。したがって、あなたの例では、RW- セクションが R-- セクションと 1 つのセグメントにマージされた場合、最終的に RW- になります。これを避けるには、それらを一意のセグメントに配置します。

'.hello' セクションがある場合 (実際に可能です!)、メモリ マップ内のエントリは、それが含まれるセグメントによって異なります。パーミッションは少なくともセクションと同じくらい厳密ですが、同じセグメントに追加のパーミッションを持つ他のセクションもある場合は、より緩いかもしれません。

しかし、私には、「セクション」が「実行可能ファイル」になる方法について誰かが話している理由が明確ではありません。OPが言及しているように、セクションはリンク用であり、セグメントはロード用です。セクションのない ELF を使用しても、適切にロードして実行することは問題ありません。/proc/map 行はセグメント テーブルにのみ対応します

于 2012-11-21T17:27:04.180 に答える