Liên kết / Proc / mnt với / Proc / mounts


7

Tôi hiểu rằng /prochệ thống tập tin phản ánh đầu ra của các quá trình khác nhau. Thật không may, tôi có một romdumpnhị phân propietary ( ) dự kiến ​​bảng mount sẽ xuất hiện dưới dạng /proc/mtd, trong khi thiết bị Android của tôi xuất hiện để xuất ra dưới dạng /proc/mounts.

Tôi đã thử tạo một liên kết tượng trưng, ​​nhưng rõ ràng điều này chỉ hoạt động đối với các tệp hoặc thư mục thực tế. Làm thế nào tôi có thể đánh lừa nhị phân này để đọc đầu ra /proc/mountsthay vì /proc/mtd?


1
Bạn có chắc không? Tại sao bạn đã làm được điều đó?
Stéphane Chazelas

Liên quan: Có thể tạo một thư mục và tệp bên trong / Proc / sys không? nơi tôi chỉ cho bạn cách sử dụng unionfs (Tôi không nhớ liệu điều đó có thể xảy ra trên Android không).
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


7

Cách dễ nhất để làm điều đó là thay đổi nhị phân:

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

Mẹo ở đây, vì bạn đang chỉnh sửa nhị phân, là đảm bảo chuỗi gốc /proc/mtdcó cùng độ dài với chuỗi mới /tmp/mntx, để bạn không thay đổi kích thước hoặc vị trí của bất kỳ thứ gì trong nhị phân.

Đây không phải là trò lừa đảo mà nó sẽ không hoạt động nếu nhị phân xây dựng tên đường dẫn thành từng mảnh thay vì sử dụng một chuỗi cố định. Nhưng nó có khả năng thực hiện các mẹo.


Cách thông minh để làm cho nó được thực hiện. Thật không may lnlà đưa ra "tập tin liên kết tồn tại", trong khi /tmp/mntxkhông. (Trên thực tế, tôi đã phải tạo /tmpthư mục.)
Paul Lammertsma

Bạn cũng có thể sử dụng một đường dẫn khác nếu / tmp không hoạt động, như / etc. Bạn cũng không cần một liên kết tượng trưng nào cả - chỉ cần sao chép nội dung của / Proc / mounts vào tệp mới của bạn.
Jim Paris

Oh, ngoài ra, lnlệnh của tôi đã bị ngược, xin lỗi. Đã sửa!
Jim Paris

Ngớ ngẩn mà tôi bỏ qua điều đó, quá. Cảm ơn, sửa chữa này hoạt động như một nét duyên dáng!
Paul Lammertsma

7

Tôi không biết cách thêm mọi thứ vào /procbên ngoài bằng cách viết một mô-đun (hoặc mã hạt nhân đơn giản). Có thể là một số tiện ích ngoài đó mặc dù.

Nếu bạn có thể xây dựng và chèn một mô-đun, thì nó khá đơn giản: bạn chỉ cần tạo một liên kết tượng trưng khác (đã /proc/mountslà một liên kết tượng trưng).

Nguồn ( 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");

Trang điểm:

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

(Điều này giả định rằng bạn sẽ xây dựng cho hệ thống Linux hiện tại của mình. Để xây dựng một cái gì đó cho Android, bạn có thể tham khảo: Làm thế nào để bạn tạo một mô-đun hạt nhân có thể tải cho Android? )

Khi bạn đã tải mô-đun ( insmod mnt_link.ko), bạn sẽ nhận được:

$ 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

Điều đó đang được nói, tiện ích đó của bạn rất có thể đang mong đợi một cái gì đó khác ngoài liên kết tượng trưng này. (Có lẽ nó phụ thuộc vào một mô-đun khác được tải để cung cấp một số thông tin tại vị trí đó.)

Sử dụng có nguy cơ của riêng bạn .


Wow, đó là một địa ngục của một câu trả lời! Cảm ơn vì không chỉ đưa ra một giải pháp, mà còn cung cấp cái nhìn sâu sắc về các liên kết tượng trưng và cách viết chúng.
Paul Lammertsma

@Mat Mô-đun này sẽ làm mờ kernel vì CC-WIKIkhông phải là giấy phép tương thích GPL đã biết với kernel (xem include/linux/license.h).
Lekensteyn

3

Hệ thống tập tin / Proc tồn tại trong bộ nhớ. Xem http://www.kernel.org/doc/Documentation/filesystems/proc.txt để biết thêm thông tin. Liên kết có thể sẽ không hoạt động.

Bạn có thể sử dụng LD_PRELOAD để chặn hàm open (). Xem /programming/426230/what-is-the-ld-preload-trick

Bạn cũng có thể chỉnh sửa tệp nhị phân để thay đổi tên tệp từ / Proc / mnt thành / Proc_mnt và symlink thành / Proc / mounts.

Một tùy chọn khác là biên dịch lại kernel và tạo / Proc / mnt một bí danh cho / Proc / mounts.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.