【问题标题】:Find a minimal self-modifiying code example for educational purpose in x86 assembler?在 x86 汇编器中找到一个用于教育目的的最小自修改代码示例?
【发布时间】:2012-08-29 15:49:26
【问题描述】:

我正在寻找几行长的示例,演示用于教育目的的 x86 汇编程序中的自修改代码(不需要做有意义的事情,但需要清楚地编写自己的代码,然后在阅读代码时执行它本身)。

我确实浏览了一点网络,但所有示例要么太复杂,要么无法真正不言自明。我可能错过了正确的去处,所以请随时建议链接或代码。

【问题讨论】:

  • EICAR 防病毒测试文件使用 SMC 对其代码进行解码。这样,文件只使用 ASCII 可打印字符。
  • 最大的问题是操作系统和操作系统使用的保护措施。你在什么操作系统上运行这个?
  • dwelch:我正在运行 Linux,但我不想用权限管理来模糊该示例(当您需要从源设置“写入”标志时,这可能会产生误导) .我们可以通过编译器选项从外部处理这个问题。所以,我认为权利处理得很好。

标签: assembly x86 self-modifying


【解决方案1】:

许多处理器在代码更改后无法立即看到对代码的修改,而是执行旧字节。例如,下面的代码仍然(大多数时候)增加 eax,即使在 'inc' 指令被 'nop'-s 覆盖之后。您应该几乎总是看到 eax=1,如果在 'mov' 之后发生异常,则得到 eax=0。

; Intel syntax

.arch   i386
.text
start:
        xor     %eax, %eax
        mov     word ptr change, 0x9090
change: inc     %eax
        nop
        ret

如果 EFLAGS.TF=1,eax 将始终为 0。这是否有用是另一回事。很久以前,一个朋友为了混淆目的使用了自修改代码,并且上面有几个陷阱,依赖于处理器实际上忽略了更改。

【讨论】:

  • 最后一点非常聪明。
  • 我非常喜欢您的解释和示例。谢谢!
猜你喜欢
  • 2011-06-16
  • 1970-01-01
  • 2012-05-06
  • 1970-01-01
  • 1970-01-01
  • 2021-02-11
  • 2013-02-17
  • 1970-01-01
  • 2017-10-20
相关资源
最近更新 更多