opcode (tsz. opcodes)
Egy CPU-utasítás (instruction) tipikusan két részből áll:
Rész | Leírás |
---|---|
Opcode | Művelet típusa: mit tegyen a CPU (pl. ADD , MOV , JMP )
|
Operandus(ok) | Adatok vagy hivatkozások (regiszter, memória, szám, cím) |
Például egy x86 assembly utasítás:
MOV EAX, 4
A hozzá tartozó gépi kód (hexában):
B8 04 00 00 00
Itt:
B8
= opcode: a MOV EAX, imm32
műveletkódja04 00 00 00
= operandus: a 4-es szám, kis endian formában
Az opcode nem szöveg, hanem egy konkrét bináris szám, például:
Utasítás | Opció (hex) | Opció (binárisan) |
---|---|---|
MOV EAX, 1
|
B8
|
10111000
|
ADD AL, 1
|
04
|
00000100
|
INT 0x80
|
CD 80
|
11001101 10000000
|
Az opcode mondja meg a CPU-nak, hogy milyen műveletet hajtson végre:
ADD
, SUB
, MOV
AND
, OR
, XOR
JMP
, JE
, CALL
INT
, SYS
Az opcode CPU-függő, azaz:
Architektúra | Opciókódja |
---|---|
x86 | B8 = MOV EAX, imm32
|
ARM | Más bináris kód, pl. E3A00004
|
MIPS | Más bináris szintaxis |
❗ Egy opcode csak az adott architektúrához érvényes!
Ha egy bináris fájlt disassemblerrel (pl. objdump
, IDA
, radare2
) nézünk, akkor hexadecimal opcode értékeket látunk, és azok assembly megfelelőit:
08048400 <_start>: b8 04 00 00 00 mov eax,0x4 bb 01 00 00 00 mov ebx,0x1
A hackerek és biztonsági kutatók opcode-szinten is elemzik a kódokat (pl. shellcode készítésnél). Ez alacsony szintű, de precíz kontrollt ad.
Fogalom | Jelentés |
---|---|
Opcode | Egy CPU utasítás bináris kódja, ami meghatározza a műveletet |
Operandus | Az utasításban használt adatok, címek |
Hexadecimális formában | Pl. B8 , CD 80 , stb.
|
CPU-specifikus | Egy adott processzor készlethez tartozik |