【问题标题】:Writing assembly code for a non-static location in memory (need absolute addresses) [duplicate]为内存中的非静态位置编写汇编代码(需要绝对地址)[重复]
【发布时间】:2012-12-13 15:22:17
【问题描述】:

我有一些汇编代码,我想汇编以注入到正在运行的进程中,但它并不总是位于内存中的同一位置。但是,它包含对程序中地址的引用,这些地址不会改变。我尝试使用jmp farcall far,但它给了我错误“FAR 引用的值不可重定位”。如何将其设置为在二进制代码中使用绝对地址,以便无论代码在内存中的确切位置,它都会跳转到并调用正确的地址?

【问题讨论】:

    标签: assembly x86 code-injection patch memory-address


    【解决方案1】:

    怎么样:

             mov    reg, <fixed_address>
             call   reg
    

    【讨论】:

    • 谢谢,有人告诉我同样的事情。接受。
    【解决方案2】:

    “如何设置它以在二进制代码中使用绝对地址,” 自己构建命令:EA + 6 字节表示远跳或 E9 + 4 表示近。 或者:

    call 11111111h
    m1:
    ----
    mov [m1 - 4], eax
    

    在设置你的 shell 时。

    【讨论】:

    • 这仅在[m1 - 4] 是相对于 RIP 的寻址模式时与位置无关。 32 位自修改代码需要找到自己的地址(您可以使用 call/popcall/load/ret)来实现位置无关。
    猜你喜欢
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 2019-11-30
    • 2012-01-19
    相关资源
    最近更新 更多