Assembly eax为零时非法指令的解释

Assembly eax为零时非法指令的解释,assembly,x86,segmentation-fault,reverse-engineering,Assembly,X86,Segmentation Fault,Reverse Engineering,这被称为非法。我能解释一下吗?这本身并不违法。它不会导致未定义的指令异常。这就是汇编语言/机器代码术语中“非法指令”的含义 在正常操作系统下的正常32位程序中运行它将导致无效的#PF异常(因为零页不会被映射)。像Linux这样的操作系统将向进程提供SIGSEGV,而不是SIGILL 正如@Jester所说,在Linux下,你可以更改vm.mmap\u min\u addrsysctl(),就像WINE需要运行16位Windows程序一样,然后就可以mmap该页面并运行这些指令而不会出错。这本身并

这被称为非法。我能解释一下吗?

这本身并不违法。它不会导致未定义的指令异常。这就是汇编语言/机器代码术语中“非法指令”的含义

在正常操作系统下的正常32位程序中运行它将导致无效的
#PF
异常(因为零页不会被映射)。像Linux这样的操作系统将向进程提供SIGSEGV,而不是SIGILL

正如@Jester所说,在Linux下,你可以更改
vm.mmap\u min\u addr
sysctl(),就像WINE需要运行16位Windows程序一样,然后就可以
mmap
该页面并运行这些指令而不会出错。

这本身并不违法。它不会导致未定义的指令异常。这就是汇编语言/机器代码术语中“非法指令”的含义

在正常操作系统下的正常32位程序中运行它将导致无效的
#PF
异常(因为零页不会被映射)。像Linux这样的操作系统将向进程提供SIGSEGV,而不是SIGILL


正如@Jester所说,在Linux下,您可以更改
vm.mmap\u min\u addr
sysctl(),就像WINE需要运行16位Windows程序一样,然后可以
mmap
该页面并运行这些指令而不出错。

这并不违法,但在日常操作系统下使用默认设置运行。内存地址零不会映射到捕捉空指针引用。在real模式下,您可以轻松地执行该操作,或者在linux下更改
mmap\u min\u addr
设置并映射该页面。您还可以将
ds
更改为映射了地址零的内容(例如TLS)。这并不违法,但在日常操作系统下使用默认设置运行。内存地址零不映射以捕获空指针引用。在real模式下,您可以轻松地执行该操作,或者在linux下更改
mmap\u min\u addr
设置并映射该页面。您还可以将
ds
更改为具有地址零映射的内容(例如TLS)。
xor eax,eax
mov [eax], edx