我观察到很少有逆向工程师,他们将十进制十进制转换为十六进制。这真是太神奇了。我没机会问他们。就个人而言,我真的很喜欢这种转换,我总是使用计算器进行转换。
我想知道这次转换是否有某种捷径?
我认为特别是对于逆向工程师而言低级(汇编,嵌入式)程序员。如果他可以用HEX而不是十进制数来计算,加,减,思考,这是一个很大的优势。如果您对此有任何提示,请分享。
答案 0 :(得分:6)
你需要知道hart的基本转换0-16,0x0-0xF和0b0-0b1111转换。
你重复学习的其余部分。这是一些经常重复的模式。
倍数:
类似于位位置,您可以学习小数值
这些模式无处不在,随着时间的推移,你将开始学习它们。
如果你有一个二进制表示,很容易将这些位分组为四个,并快速转换为二进制表示。
找到十进制值0xA1B587DE的唯一现实方法是使用计算器(或者是数学上令人难以置信的擅长)。但是距离0xA1B587DE最近的1k边界是0xA1B58400,如果您知道模式,这很容易。
根据您对操作码的评论:
对于RISC处理器,大多数指令只是指令字中的前几位定义了指令族(mov,jump和,或......),其余的只是参数。如果你使用足够的处理器,你将开始学习它们。
答案 1 :(得分:3)
一旦了解了所涉及的编号系统的基础,这很简单。 十六进制是16的基数 - 所以,1(dec)= 0x01;但是16(dec)= 0x10。
每当看到十进制数字时,比方说39:
除以16然后取公数 - 这是2(2 * 16 = 32) 余数是7(39 - 32)
十进制39的十六进制值因此是:0x27。
现在,将其转换回十进制:0x27 = 2 * 16 + 7 = 39十进制:)
希望你明白了!
答案 2 :(得分:2)
http://quashnick.net/geek_stuff/HEX2DEC.html
这是程序。休息是数学。如果您可以动态进行乘法和除法,则在将十进制转换为十六进制时不应该有问题,反之亦然。