Assembly 奇怪的气体武器语法
当我反汇编arm elf.so文件时,我看到了以下代码: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
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位。显然,目前这对于一个#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感谢您的添加。