代码之家  ›  专栏  ›  技术社区  ›  shadeMe

从指令中获取操作数

  •  1
  • shadeMe  · 技术社区  · 16 年前

    给出了以下x86程序集说明:

    mov     esi, offset off_A
    cmp     esi, offset off_B
    

    如何在运行时获取偏移量(第二个操作数)?这是一个场景:一个程序(在运行时注入到进程中)用它自己的一些偏移量替换这些偏移量,从而导致:

    mov     esi, offset off_X
    cmp     esi, offset off_Y
    

    这个程序允许通过它编写和加载插件,但不公开替换地址。那么,给定上述指令存在的地址,我如何找到偏移量x和y?

    3 回复  |  直到 16 年前
        1
  •  1
  •   Martin    16 年前

    我不太明白这是干什么的,但是…

    mov esi, ... 编码为 BE 后跟双字操作数。如果你有 mov 指令可以简单地向前跳过一个字节,然后查看地址操作数, off_A

    cmp esi, ... 编码为 81 FE 后面是一个双字操作数,因此您可以跳过两个字节来查看操作数。

        2
  •  0
  •   Earlz    16 年前

    我不知道你在问什么。偏移量 地址。所以第一行代码是移动 off_9F6FBC 对ESI。

    如果您的意思是如何获得绝对地址(结合pic等),那么在拆卸时就不知道了。它只在运行时知道,并且可以更改每次运行

        3
  •  0
  •   Cheery    16 年前

    有很多方法可以对mov esi进行编码,即时编码。根据汇编程序和编译器的不同,可以使用它们中的任何一个。

    如果您不使用汇编程序助记法(如十六进制)来完成它。您可以在这里精确定位偏移量:

    db 0xBE; off_X: dd normal_offset
    
    推荐文章