삽입 후 whoami
명령을 편집하는 커널 모듈을 구현 중이며 다음 내용의 Makefile로 컴파일 중입니다 :커널 모듈을 컴파일 한 후 오류가 발생했습니다. sys/syscall.h : 해당 파일이나 디렉토리가 없습니다.
obj-m+=holamundo.o
obj-m+=acumulador.o
obj-m+=cliente.o
obj-m+=intercept.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
내 모듈 코드 :
#define MODULE
#define __KERNEL__
#include <linux/module.h>
#include <linux/kernel.h>
#include </usr/src/kernels/linux/arch/x86/include/asm/unistd.h>
#include <asm/unistd.h>
#include <linux/unistd.h>
#include <linux/syscalls.h>
#include <sys/syscall.h>
#include <asm/fcntl.h>
#include <asm/errno.h>
#include <linux/types.h>
#include <linux/dirent.h>
#include <linux/mman.h>
#include <linux/string.h>
#include <linux/fs.h>
extern void *sys_call_table[];
int (*orig_geteuid)(const char *path);
int hacked_geteuid(const char *path) {
return 78;
}
int init_module(void) {
orig_geteuid = sys_call_table[SYS_geteuid32];
sys_call_table[SYS_geteuid32] = hacked_geteuid;
return 0;
}
void cleanup_module(void) {
sys_call_table[SYS_geteuid32] = orig_geteuid;
}
내가 직면하고 문제는 내가 make
명령을 실행할 때 오류 얻을 수 있습니다 :
내가 코드에서 #include <sys/syscall.h>
를 제거한 후
레드햇 7.3 리눅스 커널 4.12.10을 사용하고, 나는 다음과 같은 오류 얻을 :
이/usr/src/kernels/intercept.c:27:31: error: ‘SYS_geteuid32’ undeclared (first use in this function)
orig_geteuid = sys_call_table[SYS_geteuid32];
^
/usr/src/kernels/intercept.c:27:31: note: each undeclared identifier is reported only once for each function it appears in
/usr/src/kernels/intercept.c: In function ‘cleanup_module’:
/usr/src/kernels/intercept.c:35:17: error: ‘SYS_geteuid32’ undeclared (first use in this function)
sys_call_table[SYS_geteuid32] = orig_geteuid;
아무도 알고 있나요을 제가 잘못하고 있는가?
모듈을 빌드 할 때 커널 소스를 사용합니다. 사용자 공간의 포함 파일을 사용하면 안됩니다. userspace에서 – stark
개의 파일 ??? – rainman
커널에'sys /'헤더가 없습니다. 당신이 거기에서 무엇을 찾고 싶은지 확실하지 않습니다. 또한'#define MODULE'과'#define __KERNEL__'은 잘못되었습니다 :이 매크로들은 필요하다면 커널 빌드 시스템 (KBuild)에 의해 정의됩니다. ** 절대 경로 **를 사용하는'/ usr/src/kernels/linux/arch/x86/include/asm/unistd.h'를 포함하면 의심스러워 보입니다. 'asm/unistd.h'만으로 충분하지 않습니까? – Tsyvarev