2011-08-31 3 views
1

Je suis en train d'obtenir ce code de travail, de hereRechercher une chaîne en mémoire

char *mem = (unsigned char *) 0xF0000; 
    int length, i; 
    unsigned char checksum; 
    while ((unsigned int) mem < 0x100000) { 
     if (mem[0] == '_' && mem[1] == 'S' && mem[2] == 'M' && mem[3] == '_') { 
      length = mem[5]; 
      checksum = 0; 
      for(i = 0; i < length; i++) { 
       checksum += mem[i]; 
      } 
      if(checksum == 0) break; 
     } 
     mem += 16; 
} 

Il y a quelques erreurs de type, comme cant char * avec initialisation unsigned char *.

lorsque j'essaie de remplacer char * par unsigned char * int première ligne Je ne peux pas utiliser la notation [], comment puis-je utiliser memcmp avec ce code?

+4

Quels sont les messages d'erreur et sur quelles lignes? –

+0

Pourquoi ne pas utiliser la notation [] avec 'unsigned char *'? – duedl0r

+0

donne exc_bad_access sur cette ligne – yolo

Répondre

0

Le code n'a pas fonctionné parce qu'il est mauvaise façon de trouver l'adresse de la structure du point d'entrée smbios sur une EFI

2

Dans la première ligne, vous avez casté vers unsigned char*, mais essayez d'assigner à char*. Pourquoi ne pas lancer le char* directement?

Je suppose que vous travaillez sur du code système embarqué, car avec des systèmes d'exploitation multitâches, l'accès aux emplacements de mémoire codés en dur provoque le blocage de votre programme.

+0

quoi? pourquoi va-t-il planter? – duedl0r

+0

Il se bloquera car dans la plupart des systèmes, vous n'êtes pas autorisé à lire la mémoire qui n'appartient pas au processus en cours –

0

Quelle partie voulez-vous copier?

int start = ?; //wherever you want to start... (0,1,2,...,maxlength) 
int len = ?; //however long you need it to be ((maxlength-start) > len > 0) 
char *mymem = malloc(len); 
memcpy(mymem, mem+start, len); 

EDIT: ops ... mal interprété ce :) vous voulez comparer :)

for(...){ 
    char* search = "_SM_"; 
    char* mymem = (char*)(mem + (i*16)); 
    if (strncmp(search,mymem,4) == 0){ 
     length = (int)mymem + 4; // 0(_),1(S),2(M),3(_),4 
     checksum = 0; 
     ... 
    } 
} 
Questions connexes