x86-64 register Immediate operand

상위문서 → shellcode shortcut , x86-64 아키텍처

우리가 셸코드를 사용할때 주로 연관이 있을텐데, 바로 x86-64아키텍처의 상수 필드에 대한 이야기이다.

C
add al, 0x12         ; imm8
add eax, 0x12345678  ; imm32
add rax, 0x12345678  ; imm32 (sign-extended to 64-bit)

이런식으로 뒤에 상수 필드에 대한 정보이다.

x86-64에는 imm64 인코딩이 거의 없다. 즉, imm64는 거의 사용하지 않는다. → imm32에서 sign-extended이 됨 대신

가령 예를 들어,

C
add rsi, 0xFFFFFFFF00000000
C
push 0xFFFFFFFF00000000

이런식으로 사용하면 에러가 발생한다.

가능한 방법은 MOV r64, imm64 뿐이다. 따라서,

C
mov rax, 0x1122334455667788
push rax

혹은, 명시적으로

C
movabs rax, 0x1122334455667788
push rax

다음과 같이 사용해야 한다.