Соединение/proc/mnt к/proc/mounts

Я однажды записал expect сценарий для входа ssh сервера (как случай) и мой сценарий был чем-то вроде этого:

#!/usr/bin/expect

spawn ssh MyUserName@192.168.20.20
expect "password"
send "MyPassword\r"
interact

Я думаю, возможно, interact отсутствует в Вашем сценарии.

7
29.11.2012, 12:15
4 ответа

Самый легкий способ сделать это состоял бы в том, чтобы изменить двоичный файл:

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

Прием здесь, так как Вы редактируете двоичный файл, должен удостовериться исходная строка /proc/mtd та же длина как новая строка /tmp/mntx, так, чтобы Вы не изменяли размер или местоположение ничего в двоичном файле.

Это не является надежным — это не будет работать, если двоичный файл создаст путь в частях вместо того, чтобы использовать фиксированную строку. Но это, вероятно, добьется цели.

7
27.01.2020, 20:15
  • 1
    Умный способ получить сделанный. К сожалению, ln дает "зарегистрированный Файл ссылки, существует", в то время как /tmp/mntx не делает. (На самом деле я должен был создать /tmp каталог.) –  Paul Lammertsma 29.11.2012, 12:13
  • 2
    Вы могли использовать другой путь также, если/tmp не работает, как / и т.д. Вам также не нужна символьная ссылка вообще - просто копируют содержание/proc/mounts в Ваш новый файл. –  Jim Paris 29.11.2012, 17:11
  • 3
    О, также, мой ln команда была назад, извините. Фиксированный! –  Jim Paris 29.11.2012, 17:14
  • 4
    Глупый, что я пропустил это, также. Спасибо, эта фиксация работает как очарование! –  Paul Lammertsma 29.11.2012, 18:09

Я не знаю о способе добавить вещи к /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");

Make-файл:

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

Однако та ваша утилита могла бы очень хорошо ожидать что-то еще, чем эта символьная ссылка. (Возможно, это зависит от другого модуля, загружаемого для предоставления некоторой информации в том местоположении.)

Используйте в своих собственных рисках.

7
27.01.2020, 20:15
  • 1
    Ничего себе, это - ад ответа! Спасибо за то, что не только дали разрешение, но также и дали понимание символьных ссылок и как записать им. –  Paul Lammertsma 29.11.2012, 11:56
  • 2
    @Mat Этот модуль испортит ядро как CC-WIKI не известная GPL-совместимая лицензия на ядро (см. include/linux/license.h). –  Lekensteyn 19.10.2013, 01:05

/proc файловая система существует в памяти так сказать. См. http://www.kernel.org/doc/Documentation/filesystems/proc.txt для большего количества информации. Ссылки, вероятно, не будут работать.

Вы смогли использовать LD_PRELOAD для прерывания открытого () функция. См. https://stackoverflow.com/questions/426230/what-is-the-ld-preload-trick

Вы могли бы также смочь отредактировать двоичный файл для изменения имени файла от/proc/mnt до/proc_mnt и символьной ссылки это к/proc/mounts.

Другая опция состояла бы в том, чтобы перекомпилировать ядро и сделать/proc/mnt псевдонимом для/proc/mounts.

3
27.01.2020, 20:15

Вы попробовали жесткую ссылку?

ln /proc/mnt /proc/mounts
-1
27.01.2020, 20:15
  • 1
    я боюсь, что это возвращается с link failed No such file or directory. попытка –  Paul Lammertsma 27.11.2012, 23:16
  • 2
    , инвертирующая его.. –  Mark Cohen 27.11.2012, 23:30
  • 3
    Не будет работать. Вы не можете создать файлы под /proc кроме с помощью кода ядра. –  Gilles 'SO- stop being evil' 28.11.2012, 01:44

Теги

Похожие вопросы