1

たとえば、kernen関数は次のようにsystem_call逆コンパイルされます。

push %eax
...
call * 0xc03094c0(,%eax,,4)

これはLinuxでどのように行われますか?

4

2 に答える 2

0

Linuxなので、実際には何も逆コンパイルする必要はありません。ソースを見るだけです。優れたソースブラウザはLXRです。ヘルプが必要な場合は、カーネルメーリングリストに参加してください。彼らはとてもいい人です。

于 2011-03-23T02:15:40.773 に答える
0

私はそれがこれと同じくらい簡単かもしれないと思います:

デバッグシンボルを使用してカーネルをコンパイルするか、ディストリビューションのバージョンを使用している場合は、そのデバッグパッケージを入手します。次に、C関数を確認する場合は、実行gdb vmlinuxして入力disas <function name>します。system_callそれがC関数ではないことを除いて、GDBはそれを同じ方法で検索しません。ただし、分解することはできます。

(gdb) info addr system_call
Symbol "system_call" is at 0xc0403964 in a file compiled without debugging.
(gdb) x/4i 0xc0403964
   0xc0403964:  push   %eax
   0xc0403965:  cld    
   0xc0403966:  push   %fs
   0xc0403968:  push   %es
于 2011-03-23T08:13:06.767 に答える