- UID
- 1043
- 精华
- 积分
- 11862
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
发表于 2017-9-1 23:19:04
|
显示全部楼层
可以用编程的方式实现,将CPU运行级别提升到CPL=0级别,然后执行下列汇编指令:
- mov dx,70h
- mov al,bch
- out dx,al
- mov dx,71h
- mov al,53h
- out dx,al
复制代码
至于如何在保护模式里正常调用out指令,我知道的方法有三种
1,在驱动中写代码,直接就CPL=0了。
2,调用ZwSetInformationProcess,将进程的IOPL降低为0,这样out指令就不会触发#GP了。
3,调用ZwSystemDebugControl,利用功能号15进行端口输出,但只支持XP。
如果不想手写汇编代码的话,可以考虑调用微软编译器内置宏,上述代码修改后代码如下:
- __outbyte(0x70,0xBC);
- __outbyte(0x71,0x53);
复制代码
该代码支持VC2005以上的编译器。
在驱动里还可以调用WRITE_PORT_UCHAR这个函数实现端口输出。 |
|