objdump
ELF
フォーマットファイル(/proc/kcore
など)を理解してください。実行可能でないコンテンツ(例えば、.note
セクション)を無視して、ファイルの実行可能セクションを抽出することができます。
次の例のように、-h
フラグを使用してELF
exectuableの構造を見ることができます:
# objdump -h /proc/kcore
/proc/kcore: file format elf64-x86-64
Sections:
Idx Name Size VMA LMA File off Algn
0 note0 00001944 0000000000000000 0000000000000000 000002a8 2**0
CONTENTS, READONLY
1 .reg/0 000000d8 0000000000000000 0000000000000000 0000032c 2**2
CONTENTS
2 .reg 000000d8 0000000000000000 0000000000000000 0000032c 2**2
CONTENTS
3 load1 00800000 ffffffffff600000 0000000000000000 7fffff602000 2**12
CONTENTS, ALLOC, LOAD, CODE
(...)
udis86
からudcli
ツールは、おそらくことを示唆しているファイルの先頭から物事を分解始まりのように見えますあなたの出力は無関係な出力から始まります。実行がどこから始まっているのかはあなた次第です。
UPDATE
は、ここでの検証です。私たちはこのように、/ procの/ KCOREから最初load
部分を抽出するためにthis answerを使用します。
# dd if=/proc/kcore of=mysection bs=1 skip=$[0x7fffff602000] count=$[0x00800000]
そして今、我々はudcli
ていることを表示する場合:
# udcli mysection
0000000000000000 48 dec eax
0000000000000001 c7c060000000 mov eax, 0x60
0000000000000007 0f05 syscall
0000000000000009 c3 ret
000000000000000a cc int3
000000000000000b cc int3
我々はそれがほとんど同じに見えることを確認objdump -d /proc/kcore
の
# objdump -d /proc/kcore
/proc/kcore: file format elf64-x86-64
Disassembly of section load1:
ffffffffff600000 <load1>:
ffffffffff600000: 48 c7 c0 60 00 00 00 mov $0x60,%rax
ffffffffff600007: 0f 05 syscall
ffffffffff600009: c3 retq
ffffffffff60000a: cc int3
ffffffffff60000b: cc int3
これは素晴らしいことですが、それは魅力のように動作します。ありがとうございます。アドレスはどうですか?たとえば、使用できる仮想アドレスを取得するにはどうすればいいですか? kprobesのために? –
私は独自のモジュールを作成し、いくつかの機能のアドレスをダンプしようとしました。そして、私が 'objdump -d/proc/kcore'でこれらのアドレスを' grep 'しようとしたとき、私は本当にそれらを見つけました。あなたがそれについて考えるなら、kcoreはELF形式ですので、もちろん仮想アドレスがあるべきです、そうですか? –