How to build a Linux loadable kernel module that Rickrolls people
Ғылым және технология
A totally legit use for Linux loadable kernel modules because....Linux.
Hope you enjoyed the video!
Check out this code here:
github.com/engineer-man/youtu...
Join my Discord server to chat with me:
/ discord
Check out some code on my GitHub:
github.com/ebrian/engineerman
Tweet me something funny on Twitter:
/ _engineerman
Say hi over at Facebook:
/ engineermanyt
Sincerely,
Engineer Man
Пікірлер: 184
As a retired software engineer, starting with IBM 370 systems, I find your videos to be remarkably interesting and educational. Very much appreciated.
1:43 "Kernel Space Program" my favorite video game... Oh wait, it's Kerbal Space Program? Crap
@ChristopherGray00
4 жыл бұрын
That would be interesting, the system crashing along with your ship.
Awesome introduction to kernel module development! Show me more! 😁
@pavel9652
4 жыл бұрын
You probably don't need it, but for future generations ;) There is a free book on Linux drivers development on LWN, which involves writing kernel modules. It is fairly old, as had been written for kernel 2.6, but these things didn't change much. Linux Device Drivers, Third Edition: lwn.net/Kernel/LDD3/
@Nunya58294
2 жыл бұрын
Linux drivers are pretty easy to compile and write as long as you have a basic understanding of what your doing
Hope you can do more on Operating System Programming as compared to web dev/machine learning, the resources on OS is scarce ! And you did great job on teaching it!!
@tissuepaper9962
3 жыл бұрын
There's a book (somewhat outdated now) called just "Linux Kernel Development" by O'Reilly. Also "Linux Device Drivers" by someone else, can't remember. Really creative names, I know.
Correctly me if I’m wrong, but I’m pretty sure you will have a buffer overflow if the user only supplies a small buffer. Always check the length of your destination buffers people!
Me yesterday: researching kernel module & device file. Me today: Listening to rickroll in medieval style. KZread algorithm today:
Despite being a great meme, also ironically one of the best Linux kernel development videos out there
You can make a virus, that opens Never Gonna Give You Up, as soon as browser is closed.
Just the right amount of detail in your videos brother : ]
Recent versions of the kernel won't build the module if it's missing the MODULE_LICENSE tag. You can do that by adding it after calling the module_init/exit registration functions: MODULE_LICENSE("GPL");
@bilalkamran.1511
2 жыл бұрын
this comment should be pinned
Nice video :) kernel is always difficult to explain, you did it perfectly
Reading LPIC-1 book and got to the part with modules and this video taught me a lot of things on how this works. Thanks
I'm glad I found my way back here over a year later. Very cool stuff.
Great video, I struggled with creating a kernel module before. Wish the video had been there then !
Thanks, what a great video to quickly explain how to start writing kernel modules.
Came for the meme, stayed for the knowledge
Big Chungus OS
For anyone running into the module license error, insert this under the header for your .c file: MODULE_LICENSE("Dual BSD/GPL");
@Chris-no9tn
Жыл бұрын
Thanks! Solved the problem for me.
More Linux dev stuff pls! It was awesome
This was extremely informative. Thank you
Nice video man, really interesting! Keep doing these
Yo this video is amazing dude. Finally understand how these modules work! And with a choice example too 👍👍
Awsome introduction! Thanks a lot!
message_len should be size_t as it contains a length. Of course this shouldn't cause any problem as strlen() never returns a value lower than 0 and any further operation is done with the variable, but still, it's nice to get the beginners used to use the correct data types. Great video btw :D
I could not understand this thing by reading a book for four days but your video made it very clear. Thanks dude.
Awesome! You made it look really simple, thank you!
I didn't know that making kernel modules was this simple. Nonetheless, I learned something new today and enjoyed it 👍
Thank you for sharing this knowledge; Very helpful. I am hoping to learning kernel module programming - never had the prior opportunity to; Your video will motivate me in that direction. Thanks again. God Bless.
just by seeing word "Linux" in title, liked the video and now watching.. more Linux videos please!
good video. I anticipated you'd access the module via cat /dev/rickroll, but I expected that just registering the module would have automatically created the entry in /dev
@d1rtyharry378
3 жыл бұрын
I thought the same thing. Registering shows the new device in /proc/devices. But when I do ls -l /dev it doesn't show up. My guess is the device is created but the directory entry that points to this device is not created. Mknod helps to create that directory/file which is managed by the device we created and registered
Great introduction into kernel modules.
This is simply amazing.. Thanks Eng. Man !!!
Awesome video!
I have been unable to comprehend what you did.. but I know what that rickroll can be used for.. brilliant..
Really high quality video. Thanks!
Love your work, keep these videos coming! Haha!
Great explanation, thanks! Btw. would it be a good idea to register the device at the time of loading of the module?
Could you also use psuedo devices to create a com port to replace tty to ease serial communication from a device to program running on WINE? Very informative video, even though I'd never build that lol
Thank you so much. I was able to get this working on Raspberry Pi 3 b VM under Qemu! This is so cool!
Thanks for a short and clear presentation. Do you have one on DKMS
Nicely presented video
This video deserves way more views
Thanks dude ! this is again a very good lesson !
Love your content. Just subscribed. I just found atom . Any chance of an overview of it?
This is so valuable, there is way too little material on LKM's
Thank you very much, this is exactly what I was looking for, clear information, I will subscribe and like... but I have a doubt, how can you know which kernel module goes to which device in /dev?
very useful, ill be sure to use it in the future
Brb installing linux
This video helps me a lot, thx!
Amazing content, thanks a lot!
I have no idea what I’m watching but I like it
That was epic!
Thanks for sharing knowledge
maybe you should compose a , say, main.c program, to show how to call the character-device through syscall, like read, write, and then to demonstrate the relationship between kernel module and user space process.
How to make it to write only once and then close it self? Call dev_release inside dev_read?
@paulstelian97
4 жыл бұрын
You can't normally close the file, but you can use the *offset field to ensure it looks like a normal file. Closing should be handled by the kernel based on the system call itself. Take a look into the source code of the close() system call to see what exactly it does if you do want to close the file yourself.
Did you paste multiple things sequentially one at a time? It didn't look like the video was cut at 3:08 and 3:14 when I noticed this. If so, how do you do this in Linux? I've done this before with Autohotkey in Windows by writing to a text file and pasting one line at a time. I'm curious to see how you did this in Linux if you did.
Great! Instead of "Sorry, rickroll is real only" it should say "You know the rules and so do I!"
Thx for helping me with custom boot.img creation
Studying for linux+ I keep a running notebook in evernote. I linked to this video as an example of creating and managing modules. I'm going to provide my notebook stack internally for the other guys who want to study for the linux+ exam. Though you might like to know that future generations of linux admins learned kernel modules by rickrolling their buddies
Hey man! What font are you using on the terminal?
That video is kinda wholesome.
We need engineer man cap merch
@EngineerMan
5 жыл бұрын
Here you go :)www.amazon.com/Falari-Classic-Baseball-Cotton-Adjustable/dp/B010RDCIM2/ref=sr_1_2
Hey, great vid. Could you please make a tutorial of running an ssh server on Linux?
@MrArondc
5 жыл бұрын
what distro are you running?
Great video
"...🎶 never gonna let you down...🎶 ... never gonna panick ...🎶 unless you create a buffer overflow...🎶"
Would love to see you do the same project on an un-rooted Android device running newer OS. I was having error: "insmod: failed to load test.ko: Exec format error", loaded just fine on Ubuntu -- I'm guessing this example is not for Android.
awesome stuff
Thx for the video. Your link to github repo not pointed to the correct subdirectory (subproject).
@EngineerMan
5 жыл бұрын
Thanks for pointing that out. I just corrected it.
@yoyonel1808
5 жыл бұрын
@@EngineerMan You're welcome :)
I had just learned that the '&&' only executes cmd2 IF cmd1 succeeds. So I have been doing "make clean && make". Is there a problem with that ? My thought would be that it is going to make sure dir is cleaned before running "make". p.s. Trying to follow the video leaves out the '"%d", major ' so I was having a lot of problems until I viewed the repo.
Nice video! Tks!
Very cool. Thanks.
Well. Linus always says don't break userspace. Your rickroll can be exited with Ctrl - C, so you're good.
Dude, i can't get over of how you look exactly like one of Half-Life 2 civilian/resistance NPCs. And.. take that as a compliment, i guess
@joegatton4138
4 жыл бұрын
Lol, now I'm going to be reminded of this for every video.
whats your github handle? And do you have the source code of your videos on github?
Hi Engineers! I have a doubt if anyone could help me... I am trying to get to know how LKM's Work. I Successfully completed an installation with the insmod command, but when I reboot i do not find my module loaded. ( tried to add the name of the module installed into /etc/modules and got an error while loading the raspberry where it is installed . Any hint ? Best regards to everybody!
bro how to rectify the error if the compiler differs from the one used in the kernal,since my program is not working as like you plz someone explain how to get out of this my compiler showing gcc 11.3 and kernal showing gcc 11.2
very good intro haha
grate video really.... grate informations... amazing thanks
Mad scientist laugh...
Strange, how come when I run "cat rickroll", it doesn't trigger the "dev_open" method UNTIL I hit control-c. Any idea?
That was really cool :D
cool vid
Hey Engineer Man, do you have any info on how to install the module from kernel 5.4 ? 'insmod' return 'Operation not permitted', apparently due to the new lockdown feature...
@SheIITear
4 жыл бұрын
Use sudo. Works fine on 5.6.
Im having a problem im missing linux/init.h file but have all others
couldn't you make that module handle the /dev link automatically?
you are awesome❤
Can this code be treated as a code for s device driver in linux? and is this code works in ubuntu? coz I am facing issues here in my ubuntu system
Good one
I suspect that this code can overflow the userspace buffer, in case len < message_len. Do I miss something here?
@tissuepaper9962
3 жыл бұрын
I don't actually know, but I suspect that the function used to copy into the userspace buffer checks for this and would reflect such an error in its return value
Do you age..?
9:08 Shouldn't you only copy min(len, message_len) characters? Otherwise you might write over the bounds of the buffer. 10:35 I guess it's more effective if the device is not named "rickroll". And can you do the equivalent of this mknod call also from your init function, so it stays over restarts of the system?
@igorswies5913
3 жыл бұрын
name it urandom
Great video! Maybe somebody can help me with this: For some reason I'm missing init.h... I did "apt-get install build-essential linux-source linux-headers-`uname -r`" but init.h is not where it's supposed to be. "locate" doesn't find it at all actually. maybe I'm missing something obvious but those are the packages everybody tells me i need...
@AryaFairywren
5 жыл бұрын
you can use apt-file to find a package containing a file you're after. Install apt-file, then try apt-file search init.h
Does this work on Windows 10 Linux subsystem with Wine? I use Arch btw.
@vladimirtatarsky9928
5 жыл бұрын
What you are referring to as Linux, is in fact, GNU/‘Windows Subsystem for Linux’, or as I've recently taken to calling it, GNU plus Windows. Linux is not an operating system unto itself, but rather another free component of a fully functioning GNU system.
@AshesOfEther
5 жыл бұрын
No. The Windows Subsystem for Linux doesn't use the Linux kernel, but rather it converts kernel calls to Win32 calls.
@AshesOfEther
5 жыл бұрын
Lorem Ipsum If you read my comment properly, I said “the Linux kernel”, indicating that I’m talking about Linux itself, not GNU/Linux.
@AshesOfEther
5 жыл бұрын
Lorem Ipsum Did you even read my reply?
@RandyFortier
5 жыл бұрын
@@MantasXVIII I read your reply, and @Tobias SN is correct. He was talking about two things: Windows Subsystem for Linux - the official name Microsoft/Ubuntu use for this component of Windows, and Linux - the kernel, specifically (not the operating system frequently called "Linux" incorrectly, as you have pointed out) Neither correction you made was appropriate, in this case. People do make that mistake, but that isn't what happened here. Then, you just copied and pasted the same reply again, making it clear you didn't real his reply (or, at least not carefully enough). In fact, I'm not even certain you aren't a bot. I guess we'll find out if you reply.
I think some code is missing, the code in the tutorial does not print the major number shown at min 9:59
Awesome! because.... Linux
Haha, I dig it!
this is what computers were created to do
Thanks for the quality content !!! Can you make a video on removing rootkits using rootkit hunter and how to remove the false positive warnings
which Desktop Environment do you use ?
@hyper4306
5 жыл бұрын
He uses CDE
You could make it stream the video, so that you can play it with mplayer or other similar app