2016-06-17 22 views
2

Ich habe gelernt, wie Linux-Dateisystem funktioniert und ich stieß auf das Konzept der Inodes. Ich habe ein C-Programm geschrieben, um einen bestimmten Inode zu lesen und seinen Inhalt auszudrucken.C Funktion zum Modifizieren von Inode?

Jetzt möchte ich den Inhalt von inode von meinem C-Code ändern. Ich weiß, dass dies das Dateisystem zerstören könnte, wenn etwas schief geht, aber ich will es trotzdem versuchen.

Wie kann ich das erreichen?

+0

Wie haben Sie einen bestimmten Inode gelesen und seinen Inhalt ausgedruckt? Ich nehme an, Sie hätten die Dateisystem-Metadaten wie Superblock, Root-Inode dafür geparst. – Fazlin

+0

@Fazlin: Ja, ich habe das gleiche getan – harrythomas

+0

Sobald Sie die Metadaten des Dateisystems geparst haben, um den Inhalt von Inode zu lesen, welches Problem haben Sie beim Schreiben zurück? Sie kennen den Offset, von dem Sie den jeweiligen Inode gelesen haben. Modifizieren Sie den lokalen Struct Inode und schreiben Sie ihn zum selben Offset zurück. – Fazlin

Antwort

2

Sie müssen auf die sogenannten "Meta" -Informationen des Laufwerks zugreifen - die Informationen über die Informationen auf dem Laufwerk - nicht die normalen Informationen. Dazu müssen Sie das Laufwerk selbst öffnen und keine Dateien oder Verzeichnisse im Laufwerk.

Wenn Sie I-Nodes sprechen, dann sind Sie auf Linux und dem ext-Dateisystem, so dass der Laufwerksname etwas wie /dev/sdb sein wird. Seien Sie vorsichtig: Dies ist die gesamte Festplatte, NICHT eine Partition/Volumen/Scheibe darin. Das könnte /dev/sdb2 oder so genannt werden - verschiedene Arten von Linux nennen sie verschiedene Dinge.

Sobald die Partition geöffnet ist, können Sie sie wie eine (sehr große!) Datei behandeln: eine Folge von Bytes, die zufälligerweise zufällig als Sektoren auf der Festplatte angeordnet sind. Sie können zu jeder Position suchen und die Daten dort lesen. Wenn Sie es überschreiben wollen, können Sie - aber wie Sie sagen:

Sie können die Daten auf Ihrer Festplatte vollständig zerstören!

Vielleicht mounten Sie einen USB-Stick (mit nichts Wichtigem) und experimentieren Sie darauf? Und make SEHR sicher, dass Sie ITS-Namen und nicht den Namen Ihrer Hauptdiskette öffnen!

+0

Sie sagen also, ich muss den tatsächlichen Festplattenblock herausfinden, in dem dieser Inode gespeichert ist, und dann diesen bestimmten Block neu schreiben? Und ja, ich wollte es auf einer separaten USB-Festplatte ausprobieren. – harrythomas

+2

Oder erstellen Sie eine Datei mit einem FS => http://askubuntu.com/questions/85977/how-do-i-create-a-file-and-mount-it-as-a-filesystem – Garf365

+0

@Harry Das ist genau Was ich sage. Und um den richtigen i-node zu kennen, müssen Sie den Verzeichnisbaum analysieren, um den root i-node der Datei zu erhalten, und von dort aus die Arrays, Array-Arrays und Array-of-arrays-of-arrays aufrufen um zu dem i-Knoten von Interesse zu gelangen. Sie müssen im Grunde die gesamte Dateisystemstruktur durchforsten ... –