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

发布于 2024-10-26 14:35:42 字数 152 浏览 1 评论 0原文

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

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

How's this did in linux?

For example ,kernen function system_call decompiles to:

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

How's this done in linux?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

放手` 2024-11-02 14:35:42

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

使用调试符号编译内核,或者如果您使用发行版的版本,则获取其调试包。然后运行 ​​gdb vmlinux 并输入 disas 如果您想查看 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

I think it could be as simple as this:

Compile your kernel with debugging symbols, or if you're using your distro's version, grab its debug package. Then run gdb vmlinux and type disas <function name> if you want to look at a C function. Except that system_call isn't a C function, so GDB won't look it up the same way. But you can still disassemble:

(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
明媚如初 2024-11-02 14:35:42

因为它是linux,所以你实际上不需要反编译任何东西。你直接看源码就可以了。一个好的源代码浏览器是 LXR。如果您需要帮助,请加入内核邮件列表,他们都是非常好的人。

You wouldn't really need to decompile anything since its linux. You can just look at the source. A good source browser is LXR. Join the kernel mailing list if you need help, they are very nice people.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文