我对 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/