에있다 cortex-m3 지원 가변 명령 길이 인 thumb2는 시작 부분에서 간단히 시작하여 가변 길이 명령 세트를 디스 어셈블 할 수 없으며 쉽게 동기화되지 않고 출력이 가비지가되어 영원히 계속 남을 수 있습니다. 이 경우는 아니지만 오류가 발생할 것으로 예상됩니다. 디스어셈블러를 혼동하게하는 항목을 추가 한 것은 가능합니다.
또한 그래서,
껍질-m에게 단어의 첫 덩어리 인은 벡터 테이블 수 없습니다 ... 여기 많은 데이터를 가질 수있다, 또는 코드를 압축 할 수있다, 또는 누가 어떤 다른 알고 이 코드는 무엇입니까? gnu 도구를 사용하는 방식으로 결과물을 살펴보면 실제 코드처럼 보이지 않으므로 아마도 암호화되거나 압축되어있을 것입니다. 스택 프레임이 빌드되고 함수가 팝후 (ldmia)로 끝나는 것을 보시겠습니까? 그런 다음 몇 가지 정적 단어가있는 링크 레지스터가 포함 된 다음 그 다음 함수의 시작과 비슷합니다. 컴파일 된 코드가 전부는 아니지만 일부는 컴파일 된 코드처럼 보일 것입니다.
일부 펌웨어를 해킹하려고하는 경우이 방법이로드되는 방법과 위치를 파악하고 명령어 세트 시뮬레이터를 작성/사용해야합니다. 그래도 벡터 테이블을 시작하지 않고 재미있게 지내십시오.
당신은 당신이 그 srec 옵션을 가지고 프로그램을 만들 수 있습니다,
S123110001BE8110204D5401BE96102452...
0x1100 : 0x01BE
0x1102 : 0x8110
0x1104 : 0x204D
0x1108 : 0x5401
0x110C : 0xBE96
0x110E : 0x1024
등 그 주소의 컨텐츠를 분실하거나 아마
0x1100 : 0xBE01
0x1102 : 0x1081
을 byteswapped 당신이 당신의 분해를했던 방법 :
을
.hword 0xbe01
.hword 0x1081
항목의 인접한 주소 범위마다 하나씩, 주소 점프가 새로 시작될 때 파일을 만들고, 각 섹션의 시작 주소를 커버하는 링커 스크립트를 만들고, 어셈블하고, 그 중 하나에서 _start 레이블을 만들고, 스크립트와 링크 한 다음 분해 할 수있는 엘프를 가지고 있지만, 여전히 문제가 될 것이라고 예상하지만, 상대 주소 지정은 의미가 있고 절대 주소 지정이됩니다.
는 또한 진짜 가정 당신의 진입 점
S903189351
주의, 이유가 있다고 가정 없습니다.
[리버스 엔지니어링] (http://reverseengineering.stackexchange.com/) 사이트에서이 질문을하십시오. –