begin process at 2010 02 10 10:06:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

undefined value


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

undefined value

samedi 27 octobre 2007 à 16:25:28 | undefined value

elpens

Bonjour,

j'ai un petit soucis avec un test qui ne passe pas...

J'ai un Char *strName qui a comme valeur <undefined value>

Je voudrais l'empêcher de passer dans ma boucle. Pour ce faire, j'ai testé:

- if(strName != NULL)
- if(strName != "")
- if(strName != " ")
- if(sizeof(strName) > 0)      //étonnament, sizeof = 4...

Mais aucun de ces tests ne fonctionne, elle passe toujours dans ma boucle

Merci pour votre aide

 ElpenS
samedi 27 octobre 2007 à 16:50:38 | Re : undefined value

elpens

Excusez-moi...

En fait, il suffit de faire
if(*fctStr != NULL)... bien-sûr

Mais en faisant cela, le probleme maintenant est que j'obtient l'erreur:

Attempted to read or write protected memory, This is often an indication that memory is corrupted...

Merci pour votre aide!

 ElpenS
samedi 27 octobre 2007 à 17:20:46 | Re : undefined value

juju12

Il sort d'où ton pointeur? Parce que là apparemment tu essayes d'accéder à une zone interdite... Mets voir le code avant.
samedi 27 octobre 2007 à 17:30:48 | Re : undefined value

elpens

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...


 ElpenS
samedi 27 octobre 2007 à 18:05:12 | Re : undefined value

juju12

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.

samedi 27 octobre 2007 à 18:22:28 | Re : undefined value

elpens

Yes, comme quoi on en apprend tout les jours!

Bon, le code maintenant:

//Je vais rechercher les fonctions de mon PE
while(pimage_thunk_data->u1.AddressOfData!=0)
{
   try
   {
      dwAPIaddress = pimage_thunk_data->u1.AddressOfData;
      pFctName = pImageBase + dwAPIaddress + pimage_section_header->PointerToRawData - pimage_section_header->VirtualAddress +2;

   //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é...

Est-ce clair?

Merci en tout cas, ce post n'aura pas été inutile

 ElpenS
samedi 27 octobre 2007 à 19:10:40 | Re : undefined value

juju12

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.
[ Lien ]

Bonne prog.
dimanche 28 octobre 2007 à 10:06:51 | Re : undefined value

omnia

- if(sizeof(strName) > 0)      //étonnament, sizeof = 4...

strlen serait plus approprié, pour info, les réponses aont déja été donnés par les autres


bon codage :p


Cette discussion est classée dans : passe, value, undefined, strname, if


Répondre à ce message

Sujets en rapport avec ce message

"graphics.h" problème de compilation [ par carole ] J'utilise l'ide Borland 4.5 et je souhaite faire du graphisme.Mon problème et que lorsque je compile l'exemple borland ci dessous,#include #include #i Filtre passe bande [ par ElBlacky ] Salut je suis à la recherche d'une routine qui soitcapable de découper un fichier son en plusieurs frequences, un équalizeur en fait, mais avec plus d comment protéger l'ouverture d'un fichier ? [ par f1cobra ] Bonjour, je voudrais protéger l'ouverture d'un fichier excell par un mot de passe, de manière a ce que seules les personnes ayant le mot de passe puis * Mot de passe [ par shenron ] Slt,vs savez comment on fait pour lorsqu'un user saisit une chaine de caractère, ce k'il tape se met en * comme si c t un mot de passe? vérification du mot de passe [ par biscot19 ] Bonjour,Je cherche comment vérifier un mot de passe NT en C++.J'ai vu que la fonction NetUserChangePassword permettait de le faire mais comme son nom Mot de passe à l'ouverture d'une BDD [ par lyricman ] Bonjourje fais un programme en C++ (Borland C++ Builder 6) avec une base de données.le pb est que chaque fois que j'exécute mon programme, il me deman acces base de donnée DAO protégée par mot de passe [ par Frederyck ] Bonjour,Alors je voudrais savoir comment faire pour acceder à une base de donnée Access 97 via DAO quand celle ci est protégée par mot de passe.J'aime Problème de pointeur [ par ngryman ] Salut à vs, g un gros pb inexplicable pr moi, alors si qqn trouvait la solution ce serait un dieu.Voilà je m'explik, j'ai une classe X qui possède un PROBLEME AVEC DEVC++ ET GLUT [ par arfalchon ] Je n'arrive à compiler aucune source utilisant GLUT avec DEVC++, il me marque à chaque fois : [Linker error] undefined reference to `__glutInitWithExi Probleme DevCPP & Glut [ par Kaliman ] Salut à tous j'essaye d'apprendre à utiliser OpenGL grâce à DevCpp mais je n'ai jamais réussi à utiliser glut qui crée des erreurs de link.J'ai ajoute


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,858 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales