我不喜欢被当今互联网产业吹嘘到比冥王哈迪斯还该死的所谓业务逻辑,我只喜欢机器本身,所以我不会编程,是的,这是报应。

我只会C语言和汇编,但是并不很。

但我觉得C语言编译器自动生成的那些push RBP之类的指令简直糟糕透了,所以我更喜欢更加纯粹的汇编。

我曾经是一个用Java写过界面的人,我也是一个直接用机器码打开别人开不了机的人,我是一个不懂UML但曾经动用过改锥编程的人,至少我崇拜那样的人。

本文,我来展示一个用汇编写的Linux内核模块,没有gcc生成的prologue & epilogue,也不用include那么一坨头文件,简单直接,请看:
; test.asm global init_module global cleanup_module extern printk section .
data msg db"浙江温州皮鞋湿,下雨进水不会胖\n", 32, 0 section .text init_module: mov rdi, $msg
call printk xor rax, rax ret cleanup_module: ret
Makefile如下:
obj-m += mod.o mod-objs = test.o KDIR := /lib/modules/`uname -r`/build PWD :=
$(shell pwd) default: nasm -f elf64 test.asm -o test.o make -C $(KDIR) M=$(PWD)
modules
直接make,效果如下:
[root@localhost test]# dmesg [ 1076.387265] 浙江温州皮鞋湿,下雨进水不会胖
试试看如何打印出当前的内核版本?

好办!
[root@localhost ~]# cat /proc/kallsyms |grep linux_banner ffffffff8164c0e0 R
linux_banner
代码如下:
global init_module extern printk section .text init_module: mov rdi,
0xffffffff8164c0e0 call printk mov rax, -1 ret
效果如下:
[root@localhost test]# insmod ./mod.ko insmod: ERROR: could not insert module
./mod.ko: Operation not permitted[root@localhost test]# dmesg [ 1757.595004]
Linux version 3.10.x86_64(admin@2969c2e8d7c0) (gcc version 4.8.5 20150623 (Red
Hat 4.8.5-4) (GCC) ) #1 SMP Thu Jan 25 10:26:17 CST 2018
浙江温州皮鞋湿,下雨进水不会胖!

技术
©2019-2020 Toolsou All rights reserved,
Hack Bar 2.1.2 按F9没反应【答学员问】你们从培训机构毕业后都找到什么工作?Redis 计数器 高并发的应用(精华)2020年7月13日 微信小程序 页面间通信SpringDataJPA的Repository理解vue使用THREE.js创建一个可以控制的立方体 云计算的最大安全风险:安全责任不清份额已超宁德时代!LG化学确认将分拆电池业务部门element-ui的el-date-picker组件获取值(精华)2020年8月13日 C#基础知识点 windform实现双色球