如何反编译特定的内核函数?

时间:2011-03-23 02:01:12

标签: linux-kernel decompiler

例如,kernen函数system_call反编译为:

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

这是如何在linux中完成的?

2 个答案:

答案 0 :(得分:0)

你真的不需要反编译任何东西,因为它的linux。你可以看看来源。一个好的源浏览器是LXR。如果您需要帮助,请加入内核邮件列表,他们是非常好的人。

答案 1 :(得分:0)

我认为它可以像这样简单:

使用调试符号编译内核,或者如果您正在使用发行版的版本,请获取其调试包。然后运行gdb vmlinux并输入disas <function name>,如果您想查看C函数。除了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