为什么__inbyte会导致我的软件崩溃?

3

我发现了这个函数,想知道它是做什么的,所以写了下面的代码,在mingw32编译并在Wine和Windows上执行,但程序在两者上都崩溃了。

#include <stdio.h>
#include <stdlib.h>
#include <intrin.h>
int main()
{
 unsigned char j = __inbyte(0xABC); // example value
 printf("%i\n", j);
 return 0;
}

我在MSDN上查阅了这个内容,但是我发现描述过于模糊。 http://msdn.microsoft.com/en-us/library/732t2y37%28v=vs.100%29.aspx unsigned char __inbyte(unsigned short Port);
该函数会生成in指令,并从由端口Port指定的端口中读取一个字节并返回。
1个回答

6

IN指令尝试直接从CPU的I/O端口读取一个字节。这是一项特权操作,除非你处于超级用户模式(例如,在内核中),否则几乎总是会失败。

除非你打算编写内核驱动程序,否则可以安全地忘记你曾经看到过这个指令。


即使你在编写驱动程序,通常也有操作系统例程以独立于体系结构的方式执行此类操作。 - Michael Burr
正确的 - 除了一些已经拥有驱动程序的平台设备外,你可能需要编写驱动程序的大多数设备都通过PCI / PCIe / USB访问,而不是直接的I/O端口。 - user149341

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接