Dans cet article je vais détailler la decompilation des fichiers de EDIABAS, plus particulièrement des .PRG.
Explications
Pour commencer les PRG sont des fichier qui contiennent les fonctions pour interroger chaque calculateurs. Un fichier PRG fait un calculateur ou une famille de calculateurs.
Ces fichiers sont issus de la compilation des programmes Ecrits en Best ou Best2 et on pour but d’êtres lancés par INPA ou Tool32 pour execution en passant par EDIABS
Fonctions et infos
Il est possible d’utiliser le logiciel xtract.exe dispo dans outes les installations d’EDIABS dans C:\EDIABAS\Bin\ pour récupérer au format XML grace a cette commande:
C:\EDIABAS\Bin\xtract.exe -xml <path to prg>
Ce fichier XML (accompagné de son CSS) permet d’avoir une vue globales des fonction des types de valeur retour et des commentaires.
Voici un extrait de retour grace a cet outils pour le KOMBI36.PRG
Il est aussi possible de récupérer les infos de base d’un ficher PRG au format txt avec cette commande
C:\EDIABAS\Bin\bestinfo.exe <path to prg> >> <Output>.txt
Le résultat est quasi identique a celui obtenu par xtract.exe mais au format TXT mais sans le résultat des fonctions. Juste le nombre et des nom de ces différentes fonctions.
Voici le résultat sur KOMBI36.PRG:
BEST object file : KOMBI36.prg
BIP version : 05.05.00
Revision number : 2.4
Last modification by BMW TP-421 Teepe, BMW TP-421 Drexel, BMW TI-433 Dennert, Wed Apr 14 10:29:00 1999
17 Jobs:
INFO
INITIALISIERUNG
IDENT
FS_LESEN
FS_LOESCHEN
DIAGNOSE_ENDE
GWSZ_RESET
SIA_RESET
FG_NR_LESEN
CODIERUNG_LESEN
STATUS_LESEN
SPEICHER_LESEN
STEUERN_ANALOG
STEUERN_TACHO_A
SELBSTTEST
STEUERN_SELBSTTEST
STEUERN_DIGITAL
Press any key to exit...
C’est une base de travail pour la suite. Grace a ca on a deja une vague idée de la composition d’un PRG et de son role.
Décompilation
Pour Décompiler les fichiers PRG il va vous falloir BESTDIS.
Ce logiciel va vous permettre de récupérer les tableau (lookups) visibles dans Tool32 mais aussi d’autres cachés. Mais surtout de récupérer les fonction au format assembleur.
Pour ca il faut comprendre l’assembleur, le stack, les différents types de variables et les fonctions dont certaines sont spécifiques au BEST et BEST2.
Voici un extrait des tableau compris dans KOMBI36.prg certains visibles dans Tool32 d’autres non.
TBEG "FORTTEXTE"
HEAD "ORT", "ORTTEXT"
LINE "0x00", "Interner Fehler (RAM)"
LINE "0x05", "EEPROM Lesefehler"
LINE "0x07", "K-Zahl fehlerhaft"
LINE "0x08", "A/D-Wandler, Wandlerzeit ueberschritten"
LINE "0x09", "Bordnetzfehler, Kl.15 high / Kl.R low"
LINE "0x0a", "Klemme 15 Ueberspannung"
LINE "0x0D", "Ueberstrom Messinstrumente"
LINE "0x0E", "PCVA thermisch ueberlastet"
LINE "0x0F", "SIA-Eingang defekt"
LINE "0x10", "Tankgeber defekt"
LINE "0x11", "Kuehlmitteltemperaturgeber defekt"
LINE "0x13", "Oeltemperaturgeber defekt"
LINE "0x15", "5-Volt-Spannung gestoert"
LINE "0x16", "KOMBI-Taste defekt"
LINE "0x18", "Geschwindigkeits-Signal gestoert"
LINE "0x19", "Drehzahlsignal gestoert"
LINE "0x1A", "Einspritzsignal gestoert"
LINE "0x1B", "Bremsbelagverschleiss"
LINE "0x1c", "Tankreservekontakt"
LINE "0x1E", "Fahrertuerkontakt"
LINE "0x1F", "Zuendschluesselkontakt"
LINE "0xff", "unbekannter Fehlerort"
TEND
TBEG "FARTTEXTE"
HEAD "ARTNR", "ARTTEXT"
LINE "0x00", "Kurzschluss gegen U-Batt"
LINE "0x01", "Kurzschluss gegen Masse"
LINE "0x02", "Leitungsunterbrechung"
LINE "0x03", "ungueltiger Arbeitsbereich"
LINE "0x04", "sporadischer Fehler"
LINE "0x05", "statischer Fehler"
LINE "0xFF", "unbekannte Fehlerart"
TEND
TBEG "SIARESET"
HEAD "SELECTOR", "RESET"
LINE "OEL_RESET", "0x01"
LINE "WEG_RESET", "0x02"
LINE "AG_OEL_RESET", "0x03"
LINE "ZEIT_RESET", "0x04"
LINE "unbekannt", "0x00"
TEND
TBEG "STEUERNANALOG"
HEAD "SELECTOR", "BYTE"
LINE "TACHO", "0x01"
LINE "DZM", "0x02"
LINE "KVA", "0x03"
LINE "TANK", "0x04"
LINE "TEMP", "0x05"
LINE "OELTEMP", "0x06"
LINE "IK_LCD", "0x07"
LINE "unbekannt", "0x00"
TEND
TBEG "STEUERNDIGITAL"
HEAD "SELECTOR", "BYTE"
LINE "GONG_T3", "0x01"
LINE "TANKRES", "0x02"
LINE "UEBERTEMP", "0x04"
LINE "BVA", "0x08"
LINE "GURT", "0x10"
LINE "EGS", "0x20"
LINE "AKUSTIK", "0x40"
LINE "ALLE_AN", "0x7F"
LINE "ALLE_AUS", "0x00"
LINE "unbekannt", "0x00"
TEND
Voici la fonction pour effacer les defaults du compteur.
FS_LOESCHEN#
; JOBNAME:FS_LOESCHEN
; JOBCOMMENT:Loeschen des Fehlerspeichers
; RESULT:JOB_STATUS
; RESULTTYPE:string
; RESULTCOMMENT:Liefert: OKAY od. ERROR_NACK
;
clear S1
move S1,S2
push #$1.L
clear S1
move S1,{$0D.B,$00.B,$05.B,$05.B}
push #$1.L
clear S2
xsend S2,{$0D.B,$00.B,$05.B,$05.B}
push #$1.L
pop L1
pop L0
pop L0
push L1
pop L0
move L0,#$3.L
push L0
atsp L1,#$4.L
clear S1
move S1,S2
clear L0
move B0,S1[L1]
push L0
pop L0
pop L1
push L0
move L0,#$9.L
push L0
pop L1
pop L0
comp L0,L1
jnz __00001DFA
push #$0.L
jump __00001E00
__00001DFA: push #$1.L
__00001E00: pop L0
jz __00001E39
nop
clear S1
move S1,"ERROR_NACK"
push #$1.L
ergs "JOB_STATUS",S1
pop L0
eoj
__00001E39: clear S1
move S1,"OKAY"
push #$1.L
ergs "JOB_STATUS",S1
pop L0
eoj
eoj
On peu remarquer que c’est de l’assembleur custom. J’ai réalisé un document contenant ce que j’ai compris de l’instruction set en attendant de faire ca au propre dispo ICI.
Simulation et analyse
Pour faire de la simulation et observer le stack et les variables il va vous falloir B2Disasm.exe. mais surtout des fichier de simulation correspondant au calculateur en cours de test.
Ce fichier de simulation (.sim) doit être dispo dans le dossier C:\EDIABAS\SIM\.
Si il n’existe pas déjà il va falloir le créer a la main
Pour le créer a la main il y a plusieurs façon de le faire.
La premiere consiste a remplir le fichier a la main avec les valeurs que son sait.
La seconde consiste a passer EDIABAS en mode TRACE et de lui faire générer le fichier ifh.trc qui contient les Output et Input enregistrés lors de la communication avec un calculateur.
L’idéal est d’utiliser Tool32 pour avoir les résultats de toutes les fonctions meme celles inutilisées par INPA. Mais certaines fonctions avec des paramètres a rentrer a la main avec une interface graphique que génère INPA. Il peu être donc utile d’utiliser aussi ce qui a été envoyé dans INPA pour agrémenter le fichier SIM.
Il y’a aussi un programme cité par BMW “trace2sim.exe” normalement dispo dans C:\EDIABAS\SIM\ mais je ne l’ai jamais trouvé qui permet de faire la conversion en automatique de fichier trace à la simulation en .sim
Exemple
Pour exemple je vais prendre le fichier du compteur de E36:
Je vais le passer dans bestdis pour récupérer une base de nom de fonction et quelles infos avec cette commande:
C:\EDIABAS\Bin\bestinfo.exe C:\EDIABAS\ECU\KOMBI36.prg >> KOMBI36C_INFO.prg.txt
Je récupère ensuite le fichier XML avec le descriptif un peu plus poussé des fonctions
C:\EDIABAS\Bin\xtract.exe -xml C:\EDIABAS\ECU\KOMBI36.prg
Je vais ensuite le passer dans BESTDIS
BESTDIS.EXE C:\EDIABAS\ECU\KOMBI36.prg
Je récupère ainsi le fichier qui contient l’assembleur.
Je vais ensuite le simuler pour ça je passe mon EDIABAS en mode TRACE en changeant le fichier INI comme suit.
TODO
Puis je lance toutes les fonctions sur mon compteur. je récupère ensuit ce fichier ifs.trc
TODO