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

C - Searching for the syscall table in 64-bit Linux kernel using brute force

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

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

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*.