【问题标题】:explanation for the illegal instruction when eax is zeroeax为零时非法指令的解释
【发布时间】:2020-10-22 11:09:06
【问题描述】:
xor eax,eax
mov [eax], edx

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

【问题讨论】:

  • 这不是非法的,而是在日常操作系统下使用默认设置运行,内存地址零未映射以捕获 NULL 指针引用。在实模式下,您可以轻松地执行该操作,或者在更改 mmap_min_addr 设置并映射该页面后在 linux 下执行该操作。您还可以将 ds 更改为具有地址零映射的内容(例如 TLS)。

标签: assembly x86 segmentation-fault reverse-engineering


【解决方案1】:

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

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

正如@Jester 所说,在 Linux 下,您可以更改 vm.mmap_min_addr sysctl (https://wiki.debian.org/mmap_min_addr),就像 WINE 需要运行 16 位 Windows 程序一样,然后可以 mmap 该页面并运行这些指令没有过错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多