Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 内联汇编,SEHException_C#_Windows_Assembly_X86 - Fatal编程技术网

C# 内联汇编,SEHException

C# 内联汇编,SEHException,c#,windows,assembly,x86,C#,Windows,Assembly,X86,我在cpp中创建了一个.dll文件,用于访问I/O端口并对其进行写入。为此,我从c#console应用程序调用此.dll,但在尝试运行它时,出现“SEHException was unhandled”异常。你知道吗 这是c#: 这是cpp(创建.dll): 您不能直接从Windows中的用户模式应用程序访问任意I/O端口。您需要使用一个特殊的内核模式驱动程序来实现这一点。不需要内联汇编,只需使用\u outbyte指令:另外,如果知道是哪个部分引发了异常,您的asm、C#、互操作等,这将很有帮助

我在cpp中创建了一个.dll文件,用于访问I/O端口并对其进行写入。为此,我从c#console应用程序调用此.dll,但在尝试运行它时,出现“SEHException was unhandled”异常。你知道吗

这是c#:

这是cpp(创建.dll):


您不能直接从Windows中的用户模式应用程序访问任意I/O端口。您需要使用一个特殊的内核模式驱动程序来实现这一点。

不需要内联汇编,只需使用
\u outbyte
指令:另外,如果知道是哪个部分引发了异常,您的asm、C#、互操作等,这将很有帮助。我尝试了您的建议,但不幸的是,在这段时间我得到了“特权指令”。可能win7不允许我访问I/O端口。有什么想法吗?从“英特尔手册”、“输出指令”、“异常”部分,您可能没有写入IO端口所需的访问权限:
#GP(0):如果CPL大于(权限较低)I/O权限级别(IOPL),并且TSS中被访问I/O端口的任何相应I/O权限位为1
。我不确定所需的访问级别是什么,您可能需要是内核驱动程序,或者只是在ring3中运行,或者使用内存映射IO端口。
[DllImport("testlib.dll")]
public static extern void enableWatchDog();

static void Main(string[] args)
{
    enableWatchDog();
}
extern "C" __declspec(dllexport) void enableWatchDog() { 
   _asm {
      mov al, 41
      out 66, al
      mov al, 4
      out 62, al
   }
}