RVA [Résolu]

Messages postés
1537
Date d'inscription
samedi 21 décembre 2002
Dernière intervention
24 mai 2009
- - Dernière réponse : cs_AlexMAN
Messages postés
1537
Date d'inscription
samedi 21 décembre 2002
Dernière intervention
24 mai 2009
- 5 sept. 2004 à 20:58
Bonsoir,

J'ai un pb avec le param StreamDirectoryRva de ce lien msdn : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/minidump_header_str.asp
En fait, je recupere convenablement les données de l'entete, mais pour recuperer les infos de chak stream, j'ai besoin de ce parametre. Or, je n'obtiens que des resultats erronée, et je me demandais si le fait que ce soit une RVA, je doive m'y prendre autrement pour traiter les données que cette adresse pointe, et pas utiliser cette adresse comme un pointeur.

PMINIDUMP_DIRECTORY mdDirectory;
mdDirectory = (PMINIDUMP_DIRECTORY)&mdHeader.Version;
MessageBox(0, itoa(mdDirectory->StreamType, buf, 10), 0, 64);

Voila, j'espere que vous avez compris ma question, jV pas tarder a aller au dodo donc Bonne nuit tt le monde..

Merci d'avance

++
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Dernière intervention
3 juillet 2006
3
Merci
s'il s'agit de "Relative Virtual Address", il faut ajouter ce RVA à l'adresse où est effectivement charger le fichier en mémoire pour avoir le vrai pointeur. (en tout cas pour les executables c'est comme ça). en gros il s'agit d'un offset à partir du début du flux.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de ymca2003
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Dernière intervention
3 juillet 2006
3
Merci
si tu regarde bien, ce n'est pas un pointeur simple sur les données qui est demandé mais un pointeur sur un pointeur vers le début des données.

si j'ai bien compris, avec le type voulu :
PMINIDUMP_DIRECTORY pmd;
PVOID pData; // vas récupérer le début des données
ULOND ulSize; // vas récupérer la taille

MiniDumpReadDumpStream(
lpszcontenu,
StreamNumber,
&pmd, // pointeur de pointeur
&pData, // -> pointeur de pointeur
&ulSize
);

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de ymca2003
Messages postés
1537
Date d'inscription
samedi 21 décembre 2002
Dernière intervention
24 mai 2009
0
Merci
Bon je viens de me relire, dsl, c incomprehensible, je posterai mieux demain...

++
Commenter la réponse de cs_AlexMAN
Messages postés
1537
Date d'inscription
samedi 21 décembre 2002
Dernière intervention
24 mai 2009
0
Merci
ok merci, mais c vrai ke j'aurais pu y penser...jferais ca demain soir, apres le rentrée (eh merde...).
Merci bonne soirée.

++
Commenter la réponse de cs_AlexMAN
Messages postés
1537
Date d'inscription
samedi 21 décembre 2002
Dernière intervention
24 mai 2009
0
Merci
hfile = CreateFile("c:\\WINDOWS\\MiniDump\\Mini071304-01.dmp", GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
DisplayError();
if (NULL == hfile) return;
dwtoread = GetFileSize(hfile, 0);
//lpszcontenu = VirtualAlloc(0, dwtoread, MEM_COMMIT, 0);
lpszcontenu = (char *) HeapAlloc(GetProcessHeap(), 0, dwtoread);
if (NULL == lpszcontenu) goto CloseHFile;
ReadFile(hfile, lpszcontenu, dwtoread, &dwread, 0);
DisplayError();
MessageBox(0, itoa(dwread, buf, 10), 0, 0);
if (dwread != dwtoread) goto CloseHFile;
mdHeader = (PMINIDUMP_HEADER)lpszcontenu;
p = lpszcontenu + mdHeader->StreamDirectoryRva;
MessageBox(0, itoa(*((DWORD *)p), buf, 10), 0, 0);
//MessageBox(0, itoa(mdDirectory->StreamType, buf, 10), 0, 0);

Le code est logikment bon, mais m'affiche un resultat totalement faux, enfin ct pour te demander si le code etait bon, j'ai ptet fait une connerie...J'ai oci essayé la projection en memoire du fichier, mais pareil, le resultat est faux...

Merci d'avance.

++
Commenter la réponse de cs_AlexMAN
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Dernière intervention
3 juillet 2006
0
Merci
CreateFile renvoie INVALID_HANDLE_VALUE (-1=0xFFFFFFFF) en cas d'erreur et pas NULL.

le mieux c'est d'ouvrir le fichier avec un éditeur hexa et vérifier si les offsets ne sont pas décalés (après l'entête par exemple)

t'as essayé d'utiliser MiniDumpReadDumpStream ?
Commenter la réponse de ymca2003
Messages postés
1537
Date d'inscription
samedi 21 décembre 2002
Dernière intervention
24 mai 2009
0
Merci
Uè c vrai, merci pour le INVALID_HANDLE_VALUE.
Un truc bizarre avec MiniDumpReadDumpStream, c kil fo préciser le type du stream dont on desire des infos, or je ne connais pas tous les types de stream présents ds le minidump, dc j'ai fouillé et jme suis apercu ke je pouvais trouver plus facilement ces infos a partir de l'header.
Le truc ke je pourrais faire, faire une boucle et passer tous les types de stream a la fonction, regarder la valeur de retour de MiniDumpReadDumpStream, et sil n'existe pas, je passe au type suivant, mais ca me semble con de faire appel a une fonction pour rien.
Commenter la réponse de cs_AlexMAN
Messages postés
1537
Date d'inscription
samedi 21 décembre 2002
Dernière intervention
24 mai 2009
0
Merci
Et je viens de remarquer kil faut aussi un pointeur vers le debut du stream...Cette fonction en gros ne sert a rien ! Puis ce qu'a partir de l'adresse de debut du stream, tt le monde est capable de recup des infos sur celui ci grace aux differentes structures et enum. Enfin bon...
Commenter la réponse de cs_AlexMAN
Messages postés
1537
Date d'inscription
samedi 21 décembre 2002
Dernière intervention
24 mai 2009
0
Merci
"PVOID*" "[out]"

Apparemment, tu as raison, put1, keske je suis mauvaise langue :) C vraiment sympa de ta part, de t'etre fait chier avec msdn, c sympa, merci.

Bonne continuation
Commenter la réponse de cs_AlexMAN

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.