Deplacement pour Lire la table BPB et FAT32
Résolu
peachesncream
Messages postés
15
Date d'inscription
Statut
Membre
Dernière intervention
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
à l’intérieur d'une partition je veux lire les différentes tables afin d'extraire les informations qui me permettent de calculer les différentes adresses, par exemple je dois accéder et lire le BIOS parameters Bock BPB pour récupérer le nombre de secteur dans la région réservée, le nombre de FAT. J'ai trouvé quelques difficultés, pour lire cette table je dois me positionner dans le fichier et donc j'utilise fseek mais j'ai pas su comment écrire le déplacement.
Est-ce que en faisant fopen("/dev/sda1","rb"); je ne calcule pas le deplacement à partir du MBR?
quand je fait fseek(F,512,SEEK_SET); le 512 c'est par rapport à la taille du BOOT seulement?
Et aussi comme tout est en octet donc comment est-ce que je peux lire des valeurs en octet ? voici ma partie du code, l'execution de cette partie m'affiche des resultats qui ne sont pas correctes, par exemple lorsque j'affiche buffer[16] cela me donne 222 alors que nomralement ça doit être 2
Pour le code je suis obligé d'utiliser fopen et fseek ...
à l’intérieur d'une partition je veux lire les différentes tables afin d'extraire les informations qui me permettent de calculer les différentes adresses, par exemple je dois accéder et lire le BIOS parameters Bock BPB pour récupérer le nombre de secteur dans la région réservée, le nombre de FAT. J'ai trouvé quelques difficultés, pour lire cette table je dois me positionner dans le fichier et donc j'utilise fseek mais j'ai pas su comment écrire le déplacement.
Est-ce que en faisant fopen("/dev/sda1","rb"); je ne calcule pas le deplacement à partir du MBR?
quand je fait fseek(F,512,SEEK_SET); le 512 c'est par rapport à la taille du BOOT seulement?
Et aussi comme tout est en octet donc comment est-ce que je peux lire des valeurs en octet ? voici ma partie du code, l'execution de cette partie m'affiche des resultats qui ne sont pas correctes, par exemple lorsque j'affiche buffer[16] cela me donne 222 alors que nomralement ça doit être 2
Pour le code je suis obligé d'utiliser fopen et fseek ...
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char * argv[])
{
int nb_secteurRR =0; //number of sectors in the saved region
unsigned char buffer[512];
FILE* F = NULL;
int i,s;
F = fopen("/dev/sda1", "rb");
s = fseek(F, 512*2, SEEK_SET);
i = fread(buffer, 512,1,F);
int nb_secteurRR = buffer[14]; // here i wante to get the number of sectors in the saved region in the BPB table it's on offset 14 but i need to read 2 bytes not only one its size is 2.
printf("The value of nb_secteur is %d\n",nb_secteurRR);
return 0;
}
A voir également:
- Deplacement pour Lire la table BPB et FAT32
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Table ascii - Guide
- Lire epub - Guide
- Table des matières word - Guide
- Lire fichier bin - Guide
1 réponse
Salut peachesncream,
Dans la mesure où tu connais le format des données binaires que tu lis et leur type, tu peux créer une
Ou alors, par exemple, si tu n'es intéressé que par un
Les spécificateurs de format pour
https://en.cppreference.com/w/c/types/integer
Dal
Dans la mesure où tu connais le format des données binaires que tu lis et leur type, tu peux créer une
structqui réplique ce format et lire le bloc de données avec
freaddans une variable de ce type
struct. Tu pourras ensuite accéder aux données contenues dans les champs de la variable
struct.
Ou alors, par exemple, si tu n'es intéressé que par un
uint16_tdont tu connais la déplacement par rapport au début, tu fais un
fseekjusqu'à l'emplacement concerné et tu lis ton
uint16_tprésent à cet endroit avec
fscanf.
Les spécificateurs de format pour
scanfet
printfpour un type
uint16_tsont définis dans l'entête standard
<inttypes.h>.
https://en.cppreference.com/w/c/types/integer
Dal
Bien que le standard ne le dise pas explicitement, je pense que tu as raison, vu que fonctionne exactement de la même façon que avec . D'ailleurs les exemples présents dans le standard pour utilisent en premier argument.
Merci de ton intervention :-)