我对C编程不是很熟悉,我正在尝试查找Linux 64位系统调用表的开始和结束地址。我尝试了以下链接中描述的解决方案:
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
可以避免当前的问题,或者:
做正确的事,并在%p
中使用printk()
说明符(我假设printk()理解%p
?),并将指针转换为void*
。
关于c - C-使用蛮力在64位Linux内核中搜索syscall表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29207734/