为啥 __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 会使我的软件崩溃?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 ntdll.dll 会使我的 c++ 可执行文件崩溃?
为啥大型本地数组会使我的程序崩溃,而全局数组却不会? [复制]
为啥用 numpy 计算 2×2 矩阵的特征向量会使我的 Python 会话崩溃?