たとえば、kernen関数は次のようにsystem_call
逆コンパイルされます。
push %eax
...
call * 0xc03094c0(,%eax,,4)
これはLinuxでどのように行われますか?
たとえば、kernen関数は次のようにsystem_call
逆コンパイルされます。
push %eax
...
call * 0xc03094c0(,%eax,,4)
これはLinuxでどのように行われますか?
Linuxなので、実際には何も逆コンパイルする必要はありません。ソースを見るだけです。優れたソースブラウザはLXRです。ヘルプが必要な場合は、カーネルメーリングリストに参加してください。彼らはとてもいい人です。
私はそれがこれと同じくらい簡単かもしれないと思います:
デバッグシンボルを使用してカーネルをコンパイルするか、ディストリビューションのバージョンを使用している場合は、そのデバッグパッケージを入手します。次に、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