我必须解析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程序?使用
gcc
或getconf
命令检索编译配置?要做到这一点,最好的、更可移植的方法是什么?是否有必要实现回退系统(例如,如果c编译不可用,则使用getconf)? 最佳答案
你没有解释你真正想做什么,结果你的问题显得模棱两可。你什么意思
我必须解析linux内核提供的二进制数据。这些二进制数据是内核中使用的一些经典数据结构。
您需要解释从系统调用或一些内部内核结构返回的内容吗?
如果是前者,你就可以用那种垃圾的方法去编译东西并检查结果。但你需要用户空间标题。如果是后者,则需要内核的调试符号,并且无论如何都不想自己解析它。像crash(调试器)这样的工具可以为您做到这一点。