iT邦幫忙

2024 iThome 鐵人賽

DAY 8
0

這次要來說明Hex在存放時為什麼是顛倒的。

這是記憶體排放順序的問題,目前常用的記憶體排放順序主要有兩種,大端序(Big Endian)和小端序(Little Endian),簡單來說,大端序是指數據按照從高位到低位的順序存儲在記憶體中,而小端序則是將數據按照從低位到高位的順序存儲。
假設有一個24位元的數字0x123456,如果使用大端序,這個數字在記憶體中會被存儲為0x12 0x34 0x56,如果使用小端序,它則會被存儲為0x56 0x34 0x12。
https://ithelp.ithome.com.tw/upload/images/20240922/20169016KnY5oIwz7P.png
可以看到,小端序(Little Endian)並不是直接0x65 0x43 0x21的方式擺放,而是根據8位元(1 Byte)為單位進行逆序排列,對於 24 位元(3 Bytes)的數字 0x123456,小端序的存放順序會是 0x56 0x34 0x12,這是因為它按照每個位元組來逆序排列,而 32 位元或 64 位元數據則會根據其自身大小進行相應的逆序排列,而這次的程式是64位元的程式,因此擺放的字共8個Bytes,也就是會用到8個格子。
https://ithelp.ithome.com.tw/upload/images/20240922/20169016maYQ2KN7ec.png
https://ithelp.ithome.com.tw/upload/images/20240922/201690167SOJEN5n2l.png

這樣就能夠解釋為什麼放入RAX中的值會是反著的了,我們在大部分的情況下,都會遇到端序的問題,比如在網路上傳輸的資料就會碰到Big Endian的情況。

放入RAX後的暫存器長這樣
https://ithelp.ithome.com.tw/upload/images/20240922/20169016KVF4jRrGcc.png
https://ithelp.ithome.com.tw/upload/images/20240922/20169016LN4UXl0tjx.png


上一篇
程式的開頭
下一篇
將值放入Stack中
系列文
從0開始的打Pwn教學14
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言