为啥 __inbyte 会使我的软件崩溃?

Posted

技术标签:

【中文标题】为啥 __inbyte 会使我的软件崩溃?【英文标题】: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指定的端口读取的一个字节。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

即使您正在编写驱动程序,通常也有操作系统例程以独立于架构的方式执行此类操作。 对——除了一些已经有驱动程序的平台设备之外,您可能会为其编写驱动程序的大多数设备都是通过 PCI/PCIe/USB 访问的,而不是直接 I/O 端口。

以上是关于为啥 __inbyte 会使我的软件崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 unwind segue 会使我的应用程序崩溃?

为啥 ntdll.dll 会使我的 c++ 可执行文件崩溃?

为啥大型本地数组会使我的程序崩溃,而全局数组却不会? [复制]

为啥用 numpy 计算 2×2 矩阵的特征向量会使我的 Python 会话崩溃?

为啥这个 angularjs ui-router 代码会使我的浏览器崩溃?

为啥在 C 中使用错误的格式说明符会使我的程序在 Windows 7 上崩溃?