RVA [Résolu]

cs_AlexMAN 1537 Messages postés samedi 21 décembre 2002Date d'inscription 24 mai 2009 Dernière intervention - 2 sept. 2004 à 02:07 - Dernière réponse : cs_AlexMAN 1537 Messages postés samedi 21 décembre 2002Date d'inscription 24 mai 2009 Dernière intervention
- 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
ymca2003 2070 Messages postés mardi 22 avril 2003Date d'inscription 3 juillet 2006 Dernière intervention - 2 sept. 2004 à 09:35
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.

Merci ymca2003 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de ymca2003
Meilleure réponse
ymca2003 2070 Messages postés mardi 22 avril 2003Date d'inscription 3 juillet 2006 Dernière intervention - 5 sept. 2004 à 20:53
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
);

Merci ymca2003 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

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

++
Commenter la réponse de cs_AlexMAN
cs_AlexMAN 1537 Messages postés samedi 21 décembre 2002Date d'inscription 24 mai 2009 Dernière intervention - 2 sept. 2004 à 21:08
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
cs_AlexMAN 1537 Messages postés samedi 21 décembre 2002Date d'inscription 24 mai 2009 Dernière intervention - 5 sept. 2004 à 13:05
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
ymca2003 2070 Messages postés mardi 22 avril 2003Date d'inscription 3 juillet 2006 Dernière intervention - 5 sept. 2004 à 15:51
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
cs_AlexMAN 1537 Messages postés samedi 21 décembre 2002Date d'inscription 24 mai 2009 Dernière intervention - 5 sept. 2004 à 16:03
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
cs_AlexMAN 1537 Messages postés samedi 21 décembre 2002Date d'inscription 24 mai 2009 Dernière intervention - 5 sept. 2004 à 16:35
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
cs_AlexMAN 1537 Messages postés samedi 21 décembre 2002Date d'inscription 24 mai 2009 Dernière intervention - 5 sept. 2004 à 20:58
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.