2011-07-27 3 views
-1

이 질문은 이상하게 들릴 수 있지만 코드를 바이너리로 주입 할 때 필요합니다.2 바이트 (인텔)를 사용하여 eax = 1로 만듭니다.

캐어 플래그 나 다른 레지스터, 다른 레지스터 등과 같은 내용에 의존하지 않고 eax를 1과 동일하게 만드는 방법을 생각해 볼 수 있습니까?

그러나 2 바이트 만. 3은 쉽고 여러 가지 방법으로 수행 할 수 있지만 2로 끝낼 수 있습니까?

+2

2 개의 opcode가 아니라 2 바이트를 의미합니다. 맞습니까? –

+0

아키텍처도 지정해야합니다. x86_64에서는 불가능합니다 –

답변

5

2 개의 opcode가 아니라 2 바이트라고 생각합니다. 당신이 정말로 2 개 op 코드를 의미하는 경우, 다음 3 바이트 대안이 마음에 와서 :

xor eax, eax 
    inc eax 

    sub eax, eax 
    inc eax 

나는 즉시 해당 할 것 2 바이트 순서 생각할 수 없다 - 나는 아무도 없다 생각한다.

2
mov $1, %eax 
nop 

충분 하시겠습니까? :)

실제로 두 개의 opcode가 아니라 2 바이트를 의미하는 경우 이러한 제약 조건에 어려움을 겪을 수 있습니다. 나는 당신이 활용할 수있는 것이 있는지 (예 : 다른 코드 중간에 코드를 실행하는 등) 주변 코드를 살펴볼 것이다. 또는 더 많은 코드 공간을 확보 할 수있는 방법을 찾으십시오.

+0

10 개의 opcode가 필요하면 좋겠 네요. P는 실제로 6 바이트입니다. (intel syntax 'mov eax, 1') – Spyros

+6

6 바이트이지만 2 개의 opcode 만 - 아마도 2 개의 opcode가 아닌 2 바이트를 요구할 것입니까? –

관련 문제