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, 0xFFFFFFFF00000000C
push 0xFFFFFFFF00000000이런식으로 사용하면 에러가 발생한다.
가능한 방법은 MOV r64, imm64 뿐이다. 따라서,
C
mov rax, 0x1122334455667788
push rax혹은, 명시적으로
C
movabs rax, 0x1122334455667788
push rax다음과 같이 사용해야 한다.