Configuração do IDA - i51.cfgApesar de não ser indispensável, existe um passo na instalação do IDA que pode ajudar no reconhecimento do código.
Numa instalação padrão do IDA, quando você escolhe o processador 8051 se depara com esta tela:
Onde você simplesmente dá OK para prosseguir. O procedimento a seguir vai mudar isso para que você possa escolher esta opção:
Dentro de alguns ZIPs com os scripts de parse (*.idc), você vai encontrar um arquivo i51.cfg. O conteúdo desse arquivo deve ser
mesclado ao conteúdo do mesmo arquivo já existente na pasta CFG do IDA.
Por exemplo, este é o conteúdo que precisa ser mesclado. Eu dividi as duas seções do arquivo com cores diferentes:
.default MT1389
.MT1389
; Mediatek 1389
; MEMORY MAP
area DATA RAM 0x00000:0x00080
area DATA FSR 0x00080:0x00100
area XTRN XRAM 0x0F800:0x0FF00
area CODE ROM 0x00000:0x10000
;area CODE ROM1 0x10000:0x20000
;area CODE ROM2 0x20000:0x30000
;area CODE ROM3 0x30000:0x40000
;area CODE ROM4 0x40000:0x50000
;area CODE ROM5 0x50000:0x60000
;area CODE ROM6 0x60000:0x70000
;area CODE ROM7 0x70000:0x80000
; Interrupt and reset vector assignments
interrupt Reset 0x0000 RESET
interrupt ExtInt0 0x0003 External interrupt 0
interrupt TimInt0 0x000B Timer 0 overflow
;interrupt IE1 0x0013 External interrupt 1
;interrupt TF1 0x001B Timer 1 overflow
;interrupt RI0_TI0 0x0023 Serial channel 0
interrupt TimInt2 0x002B Timer 2 overflow/ext. reload
;interrupt IADC 0x0043 A/D converter
;interrupt IEX2 0x004B External interrupt 2
;interrupt IEX3 0x0053 External interrupt 3
;interrupt IEX4 0x005B External interrupt 4
;interrupt IEX5 0x0063 External interrupt 5
;interrupt IEX6 0x006B External interrupt 6
;interrupt RI1_TI1 0x0083 Serial channel 1
;interrupt CTF 0x009B Compare timer overflow
; INPUT/OUTPUT PORTS
P0 0x0080 Port 0
P0.P0.7 7
P0.P0.6 6
P0.P0.5 5
P0.P0.4 4
P0.P0.3 3
P0.P0.2 2
P0.P0.1 1
P0.P0.0 0
SP 0x0081 Stack Pointer
DPL 0x0082 Data Pointer, Low Byte
DPH 0x0083 Data Pointer, High Byte
;RES84 0x0084 RESERVED
;RES85 0x0085 RESERVED
WDTREL 0x0086 Watchdog Timer Reload Reg.
PCON 0x0087 Power Control Register
TCON 0x0088 Timer Control Register
TMOD 0x0089 Timer Mode Register
TL0 0x008A Timer 0, Low Byte
TL1 0x008B Timer 1, Low Byte
TH0 0x008C Timer 0, High Byte
TH1 0x008D Timer 1, High Byte
;RESERVED008E 0x008E RESERVED
;RESERVED008F 0x008F RESERVED
P1 0x0090 Port 1
P1.SDA 7 SDA data EEPROM
P1.SCL 6 SCL clock EEPROM
P1.DATA_PIN 5 VFD DATA PIN
P1.STROBE_PIN 4 VFD STROBE PIN
P1.CLK_PIN 3 VFD CLK PIN
P1.P1.A18 2 A18
P1.P1.A17 1 A17
P1.T2 0 T2
;RESERVED0091 0x0091 RESERVED
DPSEL 0x0092 Data Pointer Select Register
;RESERVED0093 0x0093 RESERVED
;RESERVED0094 0x0094 RESERVED
ASCL 0x0095
ADAT 0x0096
ACON 0x0097
SCON 0x0098 Serial Channel 0 Control Reg.
SBUF 0x0099 Serial Channel 0 Buffer Reg.
IEN2 0x009A Interrupt Enable Register 2
SCON2 0x009B Serial Channel 1 Control Reg.
SBUF2 0x009C Serial Channel 1 Buffer Reg.,
SREL2 0x009D Serial Channel 1 Reload Reg., low byte
;RESERVED009E 0x009E RESERVED
;RESERVED009F 0x009F RESERVED
P2 0x00A0 Port 2
P2.P2.7 7
P2.P2.6 6
P2.P2.5 5
P2.P2.4 4
P2.P2.3 3
P2.P2.2 2
P2.P2.1 1
P2.P2.0 0
IEN0 0x00A8 Interrupt Enable Register 0
IEN0.EA 7
IEN0.6 6
IEN0.5 5
IEN0.4 4
IEN0.3 3
IEN0.2 2
IEN0.1 1
IEN0.0 0
IP0 0x00A9 Interrupt Priority Register 0
;S0RELL 0x00AA Serial Channel 0, Reload Reg., low byte
PWM4P 0x00AA
PWM4W 0x00AB
;RESERVED00AC 0x00AC RESERVED
;RESERVED00AD 0x00AD RESERVED
WMKEY 0x00AE
;RESERVED00AF 0x00AF RESERVED
P3 0x00B0 Port 3
P3.P3.7 7
P3.P3.6 6
P3.T1 5
P3.T0 4
P3.P3.3 3
P3.P3.2 2 Select Flash
P3.P3.1 1
P3.P3.0 0
PSCL0L 0x00B1
PSCL0H 0x00B2 RESERVED
PSCL1L 0x00B3 RESERVED
PSCL1H 0x00B4 RESERVED
;RESERVED00B5 0x00B5 RESERVED
;RESERVED00B6 0x00B6 RESERVED
IPA 0x00B7 RESERVED
;IEN1 0x00B8 Interrupt Enable Register 1
IP 0x00B8
IP1 0x00B9 Interrupt Priority Register 1
S0RELH 0x00BA Serial Channel 0, Reload Reg., high byte
S1RELH 0x00BB Serial Channel 1, Reload Reg.,high byte
;RESERVED00BC 0x00BC RESERVED
;RESERVED00BD 0x00BD RESERVED
;RESERVED00BE 0x00BE RESERVED
;RESERVED00BF 0x00BF RESERVED
;IRCON 0x00C0 Interrupt Request Control Register
P4 0x00C0 Interrupt Request Control Register
CCEN 0x00C1 Comp./Capture Enable Reg.
CCL1 0x00C2 Comp./Capture Reg. 1, Low Byte
CCH1 0x00C3 Comp./Capture Reg. 1, High Byte
CCL2 0x00C4 Comp./Capture Reg. 2, Low Byte
CCH2 0x00C5 Comp./Capture Reg. 2, High Byte
CCL3 0x00C6 Comp./Capture Reg. 3, Low Byte
CCH3 0x00C7 Comp./Capture Reg. 3, High Byte
T2CON 0x00C8 Timer 2 Control Register
;CC4EN 0x00C9 Comp./Capture Enable 4 Reg.
T2MOD 0x00C9 Comp./Capture Enable 4 Reg.
RCAP2L 0x00CA Com./Rel./Capt. Reg. Low Byte
RCAP2H 0x00CB Com./Rel./Capt. Reg. High Byte
TL2 0x00CC Timer 2, Low Byte
TH2 0x00CD Timer 2, High Byte
CCL4 0x00CE Comp./Capture Reg. 4, Low Byte
CCH4 0x00CF Comp./Capture Reg. 4, High Byte
PSW 0x00D0 Program Status Word Register
S1SETUP 0x00D1
S2SETUP 0x00D2
RAMBUF 0x00D4
DDCDAT 0x00D5
DDCADR 0x00D6
DDCCON 0x00D7
S1CON 0x00D8
S1STA 0x00D9
S1DAT 0x00DA
S1ADR 0x00DB
S2CON 0x00DC
S2STA 0x00DD
S2DAT 0x00DE
S2ADR 0x00DF
;CML0 0x00D2 Compare Register 0, Low Byte
;CMH0 0x00D3 Compare Register 0, High Byte
;CML1 0x00D4 Compare Register 1, Low Byte
;CMH1 0x00D5 Compare Register 1, High Byte
;CML2 0x00D6 Compare Register 2, Low Byte
;CMH2 0x00D7 Compare Register 2, High Byte
;ADCON0 0x00D8 A/D Converter Control Register 0
;ADDAT 0x00D9 A/D Converter Data Register
;DAPR 0x00DA D/AConverter Program Register
;P7 0x00DB Port 7, Analog/Digital Input
;ADCON1 0x00DC A/D Converter Control Register 1
;P8 0x00DD Port 8, Analog/Digital Input, 4-bit 0DD
;CTRELL 0x00DE Com. Timer Rel. Reg., Low Byte
;CTRELH 0x00DF Com. Timer Rel. Reg., High Byte
ACC 0x00E0 Accumulator
;CTCON 0x00E1 Com. Timer Control Register
USCL 0x00E1
CML3 0x00E2 Compare Register 3, Low Byte
CMH3 0x00E3 Compare Register 3, High Byte
CML4 0x00E4 Compare Register 4, Low Byte
CMH4 0x00E5 Compare Register 4, High Byte
UDT1 0x00E6
UDT0 0x00E7
UISTA 0x00E8
UIEN 0x00E9
UCON0 0x00EA
UCON1 0x00EB
UCON2 0x00EC
USTA 0x00ED
UADR 0x00EE
UDR0 0x00EF
;CML5 0x00E6 Compare Register 5, Low Byte
;CMH5 0x00E7 Compare Register 5, High Byte
;P4 0x00E8 Port 4
;MD0 0x00E9 Multiplication/Division Register 0
;MD1 0x00EA Multiplication/Division Register 1
;MD2 0x00EB Multiplication/Division Register 2
;MD3 0x00EC Multiplication/Division Register 3
;MD4 0x00ED Multiplication/Division Register 4
;MD5 0x00EE Multiplication/Division Register 5
;ARCON 0x00EF Arithmetic Control Register
B 0x00F0 B-Register
;RESERVED00F1 0x00F1 RESERVED
CML6 0x00F2 Compare Register 6, Low Byte
CMH6 0x00F3 Compare Register 6, High Byte
CML7 0x00F4 Compare Register 7, Low Byte
CMH7 0x00F5 Compare Register 7, High Byte
CMEN 0x00F6 Compare Enable Register
CMSEL 0x00F7 Compare Input Select
P5 0x00F8 Port 5
;RESERVED00F9 0x00F9 RESERVED
P6 0x00FA Port 6
;RESERVED00FB 0x00FB RESERVED
;RESERVED00FC 0x00FC RESERVED
;RESERVED00FD 0x00FD RESERVED
;RESERVED00FE 0x00FE RESERVED
;RESERVED00FF 0x00FF RESERVED
A primeira linha é uma diretiva completa:
.default MT1389Ela informa que a seção MT1389 (a seguinte inteira) é a seção default quando se escolhe o tipo de processador i51.
Você precisa
substituir a diretiva .default já existente no arquivo pela diretiva acima. Normalmente, a diretiva que é instalada pelo IDA é esta:
.default C517Veja na primeira figura deste texto como isso pré-seleciona "C517".
O restante, toda a seção .MT1389, precisa ser
acrescentado ao arquivo i51.cfg.
Lembre-se: este procedimento
não é indispensável. Dá para trabalhar perfeitamente no código usando as opções padrão do IDA. Os scripts não vão dar erro algum pela falta desta configuração. E eu não consegui perceber qualquer diferença entre usar ou não isto. Mas não estaria nos arquivos se não fosse para ajudar.