【问题标题】:Why does __inbyte crash my software?为什么 __inbyte 会使我的软件崩溃?
【发布时间】:2013-04-09 20:04:41
【问题描述】:

遇到了这个函数,想知道它是做什么的,所以写了以下代码,用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指定的端口读取的一个字节。

【问题讨论】:

    标签: c++ intrinsics


    【解决方案1】:

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

    除非您打算编写内核驱动程序,否则您可以放心地忘记您曾经看到过这个内在函数。

    【讨论】:

    • 即使您正在编写驱动程序,通常也有操作系统例程以独立于架构的方式执行此类操作。
    • 对——除了一些已经有驱动程序的平台设备之外,您可能会为其编写驱动程序的大多数设备都是通过 PCI/PCIe/USB 访问的,而不是直接 I/O 端口。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 2012-04-20
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    相关资源
    最近更新 更多