在我的IDA拆卸中,JMP%g1的编码为:
81 c0 40 00
似乎找不到有关其编码方式的记录。对于为什么IDA在文档中使用“ JMP”而不是“ JMPL”,我也感到困惑。
SPARC9手册中给出的JMPL编码建议对我来说有点不可思议,我为它们的功能感到困惑:
10-RD-OP3-RS1-i-[-]-rs2
或
10-RD-OP3-RS1-i-siMM3
“如果跳转地址的低两位不为零,则出现mem_address_not_aligned
异常” />好吧,我不确定这与IDA发现的指令如何相符。有人可以细分一下如何映射到JMP%g1吗? JMP%g2的变化如何?
#1 楼
81 c0 40 00可以按以下方式分解
10 00000 111000 00001 0 0000000000000
^--op1
^--rd
^--op3
^--rs1
^--i
^--rs2/simmm13
要将目标从%g1更改为%g2,只需将rs1字段从00001更改为00010。 />
'L'只是at&t语法与intel语法的产物。在at&t语法中,指令名称编码有关参数大小的信息。在intel语法中,这是通过修饰参数来实现的。
评论
我怀疑它会将'L'视为实现细节-通常您只是编写JMP并将其留给汇编器,无论它会产生短跳转还是长跳转(但我的SPARC都是生锈的)。 %g2-您可能应该掌握SPARC汇编程序和实验,例如GNU binutils易于针对任何芯片进行构建-如果您至少可以在Linux VM或Mac上构建它,或者Cygwin如今也可以使用。或者,您可以十六进制编辑SPARC二进制文件,然后再次通过IDA再次运行它,以查看是否可以自己将其更改为g2。