エンディアンとバイトオーダー
複数バイトの値がメモリやファイルにどのように配置されるか、なぜエンディアンが初心者を混乱させるのか、そして生のバイト列を正しく読み取る方法を理解します。
「エンディアンとバイトオーダー」はCoddyKit上の無料Reverse Engineering & Binary Analysis Basicsレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReverse Engineering & Binary Analysis Basics学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Reverse Engineering & Binary Analysis Basicsコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
Bytes Have an Order
You learned how data is represented in binaries. But a number like 0x12345678 occupies four bytes, and the CPU must decide which byte comes first in memory.
That decision is called endianness.
Little-Endian
In little-endian, the least significant byte is stored first (lowest address).
The value 0x12345678 is stored as the bytes 78 56 34 12. x86, x64, and most ARM systems use little-endian.
Value: 0x12345678
Memory: 78 56 34 12 (low -> high address)Big-Endian
In big-endian, the most significant byte is stored first.
The same value 0x12345678 is stored as 12 34 56 78. Network protocols and some older RISC chips use big-endian, so it is also called network byte order.
Value: 0x12345678
Memory: 12 34 56 78 (low -> high address)Why It Matters in RE
When you see raw bytes in a hex editor, you must apply the correct endianness to recover the real value. Misreading endianness turns a valid pointer into garbage.
- Reading addresses
- Parsing file headers
- Interpreting struct fields
Reading a 4-Byte Integer
Suppose a hex dump shows the bytes 2A 00 00 00. On a little-endian machine that is the integer 42, not 0x2A000000.
Always know the platform before interpreting.
Bytes: 2A 00 00 00
LE int: 0x0000002A = 42
BE int: 0x2A000000 = 704643072Seeing It in Code
This C snippet inspects the running machine's endianness by aliasing an int through a byte pointer.
#include <stdio.h>
int main(void) {
unsigned int x = 0x12345678;
unsigned char *p = (unsigned char *)&x;
printf('First byte: %02X\n', p[0]);
return 0;
}Network Byte Order
Protocols standardize on big-endian so machines of different architectures agree. C provides conversion helpers like htons and ntohl.
When reversing network code, watch for these calls; they reveal which fields are multi-byte.
uint16_t port = htons(8080); // host -> network orderByte Swapping
Converting between endian formats means reversing the byte order. Tools and disassemblers often offer a one-click swap, but understanding the mechanism is essential.
uint32_t swap32(uint32_t v) {
return ((v & 0xFF) << 24) |
((v & 0xFF00) << 8) |
((v >> 8) & 0xFF00) |
((v >> 24) & 0xFF);
}Endianness in File Formats
Many file formats declare their endianness in a magic field. ELF stores EI_DATA in its header; TIFF starts with II (Intel/little) or MM (Motorola/big).
Reading this field first tells you how to parse the rest.
Common Pitfalls
Beginners often:
- Read bytes left-to-right and forget to reverse for little-endian
- Assume the target matches their own machine
- Mix endianness mid-struct
When a pointer looks absurd, suspect endianness first.
Tools That Show Endianness
Most analysis tools let you toggle interpretation. In a hex editor you can flip between little- and big-endian data inspectors; disassemblers display the architecture's native order automatically.
When carving raw structures, always confirm the tool's current setting matches the target.
xxd -l 4 sample.bin
# 00000000: 2a00 0000 -> LE int = 42Quick Check
How is the value 0x12345678 stored on a little-endian machine?
Recap
Endianness decides byte order for multi-byte values:
- Little-endian: least significant byte first (x86/x64)
- Big-endian: most significant first (network order)
- Check the format's endianness field before parsing
Mastering this stops the most common 'garbage value' confusion in binary analysis.
よくある質問
「エンディアンとバイトオーダー」レッスンは無料ですか?
はい。「エンディアンとバイトオーダー」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Reverse Engineering & Binary Analysis Basicsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Reverse Engineering & Binary Analysis Basicsコースには全4レッスンが含まれています。
「エンディアンとバイトオーダー」で何を学びますか?
複数バイトの値がメモリやファイルにどのように配置されるか、なぜエンディアンが初心者を混乱させるのか、そして生のバイト列を正しく読み取る方法を理解します。 ブラウザで直接実行するハンズオンコードでReverse Engineering & Binary Analysis Basicsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Reverse Engineering & Binary Analysis Basicsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのReverse Engineering & Binary Analysis Basicsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「エンディアンとバイトオーダー」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このReverse Engineering & Binary Analysis Basicsレッスンでコードを書いて実行できますか?
はい。すべてのReverse Engineering & Binary Analysis Basicsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- CPUアーキテクチャの概要
- バイナリにおけるデータ表現
- 一般的なバイナリファイル形式
- エンディアンとバイトオーダー