Verknüpfen von / proc / mnt mit / proc / mounts


7

Ich verstehe, dass das /procDateisystem die Ausgabe verschiedener Prozesse widerspiegelt. Leider habe ich eine propietary ( romdump) - Binärdatei, die erwartet, dass die Mount-Tabelle als /proc/mtdangezeigt wird, während mein Android-Gerät sie als ausgibt /proc/mounts.

Ich habe versucht, einen symbolischen Link zu erstellen, aber dies funktioniert natürlich nur für tatsächliche Dateien oder Verzeichnisse. Wie kann ich diese Binärdatei täuschen, um die Ausgabe zu lesen, /proc/mountsanstatt /proc/mtd?


1
Bist du sicher? Warum sollte es das tun?
Stéphane Chazelas

Verwandte: Ist es möglich, ein Verzeichnis und eine Datei in / proc / sys zu erstellen? wo ich zeige, wie man unionfs benutzt (ich erinnere mich nicht, ob das unter Android sofort möglich ist).
Gilles 'SO - hör auf böse zu sein'

Antworten:


7

Der einfachste Weg wäre, die Binärdatei zu ändern:

sed s-/proc/mtd-/tmp/mntx- < romdump > romdump.new
ln -s /proc/mounts /tmp/mntx
./romdump.new

Da Sie eine Binärdatei bearbeiten, besteht der Trick darin, sicherzustellen, dass die ursprüngliche Zeichenfolge /proc/mtddieselbe Länge wie die neue Zeichenfolge hat /tmp/mntx, damit Sie die Größe oder Position von Elementen in der Binärdatei nicht ändern.

Dies ist nicht kinderleicht - es funktioniert nicht, wenn die Binärdatei den Pfadnamen in Teilen aufbaut, anstatt eine feste Zeichenfolge zu verwenden. Aber es wird wahrscheinlich den Trick machen.


Clevere Art, es zu erledigen. Leider lngibt "Link abgelegt Datei existiert", während /tmp/mntxnicht. (Tatsächlich musste ich das /tmpVerzeichnis erstellen .)
Paul Lammertsma

Sie können auch einen anderen Pfad verwenden, wenn / tmp nicht funktioniert, wie / etc. Sie brauchen auch überhaupt keinen Symlink - kopieren Sie einfach den Inhalt von / proc / mounts in Ihre neue Datei.
Jim Paris

Oh, auch mein lnBefehl war rückwärts, sorry. Fest!
Jim Paris

Dumm, dass ich das auch übersehen habe. Danke, dieses Update funktioniert wie ein Zauber!
Paul Lammertsma

7

Ich kenne keine Möglichkeit, Dinge /procaußerhalb des Schreibens eines Moduls (oder eines einfachen Kernel-Codes) hinzuzufügen . Könnte aber einige Dienstprogramme da draußen sein.

Wenn Sie ein Modul erstellen und einfügen können, ist es ziemlich einfach: Sie können einfach einen anderen Symlink erstellen ( /proc/mountsist bereits ein Symlink).

Quelle ( mnt_link.c):

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/proc_fs.h>

#define MODULE_VERS "0.0"
#define MODULE_NAME "mnt_link"

static int __init init_mnt_link(void)
{
    static struct proc_dir_entry *symlink;
    symlink = proc_symlink("mnt", NULL, "self/mounts");
    if(!symlink)
        return -ENOMEM;
    return 0;
}

static void __exit cleanup_mnt_link(void)
{
    remove_proc_entry("mnt", NULL);
}

module_init(init_mnt_link);
module_exit(cleanup_mnt_link);

MODULE_AUTHOR("U&L");
MODULE_LICENSE("CC-WIKI");
MODULE_DESCRIPTION("Create a /proc/mnt symlink to /proc/self/mounts");

Makefile:

obj-m := mnt_link.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
    $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

(Dies setzt voraus, dass Sie für Ihr aktuelles Linux-System erstellen. Um etwas für Android zu erstellen, lesen Sie bitte: Wie erstellen Sie ein ladbares Kernelmodul für Android? )

Sobald Sie das Modul ( insmod mnt_link.ko) geladen haben , sollten Sie Folgendes erhalten:

$ ls -l /proc/m*nt*
lrwxrwxrwx 1 root root 11 Nov 27 22:43 /proc/mnt -> self/mounts
lrwxrwxrwx 1 root root 11 Nov 27 22:43 /proc/mounts -> self/mounts

Davon abgesehen könnte Ihr Dienstprogramm sehr wohl etwas anderes als diesen Symlink erwarten. (Möglicherweise hängt es davon ab, dass ein anderes Modul geladen wird, um an dieser Stelle Informationen bereitzustellen.)

Verwendung auf eigenes Risiko .


Wow, das ist eine verdammt gute Antwort! Vielen Dank, dass Sie nicht nur eine Lösung angegeben haben, sondern auch Einblick in Symlinks und deren Erstellung gegeben haben.
Paul Lammertsma

@Mat Dieses Modul beeinträchtigt den Kernel, da CC-WIKIes sich nicht um eine bekannte GPL-kompatible Lizenz für den Kernel handelt (siehe include/linux/license.h).
Lekensteyn

3

Das / proc-Dateisystem existiert sozusagen im Speicher. Weitere Informationen finden Sie unter http://www.kernel.org/doc/Documentation/filesystems/proc.txt . Links werden wahrscheinlich nicht funktionieren.

Möglicherweise können Sie LD_PRELOAD verwenden, um die Funktion open () abzufangen. Siehe /programming/426230/what-is-the-ld-preload-trick

Möglicherweise können Sie auch die Binärdatei bearbeiten, um den Dateinamen von / proc / mnt in / proc_mnt zu ändern und diesen mit / proc / mounts zu verknüpfen.

Eine andere Möglichkeit wäre, den Kernel neu zu kompilieren und / proc / mnt zu einem Alias ​​für / proc / mounts zu machen.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.