1

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

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

这是如何在linux中完成的?

4

2 回答 2

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 回答
0

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

于 2011-03-23T02:15:40.773 回答