이 질문은 이상하게 들릴 수 있지만 코드를 바이너리로 주입 할 때 필요합니다.2 바이트 (인텔)를 사용하여 eax = 1로 만듭니다.
캐어 플래그 나 다른 레지스터, 다른 레지스터 등과 같은 내용에 의존하지 않고 eax를 1과 동일하게 만드는 방법을 생각해 볼 수 있습니까?
그러나 2 바이트 만. 3은 쉽고 여러 가지 방법으로 수행 할 수 있지만 2로 끝낼 수 있습니까?
이 질문은 이상하게 들릴 수 있지만 코드를 바이너리로 주입 할 때 필요합니다.2 바이트 (인텔)를 사용하여 eax = 1로 만듭니다.
캐어 플래그 나 다른 레지스터, 다른 레지스터 등과 같은 내용에 의존하지 않고 eax를 1과 동일하게 만드는 방법을 생각해 볼 수 있습니까?
그러나 2 바이트 만. 3은 쉽고 여러 가지 방법으로 수행 할 수 있지만 2로 끝낼 수 있습니까?
2 개의 opcode가 아니라 2 바이트라고 생각합니다. 당신이 정말로 2 개 op 코드를 의미하는 경우, 다음 3 바이트 대안이 마음에 와서 :
xor eax, eax
inc eax
sub eax, eax
inc eax
나는 즉시 해당 할 것 2 바이트 순서 생각할 수 없다 - 나는 아무도 없다 생각한다.
mov $1, %eax
nop
충분 하시겠습니까? :)
실제로 두 개의 opcode가 아니라 2 바이트를 의미하는 경우 이러한 제약 조건에 어려움을 겪을 수 있습니다. 나는 당신이 활용할 수있는 것이 있는지 (예 : 다른 코드 중간에 코드를 실행하는 등) 주변 코드를 살펴볼 것이다. 또는 더 많은 코드 공간을 확보 할 수있는 방법을 찾으십시오.
10 개의 opcode가 필요하면 좋겠 네요. P는 실제로 6 바이트입니다. (intel syntax 'mov eax, 1') – Spyros
6 바이트이지만 2 개의 opcode 만 - 아마도 2 개의 opcode가 아닌 2 바이트를 요구할 것입니까? –
2 개의 opcode가 아니라 2 바이트를 의미합니다. 맞습니까? –
아키텍처도 지정해야합니다. x86_64에서는 불가능합니다 –