/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

관련 정보