Fall.Exe
#26
Posté 12 août 2012 - 13:27
#27
Posté 12 août 2012 - 13:35
De plus, si on arrive à traduire directement, il n'y aurra normalement rien de plus à faire pour que ce soit compatible avec DaggerXL.
#28
Posté 12 août 2012 - 16:21
Mais en attendant, comme dit Ancestral, on parle bien du Daggerfall de Bethesda, pas d'un hypothétique remake. Ce problème, il faut qu'on trouve à le résoudre... ou qu'on vive avec...
Les russes n'ont pas été confronté à ça ?
Coaching de PNJs chez Morrowind Renaissance
#30
Posté 31 août 2012 - 19:57
En fait le désassembleur ne traite que la toute première partie de Fall.exe et ignore royalement les 90% qui suivent... et où se trouvent nos chaînes, bien entendu. L'impression que ça me donne est qu'il traite le code de DOS/32A qui se trouve en tête de fichier et non réellement le code de Daggerfall qui suit, mais ça n'est qu'une impression.
Bref, c'est pas gagné ! A suivre, lentement et au gré de mes envies car ces essais de désassemblages ne sont pas des plus passionnants vu les échecs répétés, mais d'un autre côté ces échecs répétés sont suffisamment frustrants pour entretenir la flamme. On verra...
#31
Posté 31 août 2012 - 21:30
#32
Posté 02 septembre 2012 - 21:20
Mais par ailleurs je pense que j'en reviens aussi à un problème déjà évoqué, à savoir que je ne peux pas débugger Fall.exe, programme 16 bits, dans un environnement 64 bits. Là je fais mes essais sous W7 64 bits avec Sandboxie pour ne pas polluer mon PC en essayant des outils de sources diverses et parfois incertaines, mais quand je veux lancer le programme sous débugger, je me fais jeter pour exécution impossible avec un OS 64 bits.
Je vais essayer la même chose sous XP 32 bits, et si ça ne fonctionne toujours pas il me faudra donc bien installer, comme tu me l'avais suggéré, un Win98SE dans une machine virtuelle (VirtualBox) et voir ce que ça donne... si mes desassembleurs fonctionnent sous W98 !
On n'est pas rendus...
Je n'ai pas de meilleurs résultats sous XP 32 bits. Le désassemblage de Fall.exe par IDA 5.0 merdoie toujours autant (seul le tout début du programme est lu), et son exécution par le débugger de W32DASM est toujours impossible car il ne trouve pas le point d'entrée du programme. Et pourtant W32DASM n'est pas si mauvais que ça puisque le débuggage de Dosbox fonctionne si bien que je peux lancer Daggerfall par son intermédiaire. Mais ce n'est pas le code de Dosbox que je veux debugger mais celui de Fall.exe, donc je l'ai toujours dans l'os.
Sans doute faut-il en revenir aux versions 16 bits de WDASM, mais ces dernières sont très difficiles à trouver de nos jours. J'ai dû avoir ça en 2000 pour faire sauter la protection de Pharaon (piratage perso d'un jeu que j'avais acheté, pour le plaisir de voir si j'en étais capable et pour passer le temps, jamais diffusé sur Internet vu que c'était juste pour le fun), mais depuis le temps, ce programme existe-t-il encore dans un recoin secret de mes sauvegardes historiques ? Et puis Pharaon, sorti fin 1999, tournait sous W98SE alors que Daggerfall est sorti en 1996 pour DOS... et Windows 95. Bon, faut voir. Ah, l’archéologie !
Modifié par Daneel53, 31 août 2012 - 22:38.
#33
Posté 02 septembre 2012 - 21:48
#34
Posté 02 septembre 2012 - 23:25
D'après un message perso de Ferital au mois de juillet, le DOS extender recalcule les adresses en mémoire après chargement, mais il ne peut le faire qu'à partir d'une table d'offsets qui donne les adresses relatives des chaines entre elles. Par exemple, les premières chaines de la ressource 1 de Fall.exe font respectivement 7, 3E (62), 2E (46), 15 (21) et 14 (20) octets, donc on devrait trouver quelque part un tableau qui liste ces longueurs ("07 3E 2E 15 14..." ou "07 00 3E 00 2E 00 15 00 14 00...") ou qui contient une liste d'adresses séparées par ces valeurs ("07 00 45 00 73 00 88 00 9C 00..."). Mais les quelques recherches manuelles que j'ai pu faire ce soir avec un éditeur hexa dans Fall.exe ne m'ont pas permis de trouver une telle liste. Reste la solution d'écrire un programme qui fouille le fichier dans tous les sens jusqu'à ce qu'il arrive à trouver quelque part une liste de valeurs compatibles de ces écarts.
J'vous l'ai dit : on n'est pas rendus...
#35
Posté 03 septembre 2012 - 09:06
Modifié par Porygon, 03 septembre 2012 - 09:07.
#36
Posté 03 septembre 2012 - 09:10
Porygon, le 03 septembre 2012 - 09:06, dit :
Je n'y connais pas grand chose moi non plus mais... DaggerXL ne peut rien pour nous. Ce n'est pas une surcouche, une émulation ou quoi que ce soit, mais une réécriture. C'est sûr qu'on doit pouvoir le debugger mais ça nous fera une belle jambe pour connaître les tables d'adresses de FALL.EXE
Coaching de PNJs chez Morrowind Renaissance
#37
Posté 03 septembre 2012 - 09:22
abg, le 03 septembre 2012 - 09:10, dit :
Porygon, le 03 septembre 2012 - 09:06, dit :
Je n'y connais pas grand chose moi non plus mais... DaggerXL ne peut rien pour nous. Ce n'est pas une surcouche, une émulation ou quoi que ce soit, mais une réécriture. C'est sûr qu'on doit pouvoir le debugger mais ça nous fera une belle jambe pour connaître les tables d'adresses de FALL.EXE
Hum je ne suis pas tout à fait d'accord quant au fait que ça soit une réécriture car pour moi ça veux dire qu'on a pas besoin de l'exécutable du jeu or ici il nous le demande et vérifie même si ça correspond bien à une certaine version précise, mais peut-être que je me trompe je n'en sais rien .
#38
Posté 03 septembre 2012 - 09:35
Mais ça, on sait déjà faire...
Coaching de PNJs chez Morrowind Renaissance
#39
Posté 03 septembre 2012 - 11:23
#40
Posté 04 septembre 2012 - 23:34
Quoiqu'il en soit j'ai l'intention cette semaine d'utiliser la force brute du PC pour fouiller Fall.exe de fond en comble et chercher une suite d'octets qui ressemble à une suite d'adresses croissantes séparées par les tailles de quelques chaines successives de la ressource 1.
Autrement dit, s'il y a dans les ressources 1 cinq chaines successives de longueurs respectives 6, 3, 10, 5 et 12 caractères, je vais glisser depuis le début du fichier octet par octet pour chercher une suite d'octets (ou plutôt de mots de 16 bits) ayant la relation "valeur1", "Valeur1+6", "Valeur1+9", "Valeur1+19, "Valeur1+24", "Valeur1+36". Si j'arrive à trouver ça, je devrais être dans la table d'offsets !
C'est l'avantage d'un PC : c'est lui qui va fouiller les 1802000 octets du fichier pour faire cette opération.
Edit du 5 septembre à 00:30
Bon, c'est vraiment très étrange.
J'étais sur le point de crier victoire car je pense avoir localisé quelques offsets comme par exemple la liste des états des objets (de cassé à New), une liste de matériaux (de eboni à cristal) ou la liste des huits points cardinaux (de Nord à NordOuest). Car il serait quand même très étonnant d'avoir mis la main trois fois sur six adresses successives ayant les valeurs attendues suivant la formule ci-dessus et que ça ne corresponde pas aux offsets des chaines en question.
Oui mais voilà. Il faut faire la preuve que c'est bien ça, alors avec mon éditeur hexa j'ai modifié quelques adresses pour essayer de mettre en évidence un défaut d'affichage, mais rien à faire, je n'arrive pas à faire afficher "uir" au lieu de "Cuir" ou "ud-Est" à la place de "Sud-Est". J'ai même fini par mettre la même adresse sur les huit directions, mais ça n'a rien changé !!!
Alors soit je n'ai pas de chance et je tombe systématiquement sur des propos ou des matériaux enregistrés dans la sauvegarde (mais ça ne semble pas être le cas en fouillant les fichiers de sauvegarde), soit les offsets ne sont pas ce que je crois mais comme il y a à chaque fois une seule suite compatible dans tout le fichier, je ne vois pas comment, soit il y a un phénomène qui m'échappe totalement.
Bon, la nuit porte conseil paraît-il, je reprendrai mes essais demain. En tout cas si j'ai bien situé des offsets, il est clair qu'il n'y a pas une table d'offsets pour la ressource 1 mais une multitude, vu que les trois suites que j'ai trouvées sont dans des endroits bien différents séparés par des zones qui ne sont clairement pas des listes d'offsets. C'est pour dire que la modification de tout ça ne pourra pas être faite de façon automatique mais à la mimine. Ca promet !
Modifié par Daneel53, 04 septembre 2012 - 23:35.
#41
Posté 05 septembre 2012 - 06:42
Donc d'après ce que tu nous explique ils n'ont pas fait une table générale mais plusieurs dizaines regroupés par "thème" c'est ça ?
Sinon peux-tu donner les offsets correspondant à ce que tu penses être la table des points cardinaux et des matériaux, histoire que je vois à quoi ça ressemble.
#42
Posté 05 septembre 2012 - 08:26
Porygon, le 05 septembre 2012 - 06:42, dit :
Ou pire : Une table "mouvante"... un exe qui s'automodifie en mémoire... une table qui est située ailleurs que dans l'exe... Des exemples apocalyptiques on peut en trouver !
On est pas sorti de l'auberge
Avec un peu de chance, on va inspirer un nouveau strip à Matsch, s'il passe par là : Les PFDistes font tourner les tables; esprit de Julian Lefay es-tu là ? Un coup pour oui, deux coups pour non
Coaching de PNJs chez Morrowind Renaissance
#43
Posté 05 septembre 2012 - 12:57
Je viens de refaire quelques essais rapides après le café, et il n'y a pas de doute sur le fait que j'ai trouvé des tables d'offsets.
Là je viens de mettre en évidence à partir de l'octet 1802952 de Fall.exe une suite d'offsets qui couvrent les entrées 1328 Roi à 1339 Lady, et les 4 entrées suivantes (de Alik'r Desert à Daggerfall Bluffs) continuent la suite. Donc une suite d'adresses qui couvre 16 entrées successives des Ressources 1, je considère que le concept est validé !
Reste à réussir à modifier ces offsets pour en voir les effets, et c'est là que j'ai échoué cette nuit. Peut-être m'y suis-je mal pris, la fatigue... Je referai donc des essais de modifs ce soir.
Pour info, un offset tient sur 4 octets dont deux sont à 00 00 et les deux suivants (précédents ?) à l'envers (à la sauce Intel). Donc par exemple on peut trouver 00 00 F8 00 puis 00 00 06 01 : ce sont les chiffres hexa 00F8 (248) et 0106 (262) écrits sur 32 bits, et ces deux valeurs sont séparées de 14 octets, ce qui indique une chaine de 13 octets suivie de son 0 séparateur habituel.
Dans l'exemple ci-dessus, les premiers offsets depuis 1802952 font 9F 3F, A4 3F, AA 3F et AF 3F, ce qui donne des différences de 5, 6 et 5, ce qui correspond bien aux tailles des chaines anglaises King (4), Queen(5) et Duke(4) suivies de leur zéro.
Pour info complémentaire, suite à mes essais d'hier soir, les offsets pour les entrées suivantes :
- Cassé à Peu utilisé commence en 1776398
- Nord à Sud-Ouest commence en 1776918
- Eboni à Cristal commence en 1025676
A suivre...
#44
Posté 05 septembre 2012 - 15:34
Après quelques essais rien de concluant, si ce sont bien les tables tant recherchées alors elle doivent pouvoir se modifier (normalement) ce que j'ai fais mais le problème vient après pour essayer. Il faut nécessairement dépasser l'espace réservé ce qui est impossible a faire avec le logiciel, pas grave on rajoute un octet à la main on lance et là surprise le jeu ne démarre même pas. Ca m'était déjà arrivé en changeant deux ou trois choses. Du coup je suis en train de me demander si il n'existerais pas une autre table qui elle vérifie la taille à l'octet près de FALL.EXE et si elle diffère par rapport d'une certaine référence le jeu ne se lance pas. Et le problème ne vient pas du fait d'avoir changé la table car après l'avoir fait j'ai lancé le jeu et tout fonctionnait, après ça vient peut-être de moi qui ait un problème avec mon éditeur hexa (très basique).
#45
Posté 06 septembre 2012 - 12:18
Par exemple, en prenant les valeurs de mon exemple ci-dessus, si je remplace à l'adresse 1802952 de Fall.exe les valeurs 9F 3F par A0 3F, le programme devrait lire "oi" (version française) et non "Roi" puisque je lui indique de commencer un octet plus loin. Cette façon de faire ne fait pas planter le soft... mais mes essais d'hier soir n'ont rien donné, c'est comme si je n'avais rien changé !? Erreur de procédure, peut-être, ou mauvais choix d'offset, je ne sais. Et c'est pourquoi il me faudra faire des essais plus exhaustifs à une heure décente où j'ai tous mes esprits.
Mais pour l'instant, comme indiqué ce midi, je vais rajouter du code à mon programme dans le but de dresser une carte exhaustive des offsets potentiels des 2500 entrées des Ressources 1. Alors, à l'attaque !
Edit du jeudi 6, 14h:
Pas de tests complémentaires hier soir car j'ai commencé à modifier substantiellement mon code.
Auparavant je me contentais de lui indiquer à la main une suite de 6 différences d'entrées progressives (6, 6+12, 6+12+5... suivant les tailles des chaines visées que je choisissais au pif) et je laissais le programme fouiller Fall.exe du premier au dernier octet pour trouver une suite correspondante (éventuellement partielle). Mais désormais je veux partir des entrées elles-même, dont les tailles sont stockées lors de la lecture de Fall.exe et, de la première à la dernière, fouiller Fall.exe et faire cracher dans un fichier texte externe toutes les suites d'offsets compatibles avec la longueur de la table et les entrées concernées. Car il faudra bien être un jour exhaustif et savoir où se trouve l'offset de telle ou telle entrée.
Par exemple, pour reprendre la suite partant de Roi mise en évidence hier, je ne sais pas jusqu'où elle va car il n'y a pas de raison pour que ça s'arrête à Daggerfall Bluffs puisqu'il y a d'autres régions derrière (et la suite commençait peut-être avant Roi, d'ailleurs). Mon futur programme parcourra la suite jusqu'à trouver à partir de quelle entrée ça ne va plus, et sauvegardera le fait qu'il existe une table cohérente située à telle adresse qui couvre les entrées X à Y, en donnant au passage l'adresse de l'offset de chacune des entrées concernées.
La moulinette automatique est en cours de codage, ça sortira un de ces jours prochains suivant mon temps libre et le temps nécessaire pour la mettre au point. Et je n'ai aucun doute sur le fait qu'il en résultera pas mal de solutions multiples qu'il faudra lever à la main...
Modifié par Daneel53, 05 septembre 2012 - 20:00.
#46
Posté 06 septembre 2012 - 18:49
Modifié par Porygon, 06 septembre 2012 - 18:49.
#47
Posté 06 septembre 2012 - 19:54
Si tu vas voir avec un éditeur héxa le paquet de Ressources 1 qui commence à l'adresse 0x1A4B1B (1723163), tu comprendras tout de suite.
Modifié par Daneel53, 06 septembre 2012 - 20:02.
#48
Posté 06 septembre 2012 - 20:17
#49
Posté 07 septembre 2012 - 01:30
Pourtant il n'y a qu'un seul endroit dans Fall.exe où la suite d'offsets est conforme aux tailles des six mots suivant Eboni, donc ça ne peut pas être ailleurs. Là, je patauge... Bon, je vais quand même poursuivre mon programme, on verra bien. Une idée géniale finira peut-être par s'allumer dans nos cerveaux.
Je crois que j'ai trouvé ! En fait Eboni serait la fin de la suite de huit mots qui commence à Fer, et c'est une nouvelle suite qui commence à partir de Cuir et là ça pourrait se trouver à l'offset 1776354 et non 1025680. Et si on tape pas dans les bons offsets, ça expliquerait nos tests infructueux.
Jette un coup d'oeil sur le fichier joint, et ça devrait te donner des ouvertures. En principe, parmi les suites d'offsets candidates, les suites les plus longues sont les bonnes... et là ça s'enchaine bien depuis l'entrée 600 !
Fichier(s) joint(s)
Modifié par Daneel53, 07 septembre 2012 - 01:32.
#50
Posté 07 septembre 2012 - 07:09
0 utilisateur(s) li(sen)t ce sujet
0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)