Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 奇怪的气体武器语法_Assembly_Arm_Gnu Assembler - Fatal编程技术网

Assembly 奇怪的气体武器语法

Assembly 奇怪的气体武器语法,assembly,arm,gnu-assembler,Assembly,Arm,Gnu Assembler,当我反汇编arm elf.so文件时,我看到了以下代码: 170c: e28fc600 add ip, pc, #0, 12 我只知道这是一个ARM“添加”指令。 但根据ARM参考手册,“add”的语法如下: op{S}{cond} {Rd}, Rn, Operand2 op{cond} {Rd}, Rn, #imm12 ; Thumb-2 ADD and SUB only 操作数2是: #constant Rm {, shift} 这一行a

当我反汇编arm elf.so文件时,我看到了以下代码:

 170c:  e28fc600    add ip, pc, #0, 12
我只知道这是一个ARM“添加”指令。 但根据ARM参考手册,“add”的语法如下:

op{S}{cond} {Rd}, Rn, Operand2

op{cond} {Rd}, Rn, #imm12               ; Thumb-2 ADD and SUB only
操作数2是:

  #constant
  Rm {, shift}
这一行asm应符合以下语法:

  op Rd, Rn, #constant
所以,代码应该意味着, “将pc和#0添加到ip”

那么问题是:

  • 代码的最后一部分“12”呢
  • 您在哪里找到这些信息,气体手册还是手臂手册

  • 提前感谢。

    这可能是链接时将更改的代码的一部分

    编码中的12表示立即数将右转12位。显然,目前这对于一个#0来说毫无意义。此外,整个操作码目前只不过是一种幻想

    mov ip, pc
    
    在运行时查看一下代码,可能是#0变成了更有意义的东西

    数字从不说谎

    e28fc600

    蚕食

  • e
    始终
  • 28
    添加未设置条件代码的立即数
  • f
    Rb是
    pc
    R15
  • c
    Rd是
    ip
    R12
  • 600
    换档杆操作或零点是否旋转了6*2

  • 由于指令比较奇怪,分解后的输出可能不正常;通常只显示常量#0xef00,因为没有人关心它是如何编码的。此外,由于这是一个共享库,可能会在运行时通过重新定位来修复该指令。

    谢谢您的评论。但是您从哪里获得这些语法信息呢?它来自arm体系结构参考手册(arm)。根据你原来的问题,你已经有一个了。如果您查看ARM的ADD指令(不是thumb或thumb2),您将找到编码。#imm12在底部12位进行编码,最终结果为result=RotateRight(位[7:0],[12:8]*2)。我知道#imm12的意思。我只是想知道为什么“添加ip,pc,#0,12”意味着右旋转#0乘12。为什么不“添加ip,pc,#0 ROR 12?那么这就是您在原始帖子中应该问的问题。@Masta79给出了您所要求的内容。也许您应该重新编写问题并再次提问。@artless noise感谢您的添加。