Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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_Patch_Cmp_Ida - Fatal编程技术网

Assembly 汇编程序补丁比较指令和分支

Assembly 汇编程序补丁比较指令和分支,assembly,arm,patch,cmp,ida,Assembly,Arm,Patch,Cmp,Ida,我怎样才能“实现”这个愿望 CMP R0, #0 我想做的就是举例说明 CMP R0,R0 or CMP #0, #0 00 28是操作码。我试着去做28而没有结果! 另一个问题 什么样的指令是BNE.W?最后的W是什么? 我怎样才能在一个BE中修改它?操作代码为40 F0 65 85 注意:所有操作代码都处于拇指模式 *编辑 是否存在用于Mac的armv7编译器?您可以简单地组装CMP R0、R0或CMP#0、#0,并以这种方式从这些指令中提取所需的操作码 另一种

我怎样才能“实现”这个愿望

CMP             R0, #0
我想做的就是举例说明

CMP R0,R0 or CMP #0, #0
00 28是操作码。我试着去做28而没有结果! 另一个问题 什么样的指令是
BNE.W
?最后的W是什么? 我怎样才能在一个BE中修改它?操作代码为
40 F0 65 85

注意:所有操作代码都处于拇指模式

*编辑
是否存在用于Mac的armv7编译器?

您可以简单地组装
CMP R0、R0
CMP#0、#0
,并以这种方式从这些指令中提取所需的操作码


另一种方法是查看ARM参考手册并手动构建操作码。是我很快找到的一本ARMv5手册,在
7.1.22
下有
CMP,
详细介绍了如何构建操作码以比较两个寄存器。细节似乎与我在即将发布之前发现的ARMv7手册相同

它的位15-6为
0 1 0 0 0 1 0 1 0
,位5-3为第一个寄存器的编号(编号0由
R0
的3位表示),位2-0为第二个寄存器(也是
R0
)。因此,您的操作码现在将是:

01001010
CMP
000
R0
000
R0

十六进制的
1000010000000
4280
,因此以小尾端顺序,您需要的两个字节是
8042


正如您所看到的,让汇编程序为您解决这个问题会快得多。

这是什么CPU???添加适当的标签。组装指令
CMP R0,R0
CMP#0,#0
,并用此操作码替换上述操作码。很好的解决方案!如果是针对arm7处理器,我该怎么做?它使用拇指模式。。。你能告诉我一些关于BNE.W的事情吗?它是什么类型的指令?使用任何类型的ARMv7汇编程序编译代码并提取操作码。我以前从未做过任何手臂工作,所以我不知道拇指模式是什么,但
W
通常指单词。无论如何,我可能是错的,但请尝试
8042
以获得
cmpr0,R0
。这就是我在快速阅读ARMv5手册后得出的结论。我从
cmpr0,#0
中提出了
0028
,所以它实际上可能是对的(或者不是)。这是一个armv7而不是arm7,差别很大(arm7没有thumb2模式,只有thumb)。您需要了解的所有信息都在一本armv7体系结构参考手册(ARM)中,该手册位于infocenter.ARM.com的“体系结构参考”下。w在手册中显示得非常清楚,它意味着一个更大的常数,thumb one bne是8位或11位立即数,thumb 2给出17位或21位立即数。.w sorta表示thumb2指令而不是thumb指令,thumb指令是一个字的大小而不是半字。w是单词的意思。