我必须解析linux内核提供的二进制数据。这些二进制数据是内核中使用的一些经典数据结构。
例如,我需要解析一个结构,其中第一个值是一个timeval结构。在内核源代码中,它定义为:

struct timeval {
        __kernel_time_t         tv_sec;         /* seconds */
        __kernel_suseconds_t    tv_usec;        /* microseconds */
};

所以我必须知道__kernel_time_t__kernel_suseconds_t的大小。
__kernel_time_t定义为:typedef long __kernel_time_t,它是一个长的。
因为我必须用unpack()在php中解析这些二进制结构(以字符串形式)(是的,我知道我有一些奇怪的想法),所以我必须检索内核整数大小的大小。
我怎样才能做到这一点?执行sizeofs的嵌入式jit编译的c程序?使用gccgetconf命令检索编译配置?要做到这一点,最好的、更可移植的方法是什么?是否有必要实现回退系统(例如,如果c编译不可用,则使用getconf)?

最佳答案

你没有解释你真正想做什么,结果你的问题显得模棱两可。你什么意思
我必须解析linux内核提供的二进制数据。这些二进制数据是内核中使用的一些经典数据结构。
您需要解释从系统调用或一些内部内核结构返回的内容吗?
如果是前者,你就可以用那种垃圾的方法去编译东西并检查结果。但你需要用户空间标题。如果是后者,则需要内核的调试符号,并且无论如何都不想自己解析它。像crash(调试器)这样的工具可以为您做到这一点。

10-07 19:17
查看更多