begin process at 2010 02 10 13:21:41
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

probleme de taille de structure


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

probleme de taille de structure

mardi 22 juillet 2008 à 10:57:43 | probleme de taille de structure

hisoka56

Bonjour, je suis en train de programmer un lecteur de mémoire et j'ai un problème avec la taille d'une structure.

Voici ma structure :

struct QuestLog
{
    DWORD ql1;
    DWORD ql2[2];
};

struct Cplayer
{
    /*0x0000*/ WOWGUID GUID;
    /*0x0008*/ DWORD Type;
    /*0x000c*/ DWORD Entry;
    //tons of other ....

    /*0x03b0*/ QuestLog questLog[25];
    /*0x04dc*/ VisibleItem visibleItem[19];
        //others...
};

Je rempli ma structure à l'aide de mon MemoryReader avec :

CPlayer player;
mem->read( playerptr.UnitData, &player, sizeof(CJoueur) ) ;


et

bool CMemoryReader::read(const DWORD &addr, void * value, const DWORD &size_, SIZE_T * total)
{
    if( this->gHandle == INVALID_HANDLE_VALUE ) return false;
    BOOL ok = false;
    ok = ReadProcessMemory(this->gHandle, (LPCVOID)addr, value, size_, total);
    _error();
    return ok;
}



et mon code de test :


DWORD pos_GUID = (DWORD) &(j->GUID);
    DWORD pos_rel_questlog = (DWORD) &(j->questLog) - pos_GUID;
    DWORD normal_position_visibleitem = pos_rel_questlog + sizeof(j->questLog);

    DWORD pos_rel_visibleitem = (DWORD) &(j->visibleItem) - pos_GUID;
    ILogger::Log("relative adress QuestLog : %p", pos_rel_questlog);
    ILogger::Log("normal position (should be) of visibleItem : %p", normal_position_visibleitem);
    ILogger::Log("the value i get : %p", pos_rel_visibleitem);







Si je ne faisais aps d'erreur, je devrais avoir les même valeurs pour "normal_position_visibleitem" et  "pos_rel_visibleitem" mais j'ai une différence de 4 bytes (1 DWORD?)

En calculant manuellement la taille de questLog je trouve  (DWORD=4 *3 * 25) = 300 = 12C or 12C+3B0 = 4dc mais dans mon programme de test, ce n'est pas ce que je trouve.

Je ne comprend pas pourquoi j'ai une différence (ce qui décale les adresses de toute ma structure et toutes les autres membres sont donc faux.


   
mardi 22 juillet 2008 à 11:48:45 | Re : probleme de taille de structure

Neo_Fr

Membre Club
Réponse acceptée !
Salut regarde bien si ta structure est correctement alignée, si ce n'est pas le cas le compilateur peut rajouter des octets pour l'aligner a ta place, par defaut les structures sont alignés sur 4 octets, il est cependant possible de changer cette valeur grace a la directive pack: http://msdn.microsoft.com/en-us/library/2e70t5y1(VS.80).aspx
Un peu de doc sur l'alignement des structures:
http://msdn.microsoft.com/en-us/library/71kf49f1(VS.80).aspx
Cette doc s'applique pour les systemes 64bits donc les structures sont alignées sur 8 octets, mais le principe reste le meme..

Neo_Fr
mardi 22 juillet 2008 à 12:05:03 | Re : probleme de taille de structure

hisoka56

je te remercie, je ne connaissait rien en alignement, d'ailleurs, ça me semble toujours un peu flou mais j'ai réussi à corriger mon erreur, en ajoutant juste un pack(4).

Mais je vois pas trop pourquoi le compilateur fais ce type d'arrangement c'est pour gagner de la vitesse?


Cette discussion est classée dans : structure, dword, pos, questlog, visibleitem


Répondre à ce message

Sujets en rapport avec ce message

Entete d'un .avi [ par kididouille ] Dans vfw.h on trouve les structures des entetes des .avi Il y a la structure principal MainAVIHeader (56 bytes) Mais il y a également une structure AV les valeur de structure COMMTIMEOUTS ?????????? [ par hattabfethi ] Je veux faire une communication PC automate S7-200 via  le port rs232.Si qq peut me donner les valeurs de la structure COMMTIMEOUTS. typedef struct _C communication entre PC et automate siemens S7-200 à travers le port série??????????? [ par hattabfethi ] SVP aider moi, mon problème est le suivant :j'ai un documents qui explique le protocole ppi (explique les formats de trames acceptées par le cpu de l' Copier le contenu d'une structure dans un fichier en C++ [ par brute ] Bonjour, J'ai un problème pour copier le contenu d'une structure dans un fichier en c++. J'ai bien regardé les messages postés dans le forum sur ce s Structure et FileMapping [ par Loukhass ] Bonjour. Je dois utiliser le filemapping pour transmettre un tableau de structure d'un programme à un autre. Mon premier probleme était le fileMappin MS3D [ par mondrone ] Bonjour à tous. Je cherche des information sur la structure des fichiers ms3d. J'ai déjà pu voir en faisant une recherche sur le forum, que certains s Question sur les tableaux de structures [ par Kleidp ] Bonjour,j'ai quelques problèmes avec les tableaux de structure. Tout d'abord voici une de mes structures:typedef struct{    float r,g,b;}text;text tex fonction recursive [ par infodaoudi ] Bonjour, j'ai la fonction recusive ci-dessu, suposons qu'on a un cas qui passe par les etapes 2/3/5/2/3/4, normalement la valeur de retour de la fonct Appel de structure avec argv [ par Neoflo ] Voici mon problème, j'ai défini un type de structure nombre. Puis j'ai initialisé 2 élements avec ce type (francais et anglais). Maintenant, suivant tableau de structure [ par lunatic34 ] Salut a tous!!!!voila j'ai mis un tableau de structure en memoire et je voudrais l' enregistrer dans un fichier donc s'il y a des personnes qui peuven


Nos sponsors


Sondage...

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,593 sec (3)

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