gpt4 book ai didi

assembly - 如何反汇编movb指令

转载 作者:行者123 更新时间:2023-12-04 13:52:43 29 4
gpt4 key购买 nike

我正在编写反汇编程序,并且正在查看指令格式(并进行了一些手工反汇编),然后遇到了似乎无法解码的指令。

该特定指令的输出(来自objdump)为:

c6 05 14 a0 04 08 01    movb   $0x1,0x804a014

但是,由于操作码c6应该是MOV Eb Ib(将R/M修改为imm8),因此我不理解该指令的解码方式。

有人可以启发我解码方式吗?

谢谢!

最佳答案

Alex Frunze的答案对此作了部分解释,但他的回答有点简洁,因此我将在此处提供一些移植信息:

  • 操作码为c6/0,表示该指令有2个操作数。一个是r/m 8,表示以mod/rm字节编码的操作数,以及一个立即数。两个操作数均为8位宽。
  • 操作码中的/0表示操作码的一部分被编码在mod/rm字节中。 mod/rm字节中的3-5位是操作码的一部分。当您在c6后面跟随一个mod/rm字节,其3-5位的值为0时,您将得到一个mov操作码。
  • 值5(紧随c6之后的字节)对应于r/m字节00 000 101(二进制)。
  • r/m字节的“后三个”(位0-2)对应于r/m字段。 r/m值为101(5)表示“使用位移dword”,因此mod/rm字节后的接下来的4个字节构成立即数地址。
  • 14 a0 04 08是0x0804a014
  • 的小尾数编码
  • 最后一个字节1是立即加载到地址
  • 中的值

    我希望这有帮助。

    关于assembly - 如何反汇编movb指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12363658/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com