x86/x64의 기계어 코드 최대 길이
궁금해서 찾아본 것인데,
x86_64 ASM - maximum bytes for an instruction?
; https://stackoverflow.com/questions/14698350/x86-64-asm-maximum-bytes-for-an-instruction
2.3.11 AVX Instruction Length
The maximum length of an Intel 64 and IA-32 instruction remains 15 bytes.
x86/x64 모두 15 바이트가 최대 길이라고 합니다. 실제로 다음의 글에 보면,
Longest x86 Instruction
; https://web.archive.org/web/20131109063453/https://www.onlinedisassembler.com/blog/?p=23
예제가 하나 나옵니다. ^^
lock add DWORD PTR ds:[esi+ecx*4+0x12345678],0xefcdab89
==> 67 66 f0 3e 81 84 8e 78 56 34 12 89 ab cd ef
이와 함께 우연히 발견한 CLR의 코드가 재미있습니다. ^^
clr!JIT_MonEnter:
00007fff`8b0a26b0 33d2 xor edx,edx
00007fff`8b0a26b2 6666666666660f1f840000000000 nop word ptr [rax+rax]
nop 코드인데 "word ptr" 및 레지스터 연산을 통한 간접 주소까지 합해 14바이트입니다. 유사한 코드로 x86에서는 NOP 코드가 9바이트까지 길어질 수 있는 것 같습니다. ^^
[x86 환경]
66 NOP DWORD ptr [EAX + EAX*1 + 00000000H]
==> 66 0F 1F 84 00 00 00 00 00H
1바이트 nop을 n번 반복해도 되겠지만. ^^
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]