Bonjour,
J'ai un éditeur hexadécimal qui permet de lire et d'afficher le contenu d'un disque octet par octet, je me demandais comment c'est possible de faire ça en c ?
Par exemple j'aimerai faire un programme affichant le MBR.
Merci.
Bonjour,
J'ai un éditeur hexadécimal qui permet de lire et d'afficher le contenu d'un disque octet par octet, je me demandais comment c'est possible de faire ça en c ?
Par exemple j'aimerai faire un programme affichant le MBR.
Merci.
Il s'agit de programmation système. C'est-à-dire qu'il va falloir demander à ton système d'exploitation de te donner ces informations, ou alors piloter toi-même le matériel si tu travailles sans OS (peu probable sauf sur de vieilles machines, soit sous DOS, soit sur huit bits ou 16 bits hors PC). C'est possible en C, mais il ne s'agit pas de mot-clés spéciaux ni de fonctions de la bibliothèque standard dédiées à cela.
Le BIOS permet de lire un secteur du disque à l'aide d'interruptions assembleur. Tu peux les insérer dans du code C inline mais ce n'est utilisable que tant que ton système d'exploitation n'est pas encore en fonction.
Sous UNIX (et donc Linux et *BSD), le système présente cela sous forme d'un fichier spécial /dev/*. Ainsi, lire « /dev/sda » te présentera le contenu intégral de ton premier disque dur du premier secteur jusqu'au dernier. Cela se lit alors comme un fichier ordinaire. Tu peux faire un « xxd /dev/sda » pour explorer ce contenu, et les premières lignes correspondront au MBR. Si tu veux le faire en C, il te suffit de faire un bête fopen() sur ce fichier. Pratique, non ?
Windows propose maintenant un mécanisme similaire, mais seulement depuis XP et 2003, apparemment : http://msdn.microsoft.com/en-us/libr...KS_AND_VOLUMES
Bonjour
Comme le dit Obsidian, suffit d'ouvrir et lire le disque comme un fichier ordinaire. T'as donc juste qu'à connaitre son nom.
Sous Unix/Linux et OS similaires, les disques IDE se nomment /dev/hdXn et les disques SATA se nomment /dev/sdXn (X étant une lettre allant de a à z indiquant le n° de disque, et n étant un chiffre allant de 0 à 15 indiquant le n° de partition).
Par exemple ton premier disque SATA a de grandes chances de se nommer /dev/sda1.
En tapant la commande "fdisk -l" ça te donne la liste de tes disques et de leurs partitions.
Donc grosso-modo, ce sera un truc de ce genre
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 FILE *fp; char c fp=fopen("/dev/sda1", "r") while ((c=fgetc(fp)) != EOF) fputc(c, stdout); // Ou bien printf("%x", c) pour l'avoir en hexa fclose(fp);
Sous Windows je ne sais pas comment se nomment les disques mais c'est le même principe.
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Sous Windows on ne peut pas accédé au secteur d'un disque dur via les services du BIOS(int 0x13), j'ai déjà essayée en utilisant PASCAL+ASM, pas moyen.
Si quelqu'un sait comment accédé au secteur d'un disque dur sous Windows, j'attend la solution.
REM:
Même si vous exécuter votre programme en tant qu'Administrateur (option permettant d’exécuter un programme en mode privilégié sous Windows).
Merci je ne l’avait pas remarqué. Je pense qu'on devrait évité de mettre des informations importante en fin de message.![]()
Partager