例如,將12345678h
寫入1000h
開始的記憶體中,以大端序和小端序模式存放結果如下
一般來說,x86系列cpu都是little-endian
位元組序,powerpc通常是big-endian
位元組序。
因為網路協議也都是採用big-endian方式傳輸資料的,所以有時也把big-endian方式稱為網路位元組序
下面通過乙個簡單的例子繼續理解小端序
#include "windows.h"
byte b = 0x12;
word w = 0x1234;
dword dw = 0x12345678;
char str = "abcde";
int main(int argc, char* ar**)
通過visual studio除錯一下,轉到反彙編檢視反彙編**
可以看到全域性變數b
、w
、dw
、str
的位址分別為06aa000h
、06aa004h
、06aa008h
、06aa00ch
。我們在記憶體視窗檢視相應的位址,可以看到對應的資料,上面不同顏色的方框對應不同變數。
拿dw
這個變數來說,他的位址是06aa008h
,可以看到他的資料是0x78
0x56
0x34
0x12
,注意小端序是位址高位儲存資料的高位,位址低位儲存資料的低位
而字串「abcde」
被儲存在乙個字元(char)陣列str中,字元陣列在記憶體中是連續的,此時向字元陣列存放資料,無論是採用大端序還是小端序,儲存順序都相同。
還有另個知識點,就是注意到反彙編**中的ptr
了嗎,逆向分析的時候是不是經常看見這個符號,知道他是幹什麼的嗎?
ptr運算子可以重寫運算元預設的大小型別,ptr
的前面會有型別的宣告,比如byte ptr [b(06aa000h)]
,他的意思從這個位址取乙個byte
大小的資料。比如byte ptr [dw(06aa008h)]
得到的就是0x78
,word ptr [dw(06aa008h)]
得到的就是0x5678
,以此類推。
小端模式和大端模式 大端模式和小端模式
0x123456在記憶體中的儲存方式 大端模式 低位址 小端模式 低位址 不難看出大端模式比較符合人的直觀認識 1.一開始是由於不同架構的cpu處理多個位元組資料的順序不一樣,比如x86的是小段模式,keil c51是大端模式。但是後來網際網路流行,tcp ip協議規定為大端模式,為了跨平台通訊,還...
大端和小端模式
大端格式 在這種格式中,字資料的高位元組儲存在低位址中,而字資料的低位元組則存放在高位址中,如圖2.1所示 小端格式 與大端儲存格式相反,在小端儲存格式中,低位址中存放的是字資料的低位元組,高位址存放的是字資料的高位元組。如圖2.2所示 請寫乙個c函式,若處理器是big endian的,則返回0 若...
大端模式和小端模式
大端模式和小端模式 在c語言中除了8位的char型之外,還有16 位的short型,32 位的long型 要看具體的編譯器 對於位數大於8位的處理器,例如16位或者32位的處理器,由於暫存器寬度大於乙個位元組,那麼必然 存在著如何將多個位元組安排的問題。因此就導致了大端儲存模式和小端儲存模式。大端模...