一、make[1]: 没有规则可以创建“arch/x86/syscalls/../include/generated/uapi/asm/unistd_32.h”需要的目标“/usr/src/linux-headers-3.11.0-15-generic/arch/x86/syscalls/syscall_32.tbl”。 停止。
执行sudo make会报错,将命令参照上述博客修改为
sudo make -C /usr/src/linux-headers-3.11.0-15-generic/arch/x86/syscalls/syscall_32.tbl M=~不再报错,注意,-C后面参数和M=后面地址应该根据实际情况而定
二、TCP/IP:连接服务器失败(错误原因:Connection refused)
在攻击者连接被攻击者后门程序报错,尝试了多种办法,暂未得到解决
三、linux内核加载驱动提示module verification failed: signature and/or required key missing - tainting kernel
参考博客:linux内核加载驱动提示module verification failed: signature and/or required key missing - tainting kernel-CSDN博客在Makefile中加入CONFIG_MODULE_SIG=n这一行,在头文件附近。
四、mk文件报错:Extraneous text after `else' directive、only one `else' per conditional
参考博客:mk文件报错:Extraneous text after `else' directive、only one `else' per conditional_mk文件 报错显示-CSDN博客
Makefile中换行出现问题,改了就行
五、Makefile错误(2)——missing separator (did you mean TAB instead of 8 spaces?). Stop.
参考博客:Makefile错误(2)——missing separator (did you mean TAB instead of 8 spaces?). Stop.-CSDN博客
Makefile中实际gcc运行行前面是1个tab,而不是8个space,复制可能会有格式问题
vim下能看清楚格式不同
错误格式(8space)
正确格式(1tab)
六、解决错误: fatal error:xxxx: No such file or directory
运行时候注意当前所在位置,报此错大概率是路径不对
七、insmod: ERROR: could not insert module my_block.ko: File exists
这句报错的意思是my_block.ko已经载入内核中了,可以移除后再载入
八、Linux 出现错误 sudo: make: command not found
有可能是make没有安装,安装make即可
sudo apt-get install make
九、eth0:ERROR while getting interface flags:No such device问题解决
可能当前使用的网卡不叫eth0,可以利用iproute show查看当前使用的网卡名
十、# Makefile 4.0 obj-m := sniff.o CURRENT_PATH := $(shell pwd) LINUX_KERNEL := $(shell uname -r) LINUX_KERNEL_PATH := /usr/src/linux-headers-$(LINUX_KERNEL) all: make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules clean: make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean
执行该Makefile报错,gpt给出如下修改意见:
“你的Makefile文件大致上看起来是正确的,它被设计用于在Linux内核源代码树下构建一个名为“sniff.o”的模块。然而,这里可能存在一个问题,那就是LINUX_KERNEL_PATH
变量可能没有正确设置。在你的Makefile中,LINUX_KERNEL_PATH
被硬编码为/usr/src/linux-headers-$(LINUX_KERNEL)
,这意味着它总是指向这个固定的路径,而不论你的Linux内核版本在哪里。这可能导致找不到正确的内核头文件,从而使得构建失败。一个更好的方式是让LINUX_KERNEL_PATH
变量动态地指向当前系统的内核头文件路径。你可以使用$(shell ls /usr/src/linux-headers- | grep $(LINUX_KERNEL))
来找到对应于当前内核版本的头文件路径。这样,无论你的内核在哪里,都可以找到正确的头文件。所以你的Makefile应该修改为:”
# Makefile 4.0
obj-m := sniff.o
CURRENT_PATH := $(shell pwd)
LINUX_KERNEL := $(shell uname -r)
LINUX_KERNEL_PATH := /usr/src/linux-headers-$(LINUX_KERNEL)
$(info Looking for kernel headers at $(LINUX_KERNEL_PATH))
ifneq ($(wildcard $(LINUX_KERNEL_PATH)),)
$(info Found kernel headers)
else
$(error No kernel headers found at $(LINUX_KERNEL_PATH))
endif
all:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
clean:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean
修改之后不报错
后记
报错最主要的原因还是ubuntu版本不同导致的,此外,Makefile的文件名M一定要大写。最后,博客园代码复制很容易就少掉前一两个字母,注意观察一下。