進制及進制的轉(zhuǎn)換
了解進制的概念及進制的轉(zhuǎn)換是學(xué)習(xí)逆向的基礎(chǔ),因為計算機使用的進制是二進制,它又不同于我們現(xiàn)實生活中使用的十進制,因此我們必須學(xué)習(xí)不同的進制及進制之間的轉(zhuǎn)換。
現(xiàn)實生活中的進制與計算機的二進制
我們在現(xiàn)實生活中會接觸到多種多樣的進制,通常見到的有十進制、十二進制和二十四進制等。下面分別對這幾種進制進行舉例說明。
十進制是每個人從上學(xué)就開始接觸和學(xué)習(xí)的進制表示方法。所謂的十進制,就是逢十進一,最簡單的例子就是9+1=10。這個無需過多解釋。
十二進制也是我們?nèi)粘I钪谐R姷谋硎痉椒āK^的十二進制,就是逢十二進一,例如12個月為1年,13個月就是1年1個月。
二十四進制也是我們?nèi)粘I钪谐R姷谋硎痉椒āK^的二十四進制,就是逢二十四進一,例如24小時為1天,25小時就是1天1小時。
介紹了以上現(xiàn)實生活中的例子后,我們再來說說計算機中的二進制。根據(jù)前面各種進制的解釋,我們可以想到,二進制就是逢二進一。這里舉個不太恰當(dāng)?shù)睦樱?斤就是1公斤。
在計算機中為什么使用二進制呢?簡單說就是計算機用高電平和低電平來表示1和0最為方便和穩(wěn)定,高電平被認(rèn)為是l,低電平被認(rèn)為是0,這就是所謂的二進制的來源。由于二進制在閱讀上不方便,計算機又引入了十六進制來直觀地表示二進制。所謂的十六進制,就是逢十六進一。
因此在計算機中,我們常見的數(shù)據(jù)表示方法有二進制、十進制和十六進制。
進制的定義
在學(xué)習(xí)小學(xué)數(shù)學(xué)的時候我們就學(xué)習(xí)了十進制,十進制一共有十個數(shù)字,從0一直到9,9再往后數(shù)一個的時候要產(chǎn)生進位,也就是逢十進一。總結(jié)十進制的定義則是,由0到9十個數(shù)字組成,并且逢十進一。
舉一反一地來說,二進制的定義是,由0到1兩個數(shù)字組成,逢二進一。十六進制的定義是由0到9十個數(shù)字和A到F六個字母組成,逢十六進一。
由此,我們衍生出N進制的定義是,由N個符號組成,逢N進一。
下表所列為這三種進制的數(shù)字表。
數(shù)制 | 基數(shù) | 數(shù)字 |
二進制 | 2 | 0 1 |
十進制 | 10 | 1 2 3 4 5 6 7 8 9 |
十六進制 | 16 | 0 1 2 3 4 5 6 7 8 9 A B C D E F |
進制的轉(zhuǎn)換
在逆向當(dāng)中,我們直接面對的通常是十六進制,而由于很多原因,我們需要將其當(dāng)作十進制或二進制來查看,當(dāng)然也有可能需要根據(jù)二進制轉(zhuǎn)換成十六進制或十進制。所以,我們就需要掌握進制之間的轉(zhuǎn)換。
二進制轉(zhuǎn)十進制
二進制整數(shù)的每個位都是2的冪次方,最低位是2的0次方,最高為是2的(N-1)次方,我們通過一個例子進行說明。我們把二進制數(shù)10010011轉(zhuǎn)換成十進制數(shù),計算方式如下:
10010011=1×27+0×26+0×25+1×24+0×23+0×22+1×21+1×20=128+0+0+16+0+0+2+1=147
十六進制與二進制的轉(zhuǎn)換
由于一個簡單的數(shù)值用二進制表示需要很長的位數(shù),這樣對于閱讀很不方便,因此匯編和調(diào)試器常用十六進制表示二進制。十六進制的每個位可以代表4個二進制位,因為2的4次方剛好是16。這樣,在二進制與十六進制之間就產(chǎn)生了一個很好的對應(yīng)關(guān)系,如下表。
二進制 | 十進制 | 十六進制 | 二進制 | 十進制 | 十六進制 |
0000 | 0 | 0 | 1000 | 8 | 8 |
0001 | 1 | 1 | 1001 | 9 | 9 |
0010 | 2 | 2 | 1010 | 10 | A |
0011 | 3 | 3 | 1011 | 11 | B |
0100 | 4 | 4 | 1100 | 12 | C |
0101 | 5 | 5 | 1101 | 13 | D |
0110 | 6 | 6 | 1110 | 14 | E |
0111 | 7 | 7 | 1111 | 15 | F |
根據(jù)此表,我們可以很快地把二進制和十六進制進行轉(zhuǎn)換,把上例的二進制10010011轉(zhuǎn)換成十六進制,轉(zhuǎn)換過程如下:
第一步,把10010011從最低開始按每四位分為一組,不足四位前面補0,劃分結(jié)果為1001 0011
第二步,把劃分好的組進行查表,1001對應(yīng)十六進制是9,0011對應(yīng)的十六進制是3。那么,二進制10010011轉(zhuǎn)換成十六進制后的值是93。
在逆向中常用的就是二進制與十進制的轉(zhuǎn)換,或者是二進制與十六進制的轉(zhuǎn)換,其他的轉(zhuǎn)換方式可以自行查找資料進行學(xué)習(xí)。關(guān)于十六進制和二進制需要記住的重要一點就是。
一位十六進制數(shù)可以表示四位二進制數(shù)。