cs_elpens
Messages postés260Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention 3 novembre 2007 27 oct. 2007 à 17:30
En fait, je vais chercher le nom des fonctions API présentent dans un exe.
Donc cette addresse est de l'ordre de 0x85000000, d'ou le problème mémoire...
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 27 oct. 2007 à 18:05
Ouais d'accord mais du moment que tu utilises tout correctement...j'insiste pour voir le code
Au passage quelques remarques sur tes premiers posts :
strName != "" ou strName != " "
Tu testes ici si ton pointeur pointe sur les chaînes de caractères "" et " " que le compilateur va donc créer quelque part sur la pile ou dans les données constantes...ca ne sert strictement à rien; si tu veux comparer des chaînes il faut faire par exemple if strName[0]!='\0' ou *strName!='\32' etc...
sizeof(strName)>0
Attention sizeof ne renvoie en aucun cas la taille de la chaîne mais la taille du pointeur qui sert à la référencer (ici 4, t'es en Win32).
*fctStr != NULL
Là ca ne teste pas si le pointeur est invalide mais seulement si le premier caractère est le caractère nul (équivalent à fctStr[0]!='\0').
En fait pour tester si le pointeur est valide ta toute première solution était la bonne if(strName != NULL); du moment que le pointeur pointe au bon endroit, ce qui n'a pas l'air d'être ton cas, donc le code serait utile.
Vous n’avez pas trouvé la réponse que vous recherchez ?
//Insert value into struct
fctData[tabCount].dllName = (pImageBase + pimage_import_descriptor->Name + pimage_section_header->PointerToRawData -pimage_section_header->VirtualAddress);
fctData[tabCount].fctAddress = (dwThunk + pimage_nt_headers->OptionalHeader.ImageBase);
fctData[tabCount].fctName = pFctName;
...
Ensuite, quand je parcours mon fctData[], je n'ai pas de problème, tant que la fonction a un nom. Mais par exemple, SHLWAPI.dll contient des fonctions qui sont appelé par #436, c-a-d que je ne peux pas récupérer le nom de la fonction.
Donc, quand je veux lire mon fctData[i].fctName et qu'il n'y a pas de nom, mon programme plante car l'address enregistree est protégé...
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 27 oct. 2007 à 19:10
C'est plus clair comme ça...Effectivement le IMAGE_THUNK_DATA est une union qui représente soit un pointeur vers le nom, soit un ordinal, soit autre chose...En fait apparemment il suffit de tester le bit de poids fort; si c'est 1 c'est un ordinal en fin du moins faut prendre les 31 bits de poids faible...enfin un truc de ce genre; j'ai trouvé cette page qui pourrait t'aider, j'ai juste survolé mais ils parlent effectivement de ce problème.
http://msdn.microsoft.com/msdnmag/issues/02/03/PE2/