例如,kernen 函数system_call
反编译为:
push %eax
...
call * 0xc03094c0(,%eax,,4)
这是如何在linux中完成的?
例如,kernen 函数system_call
反编译为:
push %eax
...
call * 0xc03094c0(,%eax,,4)
这是如何在linux中完成的?
我认为它可以像这样简单:
使用调试符号编译内核,或者如果您使用的是发行版的版本,请获取其调试包。如果要查看 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
自从它的 linux 以来,你真的不需要反编译任何东西。你可以只看源码。一个好的源浏览器是LXR。如果您需要帮助,请加入内核邮件列表,他们是非常好的人。