C - 使用暴力搜索 64 位 Linux 内核中的系统调用表

标签 c linux-kernel 64-bit system-calls brute-force

我对 C 编程不太熟悉,我正在尝试查找 Linux 64 位中系统调用表的起始地址和结束地址。我尝试了下面链接中描述的解决方案: https://memset.wordpress.com/2011/03/18/syscall-hijacking-dynamically-obtain-syscall-table-address-kernel-2-6-x-2/

但它是为 32 位内核设计的,因此存在一些不兼容性,会导致错误并停止 makefile 的 make。我目前收到此错误:

warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
         printk("Syscall table found at %x\n", (unsigned ) syscall_table);
                                               ^ cc1: some warnings being treated as errors

这可能是因为 64 位内核中的起始地址和结束地址与为 32 位指定的起始地址和结束地址不同,但我不太确定。

最佳答案

这有什么令人困惑的?该警告非常清楚地说明了问题:您正在将 64 位指针转换为 32 位 unsigned
您可以:
改为转换为 unsigned long long,这将解决眼前的问题,或者:

做正确的事情,并在 printk() 中使用 %p 说明符(我假设 printk() 理解 %p?),并且将指针强制转换为 void*

关于C - 使用暴力搜索 64 位 Linux 内核中的系统调用表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29207734/

相关文章:

c++ - 你如何制作linux GUI?

使用getopt的C程序无法解析url参数

linux-kernel - 什么是pagecache页面

c - 通过 C 中的 Netlink 从内核到用户空间的多播

.net - 如何在Wine 64位前缀中安装.NET 4?

c - 将字符串分配给 NvAPI_UnicodeString

C 不读取整个 BMP 文件 - fopen

linux - 更改 SCHED_OTHER 调度程序的时间量

c - RET 时出现段错误

.net - 老化的 32 位 OCX 控件无法在 .NET 中加载