1 x86 assembly reverse-engineering segmentation-fault
xor eax,eax
mov [eax], edx
Run Code Online (Sandbox Code Playgroud)
这被称为非法。我能得到一个解释吗?
这本身并不违法。它不会导致#UD未定义指令异常。这就是汇编语言/机器代码术语中“非法指令”的含义。
在正常操作系统下的正常 32 位程序中运行它会导致无效#PF异常(因为不会映射零页)。像 Linux 这样的操作系统将向进程提供 SIGSEGV,而不是 SIGILL。
正如@Jester 所说,在 Linux 下,您可以更改vm.mmap_min_addrsysctl ( https://wiki.debian.org/mmap_min_addr ),例如 WINE 需要运行 16 位 Windows 程序,然后就可以访问mmap该页面并运行这些指令而无需故障。