【问题标题】:x86 intel opcode assemblyx86 英特尔操作码汇编
【发布时间】:2011-04-29 10:14:28
【问题描述】:

有没有办法使用纯 x86 intel 操作码而不是汇编助记符和指令编写程序,然后使用 ML 和 LINK 编译它。例如,如果我尝试写一个 55 而不是 push ebp ML 认为它是一个整数。是否需要特殊的编译器,或者如何编写操作码程序并进行编译。

【问题讨论】:

    标签: x86 masm opcode


    【解决方案1】:

    你可以使用db:

    db CDh,19h
    

    调用中断 0x19。

    【讨论】:

    • 这就是我正在寻找的 db 55h 转换为推送 ebp,我如何让它识别 8B EC,看起来需要一个 dw 但我如何将它输入为两个单独的代码?
    • 你用逗号分隔它们?
    • 然后我得到一个未定义的符号 ECh?
    • 同样的事情,如果你以后有机会尝试的话,我会在 VS 2010 中使用 ML 和 LINK,如果不担心的话。
    【解决方案2】:

    汇编程序的工作是将助记符转换为二进制值。 x86 是一个历史悠久的 CISC 指令集,因此这种翻译很难手动完成。

    链接过程更糟糕,它创建最终的可执行文件,这意味着创建大量结构。手动执行和维护要困难得多。

    如果你真的想用操作码写东西,拿一个十六进制编辑器(或者甚至是记事本,如果你知道所有的 ASCII 码 :))然后写一个 .COM 程序。任何更复杂的 (.exe) 都将是矫枉过正。

    【讨论】:

      【解决方案3】:

      简短的回答是可以只使用操作码来编写程序。正如smilethax 所展示的,您仍然需要一个汇编器或其他工具来输出每个操作码的二进制值。

      您将需要参考英特尔文档以找出每个组装记忆的操作码。此信息包含在Intel(R) Architecture Software Developer's Manual, Volume 2: Instruction Set Reference Manual 中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-18
        • 2015-09-29
        • 2016-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-16
        • 2011-02-14
        相关资源
        最近更新 更多