我正在使用ARM程序集,并尝试(再次)取消跳转表。链接的图像是来自canon rebel t1i固件转储的跳转表条目。在这种情况下,R0(我将其称为arg1)是一些> = 0x10000091的数字(如附图所示)。
我想知道这里如何使用0xF0000000。我唯一能想到的是它必须是一些负数......因为这是我能在这里理解事物的唯一方法。我在评论中解决的方式是假设0xF0000000 = -268435445,但正如我在那里解释的那样它似乎不起作用......
非常感谢任何帮助!!
答案 0 :(得分:6)
无论是正面还是负面都无关紧要。
如果您单步执行R0的可能值,则可以得到:
R0 ADD... SUB...
10000091 => 00000091 => 00000000 => branch to loc_FF1CC924
10000092 => 00000092 => 00000001 => branch to loc_FF1CC928
10000093 => 00000093 => 00000002 => branch to loc_FF1CC92C
10000094 => 00000094 => 00000003 => branch to loc_FF1CC930
10000095 => 00000095 => 00000004 => branch to loc_FF1CC934
anything else will fall through => branch to loc_FF1CFAEC
答案 1 :(得分:3)
它可以是正面的,也可以是负面的;这取决于具体情况。对于假定值为带符号的4字节整数的情况,它等于-268,435,456。对于假定值为无符号4字节整数(例如地址)的情况,它等于4,026,531,840。
答案 2 :(得分:1)
0xF0000000
只是一个符号。它可以代表任何东西。
作为32位数字的十六进制表示,它可以是正数也可以是负数,具体取决于数字是有符号还是无符号。
作为带符号的二进制补码32位数的十六进制表示,它是负数。
答案 3 :(得分:0)
否定,我认为。最左边的位是符号位。 (“我认为”因为我需要检查ARM使用的表示,但几乎没有任何东西使用其他可能性。)