이전에 부트 로딩 목적으로 16 진수 파일을 구문 분석했습니다. 이것은 마이크로 칩의 XC32 툴 체인을 사용하여 생성 된 16 진수 파일로 처음입니다. 지금 당장 나는 16 진수 파일과 디스 어셈블리 간의 차이점이있는 것으로 나타났습니다.16 진수 파일 및 디스 어셈블리 불일치
육각 파일의 처음 세 행 : 목록 파일에서
:020000040000fa
:020000041d00dd
:10000000030000100000000040f3060000000000a4
:
9d000000 <_reset>:
9d000000: 10000003 b 9d000010 <__reset_switch_isa>
9d000004: 00000000 nop
9d000008 <__reset_micromips_isa>:
9d000008: f340 0006 jalx 9d000018 <_startup>
9d00000c: 0000 0000 nop
공지 사항이 목록 파일에는 0x06을 포함해야처럼 9d000008 보이는 해결합니다. 그러나 16 진수 파일은이 위치에서 0x40을 나타내는 것 같습니다. 다음 3 바이트도 예상 된 순서가 아닙니다.
: 10 0000 00 03 00 00 10 00 00 00 00 40 F3 06 00 00 00 예상대로 파일을 다른 기록이 비록 내가 보이지만 바이트이 jalx
에 관한 00 00 A4
지시어가 고장난 것 같습니다. 누군가 나를 똑바로 세울 수 있습니까?
감사합니다.
업데이트 : 또 다른 복잡한 데이터 요소입니다. 디버거 (내 부트 로더를 사용하지 않음)를 사용하여 16 진수 파일을 파트로 플래시하는 경우. 내가 실행 메모리 및 분해 목록을 볼 수 있다면, 나는 다음을 참조 :
Address Instruction Disassembly
1D00_0000 10000003 BEQ ZERO, ZERO, 0x1D000010
1D00_0004 00000000 NOP
1D00_0008 0006F340 SLL S8, A2, 13
1D00_000C 00000000 NOP
IDE에서이 글은 프로그램 코드를 재 해석, 그것은 지금 SLL
명령이 아닌 JALX
을 보여줍니다. 이것은 컴파일러가 생성 한 시작 코드이므로 어떤 내용이어야하는지 확신 할 수 없습니다. 바이트 순서는 목록 파일이 아닌 16 진수 파일과 일치하므로, 마이크로 칩 도구는 16 진수 파일을 해석하지만 목록 파일과 일치하지 않습니다.
헥스 파일은 인텔 형식으로되어 있습니다. the : 8 바이트 뒤에 :가 단지 0 또는 1이면, I8 = 16 비트입니다. 0 ~ 3이면 I16 = 20 비트입니다. 단지 0, 1, 4, 5이면 I32 = 32 비트입니다. 마이크로 칩은 일반적으로 I8을 사용합니다. – cup
@ cup. 귀하의 의견을 보내 주셔서 감사합니다.모든 마이크로 칩이 생성 한 16 진수 파일은 모두 I32입니다. 위에 게시 한 스 니펫에는 처음 2 개 레코드가 32 비트 주소 지정을 허용하는 유형 4입니다. – user3692971
@ 동문회, 귀하의 회신에 감사드립니다. 나는 확실히 전문가는 아니지만 데이터 레코드의 주소를 오름차순으로 연속 된 순서로 나열된 바이트 만 보았습니다. 그것이 통역사가 어떻게 알 수 있을까요? 게시 된 업데이트 된 정보를 기반으로, 나는이 경우에 일어나고 있다고 생각하지 않습니다. – user3692971