[求助]内核模块交叉编译问题

[复制链接]
查看11 | 回复8 | 2021-1-27 06:27:39 | 显示全部楼层 |阅读模式
求助各位一个问题:
我从网上找了一个截获系统调用的程序,编译成ko文件,在PC机上运行良好,现在要将这个内核模块移植到mips平台
使用mips平台的工具链编译时出现:
{standardinput}:168:Error:unrecognizedopcode`sidtidtr'
程序中所有和汇编有关的位置都会报相似的错误
程序中的汇编为:
asmvolatile("movl%%cr0,%%eax"
:"=a"(cr0)
);
ret=cr0;

cr0&=0xfffeffff;
asmvolatile("movl%%eax,%%cr0"
:
:"a"(cr0)
);
asmvolatile("movl%%eax,%%cr0"
:
:"a"(val)
);
asm("sidt%0":"=m"(idtr));
请问各位,这类情况如何解决呢?
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:27:39 | 显示全部楼层
不太理解,在PC下可以使用的代码使用的汇编应该是X86的吧,移植到MIPS,汇编部分是否需要修改成对应的MIPS汇编代码。
回复

使用道具 举报

千问 | 2021-1-27 06:27:39 | 显示全部楼层
汇编代码是不可移植的。
既然有汇编代码,能在pc机上运行,那就不可能在mips上运行了。
所有x86汇编都要改成mips汇编,c代码里面和汇编有关的部分可能也要修改,而且很可能还有其他的问题,工作量还是很大的。
最好还是能直接找到mips的源代码。
回复

使用道具 举报

千问 | 2021-1-27 06:27:39 | 显示全部楼层
楼主贴的代码是操作cr0的。我刚查了intel手册,这个寄存器有很多控制位,控制了paging、cache、保护模式、内存对齐等很多设置。这些都不是简单的改改汇编代码就能移植的。
除非对x86和mips的体系结构了如指掌,否则基本不太可能自己改写。
回复

使用道具 举报

千问 | 2021-1-27 06:27:39 | 显示全部楼层
驱动程序中貌似不会用到体系结构相关的代码吧?要用也都是调用内核中的,也就是不是直接用。sidt应该是设置中断描述符表,idtr是中断描述符表寄存器,存放的是中断描述符表的地址。不清楚MIPS中关于中断时怎么管理和组织的~~建议楼主首先看看能不能找到已经移植到了MIPS结构体系的。
回复

使用道具 举报

千问 | 2021-1-27 06:27:39 | 显示全部楼层
十分感谢各位,各位说的很有道理。但是我想在运行于mips平台的Linux上做系统调用的截获,这个好像还没有相关的代码,不知各位有没有合适的驱动?
回复

使用道具 举报

千问 | 2021-1-27 06:27:39 | 显示全部楼层
参考:实现Linux系统调用劫持,http://blog.chinaunix.net/u3/103654/showart_2044359.html
回复

使用道具 举报

千问 | 2021-1-27 06:27:39 | 显示全部楼层
汇编不是很好移植的,依赖于硬件的体系结构。要仔细弄懂对应的处理器指令才行
回复

使用道具 举报

千问 | 2021-1-27 06:27:39 | 显示全部楼层
目前我搜索到的系统调用劫持都是在x86下实现的,mips上如何劫持一直没有找到。并且我反汇编内核甚至连system_call也找不到。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行