Ax 인코딩은 프로세서가 팔 모드 일 때 해당 인코딩을 사용하여 찾은 비트를 디코딩합니다. 하나 이상의 A1, A2가있는 경우 다른 기능이나 이유가 분명해야합니다. 두 가지 지침은 별도로 간주 될 수 있습니다 (예를 들어, x86의 mov 명령에는 많은 인코딩이 있습니다. 각 인코딩을 별도의 "지침"으로 취급하십시오.
그런 다음 Tx 변형이 있으며, 엄지와 엄지 2 확장입니다. 엄지 손가락은 모두 16 비트이며 (bl은 두 개의 별도 16 비트 명령어로 디코딩 할 수 있습니다) 그 아래의 설명은 "모든 엄지 손가락 변종"또는 "현재까지의 armv4t"또는 일부 언어를 나타냅니다. thumb2 확장은 모두 32 비트이며, 처음 16 비트는 엄지 손가락 세계에서 정의되지 않은 명령어입니다. 이것들은 그것들을 지원하는 아키텍처에 더 많은 제약이 있습니다.
이러한 프로세서 중 하나에 대해 디스어셈블러를 완전히 만들 수는 없습니다. x86 또는 다른 많은 프로세서 (모두?)와 같은 이유 때문입니다. 모든 지시 사항이 하나의 모드 (팔 또는 엄지 또는 엄지 손가락 + 썸 2)이지만 모드 혼합 (팔 + 엄지 손가락) 모드가 아니라고 가정하면 모든 것이 고정 된 명령어 길이이고 모든 데이터와 코드를 간단히 분해 할 수 있으므로 실행할 수 없습니다 어떤 문제로. 혼합 모드를 분해하기 위해서는 기본적으로 명령을 에뮬레이트/실행하고 명령 흐름을 따라야합니다 (가변 길이 길이 명령 세트 디스어셈블러처럼) 변환을 찾으려고합니다. 물론 여기에서의 문제는 물론 최소한의 부하에서 다중 명령입니다. 그런 다음 레지스터가 bx 인 레지스터, 때로는 명령 계산에 관련된 수학이 있으며 주소 계산 또는로드가 bx보다 먼저 수행된다는 보장이 없습니다. 그래서 당신은 그 중 일부를 할 수 있고 프로그램을 분해함으로써 먼 길을 갈 수 있습니다.
사용중인 프로세서에서 thumb2가 지원되거나 허용되는 경우 엄지 코드에 대한 진입 점을 감지 한 시간에 가변 명령 길이 문제가 있습니다. 그리고 이미이 작업을 수행하지 않는 경우 코드 실행을 따라 지침 시작 위치를 결정해야합니다 (초등 가변 명령 길이 디스 어셈블리).
기술 참조 설명서와 아키텍처 참조 설명서를 함께 사용하면 해당 아키텍처 (trm)의 아키텍처와 구현에서 팔과 썸 모드가 가능한지 알 수 있습니다. 나는 A9가 팔 엄지 손가락과 엄지 손가락 2를 지원한다고 가정 할 것이다.
팔을지지하지 않는 것으로 제한된 외피 -m 패밀리는 피질 -m0 (및 m1)이 armv6m이고 m3 및 m4가 armv7m (수십개 (armv7m에서 수십 개의 thumb2 확장에 대한 지침). armv7-m과 armv7-ar 매뉴얼은 예를 들어 -m 변종에 대해 별도의 아키텍처 참조 설명서가 있습니다.
대단히 감사합니다. 모든 답변이 정말 유용합니다. 나는 너무 빨리 대답 할 것으로 기대하지 않았다. – user2299676