如何在运行时修改.code段?

时间:2014-02-24 14:05:06

标签: assembly process

我想编写一个能够修改自身代码段的程序。例如,考虑这个汇编代码:

原始代码:

i1: mov eax,0
i2: mov eax,0X01

我希望在运行时使用相同的代码生成的代码:

i1: mov eax,0
i": // some modifing instructions that when are excuted they change the i2 and/or add or remove some instruction such i3
i2: jmp 0x32
i3: mov ebx,0x67 

您在执行指令i2后看到i"已更改。 i"有义务修改其转发代码说明。

现在我的问题是:

  1. 如何修改代码段?或者如何解决代码段 记忆区?
  2. 我们是否允许从同一代码段修改它们 (不是那个没有访问权限的程序吗?)
  3. 我们如何解决因代码段大小变化而导致的问题?
  4. 最后一个问题可能是反病毒!它们检查程序在运行时的行为,并且对自我修改很敏感。
  5. 感谢我的朋友们。

1 个答案:

答案 0 :(得分:0)

在16位实模式和v86模式中,我们可以简单地写入代码段:

i1: inc bx         ; 43h = opcode of "INC BX"
    mov al,4Bh     ; 4Bh = opcode of "DEC BX"
    mov cs:[i1],al

德克