2010-08-13 5 views
4

임 현재 디스어셈블러를 쓰려고합니다. 나는 오피 코드와 그 의미는 다음 목록을 발견, 그래서 난 런타임에 구문 분석하기로 결정 http://mprolab.teipir.gr/vivlio80X86/pentium.txtx86 opcode 인코딩 : sib 바이트

하지만 난이 오피 × 00에서 막혔어요 : 그것은 등록/modbyte옵니다. 그것을 파싱하는 것은 나에게별로 문제가되지 않았다. 하지만 Scale-Index-Byte에 문제가 있습니다 : 실제로 인덱스 레지스터로 esp를 지정하면 인덱스 레지스터가 없다는 것을 의미합니다. 기본 레지스터에도 ebp가 적용됩니다. 하지만 나는 C++ 인라인 어셈블러로 그것을 시험해 보았다. 컴파일 할 수있다 : "[ebp * 2 + ebp], cl"추가

ebp를 실제로 기본 레지스터로 사용할 때 어떻게 ebp를 기본 레지스터로 사용할 수 있을까? 전혀 기본 레지스터를 사용하지 마십시오!

답변

6

"누락 된 EBP"경우는 ModR/M.Mod 필드의 값이 00 인 경우에만 적용됩니다.

004C6D00 추가 [EBP는 + EBP * 2]

+0

확인 거기 다른 누락 카스티 : 한 도심 EBP 필요한 경우, 어셈블러는 01 진수로 모 변경되고 제로 값으로 8 비트의 용량을 추가 그러면 8 비트 및 32 비트 변위 값을 등록합니까? 다른 이상한 부조화가 있습니까? – Zotta

+1

EBP 만 "누락"되었습니다. 당신이 "EBP 기반 누락"때문에 "실종 ESP 지수"그리고 addresing 순수 [변위]를 인코딩 할 수 있습니다 두 가지 방법 : 000D 78563412 추가 [12345678], CL 000C25 78563412 추가 [12345678],에, 그러나 을 카스티 64 비트 모드에서 첫 번째 연산 코드의 의미는 다음과 같습니다. 000D 78563412 add [rip + 12345678], cl EDIT : 똥이 줄 바꿈으로 인해 주석을 덜 읽을 수 있습니다. – MazeGen

+0

이제는 작동합니다. 큰 감사를 드린다! – Zotta

관련 문제