Décompilation EDIABAS


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:

KOMBI36.PRG

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

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

KOMBI36.XML et xtract.css

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.

KOMBI36_DECOMPILATION.prg.txt

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