Tracer les Dlls - Outils et Exercices

M

Mescalito

Invité
Provient du message de Myrdinn
Deuxième DWORD ClassID visible dans PlayerStat.txt, Monstats.txt Objects.txt Missiles.txt ou (Weapons.txt,Armors.txtx et Misc.txt) pour le type 4. Pour les monstres c'est leur PopulatedID dans MonStats.txt

Pour le PopulatedID, j'ai une question en ce qui concerne les monstres de l'extension.

Pour le classic, ca va de 0 à 409
Pour l'extension, ca va de 0 à 138

J'ai vu une valeur de 459 (1CB) sur un des 1ers ptits monstres acte5, pierre monde nivo 2.

C'était Engeance Majeure (Greater Hell Spawn)
Or, j'ai recherché ce monstre dans Monstats.txt et il était à la ligne 462 (PopulateID = 23).

La 1ere ligne concernant les monstres LoD commence à la ligne 439.
439 + 23 = 462 (la ligne à laquelle se trouve le monstre)

Alors d'où vient la valeur 459 ??

La 1ere ligne concernant un monstre dans Monstats.txt est à la ligne 2 avec PopulateID = 0.
Et il y a une ligne dans le fichier en plein milieu qui ne contient que Extension comme données.
Est-ce qu'elle compte pour du beurre aussi ?

Du coup on arrive à 462 - 2 - 1 = 459

En fait, j'ai l'impression de comprendre mais j'arrive pas à l'expliquer :rolleyes:

-------edit----------- :)

Une autre question / remarque.

Au début de la routine d'attaque, ESI contient l'objet Attaquant.
Il me semble que EBX contient l'objet Attaqué.

Je me suis laissé attaquer par un ptit monstre et j'ai observé ESI et EBX.
ESI pointait donc sur l'attaquant (le monstre) : 0614A800

A ce moment, EBX = 00FBFE00.
Comme j'avais déjà testé le tracage juste avant en attaquant, cette adresse contient mon perso (barb, dans l'état 3 -> Run : c'etait le cas :)) : 00FBFE00

Puis j'ai attaqué ce même monstre (ben vi, j'essaie de tracer mais je me défend :lol: )
ESI pointait sur attaquant (moi) : 00FBFE00
et
EBX pointait sur l'attaqué : 0614A800

Au bout d'une dizaine de vérifications, j'me suis arrêté là.
Pas assez pour en tirer une conclusion ? :)

-------re-edit--------

je sais pas si ce qui est au-dessus est vrai, mais j'ai remarqué un truc bizarre que je ne comprends pas
quand j'attaque un mort-vivant (squelette, zombie, ...)
ESI = moi
EBX = 0...
si lui m'attaque
ESI = lui
EBX = moi

Même comportement pour les wraith (ceux qui draine mana).

j'ai regardé un peu dans le fichier Monstats.txt pour voir un point commun entre ces différents monstres
la colonne EQ : eLUndead
là où elle est à 1, qd j'attaque EBX = 0

pour les autres que j'ai croisé sur mon chemin, EBX pointait sur le monstre
- 1er dword à 01
- 2eme -> id du monstre
- ...

vu l'heure tardive, je les ai pas tous testés :D
et désolé, tout ca est un peu en vrac ;)
 
E

enslaver

Invité
rah mydrinn c effrayant comment de posts tu as fait^^ j'ai travaillé pendant pres d'une heure a faire des liens sur la faq :D

:gratz: comme disais kalis, j'ai du créer une rubrike topics de mydrinn (enfin une rubrique liens^^)
 
J

Joel

Invité
Juste une chtite qouestionne :

Y a t il un moyen efficace de tracer D2Client ...
J'essaye de trouver le code d'affichage des hover text du characetr screen pour :
1) en rejouter sur les resistances pr montrer les absorb
2) corriger els bug d'affichage du block et du ar.

MAis a chauqe fois que j'essaye d emettre un breakpoint qqpart, il est triggeré sans fin des que j'essaye de revenir sur D1 :confused:

Sinon, Myrdynn, pourrions nous mettre en commun nos notes ?
J'ai une 100tianes de fonctions de D2Common avec proto complets ainsi que pas mal de structure du jeu , si ca t'intéresse ??
 
M

Myrdinn

Invité
Désolé je suis un peu en retard sur ce post.
Mais j'ai découvert la gestion de l'IAS sous trombe que j'ai posté dans le forum barbare et ca me prend beaucoup de temps.

Bon je répondrais en détail a vos réponses plus tard.
Rapidement.
@Mescalito. Bravo tu es sur la bonne voie, je donnerais beaucoup de détail sur les valeurs des différents registres en entrée.
Pour le coup des ElUndead je n'ai pas de réponse à te donner, tu connais déjà un élément qui m'était inconnu :D (L'élève dépassera bientot le maitre) NE t'inquietes pas quand tu vois un résultat sans le comprendre vraiment c'est toujours comme ca au début :D

@Joel avec plaisir. Et si tu le veux bien fait en également profiter PhrozenKeep je n'ai vraiment pas le temps de me consacrer à 2 forums, n'hesite pas à les compléter et les poster la bas . Je mettrais mes fichiers temporaires sur mon FTP ce midi (J'ai emmené mon portable au boulot exprès pour) avec un lien sur ce post , ils sont libres, vous pouvez les partager avec qui vous voulez.
Autrement il me reste un classeur entier de trace papier à rajouter dans ces fichiers (Bref je suis à la moitié de mes informations), ils evolueront encore. De plus ils ne sont pas très bien ordonnés, comme à l'origine je les ai fait pour moi ils sont un peu bordélique, je n'aurais pas le temps de faire le ménage.
Dernier point ils sont en anglais car j'utilise souvent les messages d'assertions pour nommer les valeurs et puis j'ai (grace à Hammerman, mais également Pau,l Jarulf, Sir General ... egalement toi Joel ) au moins doublé le nombre de valeur que je connaissait

Bref à dans une heure ou 2 pour les fichiers.


EDIT J'oubliais Joel.
Hum je ne suis pas très familiarisé avec le code client mais voila une astuce qui marcherait peut être.
Tu mets un breakpoint dans D2Game.dll
Tu t'arretes sur ce breakpoint.
Tu en mets un deuxième à un endroit que tu sais que tu peux déclencher (Démarrer une trombe, faire un saut d'attaque ...)

Tu fais ensuite CTRL-F12 (TraceOver)
Tu retournes sur le jeu tu ouvres la fenetre de ton perso
Tu déclenche le deuxième breakpoint. Tu arretes le trace

Dans la fenetre trace tu auras (Une liste énorme de ligne, dans le lot celle qui t'interesse probablement) Toute les lignes exécutées entre les 2 breakpoints.
Teste des breakpoint dans cette liste tu devrais finir par trouver celle qui gère l'affichage qui elle ne devrait pas s'activer sans arret mais seulement quand tu consultes ton écran personnage.

Bon je parle en théorie je ne sais pas si ce que je t'indiques est faisable :confused:
 
J

Joel

Invité
pas de probléme, je dl ca asasp, regarde, mix fait un post sur PK et renvoie le poste vers Ici avec credits etc ...
 
M

Myrdinn

Invité
Voici les liens

Je doit préciser avant de commencer que c'est le fruit d'un long travail mais également celui de beaucoup de membres du forum de PhrozenKeep, il faudrait probablement que je cites leur nom quand j'aurais 5 minutes.

PtUnit
J'ai repris la forme de Hammerman. j'ai quelques dwords inédits mais majoritairement il n'y a pas grand chose de nouveau pour toi. JE rajouterais les infos sur la structure des sauvegardes probablement grace aus différentes informations récente sur le sujet.
Bref Il est toujours en cours de construction.

D2CommonExportedFunction
Bon toujours en cours, mais déjà une bonne idée des différentes fonctions

Cartographie de certaines Dlls
De loin le plus mauvais au niveau présentation et le plus bordélique et surtout le moins complet, j'ai énomément d'adresse mémoire à rajouté et de remaniement à faire.

Ces documents sont en pleine évolution, je vous tiendrais aux courant des updates sans changer les URLs.

Bon je les donne en l'état, je ne ferais pas de support pour ces fichiers. Je veux bien répondre à quelques questions précises néanmoins comme toujours
J'en parlerais plus tard en détail sans doute.

Je suis tout ouïe pour tout complément d'information ou questions précises.
 
J

Joel

Invité
BIen bien ...
je regarde tout ca et reviens avec les versions mixées.
 
K

Koko

Invité
Trés bien, votre petit cours, Maître, et il ne se limite pas à Diablo 2. Il faudrait qu'on enseigne ca dans les fac.
Une chaire à l'université pour Myrdinn !
 
M

Myrdinn

Invité
...
Juste avant de retourner sur la routine de gestion des dégats (en exercice), je vais faire une démonstration de l'outil dans un post dédié a nos amies les valkyries sur leur compétence/aptitudes et équipement. Ca ce passe ici
 
V

vjeux

Invité
Bon alors j'ai lancé w3 j'ai attacher le war3.exe mais maintenant où mettre un brackpoint ? (ça se dit breaker ? :D)

On va dire que je veux voir comment marche le combat dans w3 :D Donc il faut que je mette un breakpoint en rapport avec le moment du combat non ? On fait comment pour trouver cet endroit ? :D

Mici :p

Sinon je viens de me faire un compte sur Y!M
nom Yahoo : vjeux_grabu
 
M

Myrdinn

Invité
Vjeux je n'ai pas de méthode universelle.
LEs différentes méthodes possibles qui me viennent à l'esprit :
1) MEttre des breakpoints sur des fonction spas trop grandes/complexes. Jouer normallement et voir quand le jeu s'arrête.
2) Lire les Appels vers les "Assertion error" comme je te l'ai déjà montré.
3) Essayer de comprendre directement une fonction prise au hasard.
4) Essayer de programmer soi même une partie de fonction et rechercher un morceau de coe équivalent dans le jeu (Plutot utopique, maintenant que je connais bien D2 il m'arrive d'utiliser cette méthode) Ca nécessite de bien connaitre le jeu, et surtout les compilateurs pour reconnaitre le registre le plus probable.
5) identifier en zone mémoire un fichier extrait des MPQ ou une unité personnage et mettre un BreakPoint Dessus.

Voila une idée Vjeux, mais c'est loin d'être exhaustif, il faudrait que je regarde WarcraftIII avant de donner rééllement une méthode. Je n'ai pas d'apriori quand je commence à regarder un jeu.
Si j'avais une méthode pour commencer, crois moi je serais bien heureux ;)

P.S. Avant de connaitre un peu le jeu il est impossible de dire. Tient aujourd'hui je regarde le combat :) quand tu auras une idée de la structure alors oui c'est peut être possible.

Pour le moment contente toi de ce que tu trouves.
 
V

vjeux

Invité
Bon je vais y alller a la barbare je vais poser des breack points un peu partout et attendre qu'un se déclenche :D
 
M

Myrdinn

Invité
Autres conseils.

C'est bien d'avoir un breakpoint qui se déclenche, il faut également que tu saches qu'elle action de ta part la déclenché :)
Ce qui se déclenche tout seul car faisant partie du rafraichissement des unités par exemple sont inexploitables.

Un jeu ce n'est pas forcement que l'executable War3.exe.
A l'aide du menu ExecutableModule tu trouveras les Dlls et/ou EXE qui sont le moteurs du jeu. War3.exe n'est peut être que le lanceur du jeu (comme Diablo2.exe d'une certaine façon). C'est D2Game.dll le moteur du jeu ;)
 
V

vjeux

Invité
Je suis confronté a un gros probleme :D

Quand un breackpoint est activé, ca pause war3 MAIS je ne peut pas revenir à OLLYDBG.EXE car il est en plein écran :S

Et j'ai tjrs pas trouvé de solution pour ne pas le mettre en plein écran :( (le -w ne marche pas)
 
M

Myrdinn

Invité
Alt Tab Desactivé je suppose :D

Malheureusement je ne connais pas suffisamment W3 pour te répondre.
 
V

vjeux

Invité
Alt tab ne passe pas sur Olly :S

Bon bein ... je sens que ca va pas pouvoir aller plus loin :(


Edit : Pour plus d'infos, le prog se block et on ne peut plus faire alt tab si ctrl alt sup ... :(
 
M

MacPassion

Invité
Big UP

Désolé...
Je relisais tout tes posts a l'occaz de la réouverture des forums... tu nous les met a jour ? :D :ange:
Aucun n'est inutile ^^ mais c'est resté en 1.09x :sweat:

Je sais que t'as un peu arreté didi, mais vu que la 1.10 est derniere en date et qu'aucun nouveau patch n'est en prévision (et que le jeu est assez vieux pour avoir un 3e du nom :D :p ), ce serait dommage de perdre de tels trésors :)

Désolé... :na:
 
M

Myrdinn

Invité
Hum le principe de trace des dlls reste le même :lol:
De plus la routine 1.10 des dégats physiques et quasiment identiques ca fera un bon exercice pour ceux qui veulent la chercher :)

Si je devais updater un post, ce serait probablement anatomie d'1 drop il reste le sujet numéro 1 des demandes et le patch 1.10 a apporté beaucoup de nouveauté
 
A

Azgazarel

Invité
Voilà une excellente résolution Myrdinn.:D
Il est clair que des choses ont changées,j'ai d'ailleurs tout relu sur l'anatomie,et il ya des points encore obscurs :whistle:

Tu as déjà vu mon post sur DUDU,et pas sûr qu'il drop un parchemin à tout les coups à présent,ou alors,si j'ai faux,faudra m'expliquer le pourquoi du comment.
J'ai laissé les stats de DUDU à la suite de ta réponse.

++ et bon courage pour la remise à niveau.
 
Haut