/proc/mnt を /proc/mounts に接続する

/proc/mnt を /proc/mounts に接続する

/proc私はファイルシステムがさまざまなプロセスの出力を反映していることを理解しています。残念ながら、romdumpマウントテーブルがとして表示されることを期待する独自の()バイナリがありますが、/proc/mtd私のAndroidデバイスでは/proc/mounts

シンボリックリンクを作成しましたが、これは実際のファイルやディレクトリでのみ機能するようです。/proc/mounts代わりに、出力を読み取るためにこのバイナリをだますことができる方法は何ですか/proc/mtd

答え1

最も簡単な方法はバイナリを変更することです。

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

バイナリファイルを編集しているので、ここで重要なのは、元の文字列が/proc/mtd新しい文字列と同じ長さで/tmp/mntxバイナリファイルのサイズや場所が変わらないようにすることです。

これは絶対に安全ではありません。バイナリが固定文字列を使用せずにフラグメントでパス名を構築する場合、これは機能しません。しかし、おそらく効果があるでしょう。

答え2

/procモジュール(または単にカーネルコード)を書く以外の項目を追加する方法がわかりません。それでも少し使いやすさがあるかもしれません。

モジュールを作成して挿入できる場合は非常に簡単です。別のシンボリックリンク(/proc/mountsすでにシンボリックリンク)を作成できます。

源泉( 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");

ファイル生成:

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

(現在Linuxシステム用にビルドしているとします。Android用にビルドするには、以下を参照してください。)Android用のロード可能なカーネルモジュールを作成するには?.)

モジュール()をロードinsmod mnt_link.koした後、次のものを取得する必要があります。

$ 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

しかし、あなたのユーティリティはこのシンボリックリンク以外のものを期待している可能性があります。 (おそらく、その場所にいくつかの情報を提供するためにロードされる他のモジュールによって異なります。)

自分の責任で使用してください

答え3

/proc ファイルシステムがメモリに存在すると仮定します。バラよりhttp://www.kernel.org/doc/Documentation/filesystems/proc.txtより多くの情報を知りたいです。リンクが機能しない可能性があります。

LD_PRELOAD を使用して open() 関数を傍受することもできます。バラよりhttps://stackoverflow.com/questions/426230/what-is-the-ld-preload-trick

バイナリファイルを編集し、ファイル名を/proc/mntから/proc_mntに変更し、/proc/mountsにシンボリックリンクすることもできます。

別のオプションは、カーネルを再コンパイルし、/proc/mnt を /proc/mounts のエイリアスにすることです。

答え4

一生懸命接続してみましたか?

ln /proc/mnt /proc/mounts

関連情報