RVA

Résolu
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 - 2 sept. 2004 à 02:07
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre 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

++

9 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
2 sept. 2004 à 09:35
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.
3
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
5 sept. 2004 à 20:53
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
);
3
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
2 sept. 2004 à 02:25
Bon je viens de me relire, dsl, c incomprehensible, je posterai mieux demain...

++
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
2 sept. 2004 à 21:08
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.

++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
5 sept. 2004 à 13:05
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.

++
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
5 sept. 2004 à 15:51
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 ?
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
5 sept. 2004 à 16:03
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.
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
5 sept. 2004 à 16:35
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...
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
5 sept. 2004 à 20:58
"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
0
Rejoignez-nous