OPERATING SYSTEMSOS Linux

reverse engineering makes you a better programmer (let’s try it out)

Learning about how computers work through learning a lower level language like C, Rust or Assembly will make you a better programmer, regardless of what language you code in.

One of the best ways to learn about how computers work is through playing capture the flag. In this video, we’ll walk through an easy capture the flag challenge where we take apart some ARM code.

Go play CTF at https://picoctf.org

🏫 COURSES 🏫 Learn to code in C at https://lowlevel.academy
👕 MERCH 👕 Like the shirt? https://lowlevel.store
📰 NEWSLETTER 📰 Sign up for our newsletter at https://mailchi.mp/lowlevel/the-low-down

🛒 GREAT BOOKS FOR THE LOWEST LEVEL🛒
Blue Fox: Arm Assembly Internals and Reverse Engineering: https://amzn.to/4394t87
Practical Reverse Engineering: x86, x64, ARM, Windows Kernel, Reversing Tools, and Obfuscation : https://amzn.to/3C1z4sk
Practical Malware Analysis: The Hands-On Guide to Dissecting Malicious Software : https://amzn.to/3C1daFy
The Ghidra Book: The Definitive Guide: https://amzn.to/3WC2Vkg

🔥🔥🔥 SOCIALS 🔥🔥🔥
Low Level Merch!: https://lowlevel.store/
Follow me on Twitter: https://twitter.com/LowLevelTweets
Follow me on Twitch: https://twitch.tv/lowlevellearning
Join me on Discord!: https://discord.gg/gZhRXDdBYY

source

by Low Level Learning

linux foundation

37 thoughts on “reverse engineering makes you a better programmer (let’s try it out)

  • Dude the way you explain things feels very organic and coherent, even though I don't even know half of what you're saying- I wish I could 🙂

    I just started learning a little bit of JavaScript but at the same can't help but feel fascinated by low level programming. Someday, I'll have enough knowledge to be able to understand and appreciate the things you describe in your videos 🙏

  • what are the pre-requisites to understand this?🤣

  • I got started with low level programming by making small cheats and mods in Cheat Engine.

  • i've started picoCTF based on your video, best time invested ever!

  • The lower level languages might seem hard and assembly language sure is hard, but at the same time the complexity level in the language tends to not be very high.

    It's true that C++ compilation errors can be some of the biggest headaches a human will ever experience in life, but I feel the language itself is very straight forward as opposed to C# WPF with it's unholy XAML–C# hybrid language.

  • I've never seen Arm Assembly or had it explained to me before so it was revealing to see that fundamentally, while it has it's own unique ISA, it pretty much does the same tasks that you would find in older chips like the 6502, Z80, x86, or 68000k. For some reason I assumed since CPUs have way more registers now it would be too complex to grasp but surprisingly nope, still the same building block process of moving values to and from CPU, to and from Memory, and to and from the Stack. 😃

  • You should consider having an option on your site to purchase access to individual courses! I'm sure I'm not the only one who thinks buying lifetime access is a bit too much of a financial commitment, especially when I don't know if I'll ever have time for any other courses. Love your videos!

  • Best way to learn programming is learn to read code base asap and get the idea behind.

  • Lol i had this crazy idea ab reverse engineering passwd.

    My logic was that if it were written in C, then at the point where stdin is opened an youre promted to input a password, there should be a strcmp() between the inputted pw & the current users "stored password", in which case 1 out of 2 branches are taken, where the password is a match and where its not.

    Tried using objdump to dump the disassembly of the binary & see if i could try to find the cmp instruction, fast forward to numerous grep results of cmp & je instructions, i encountered a skill issue real quick.

    Decided that if im actually gonna do it, to use ghidra instead coz im hopless at asm 😂

  • I honestly get annoyed when using higher level languages. I learned assembly in college and coding made sense to me. When I start coding in higher level, it’s almost more confusing for me.

  • Only binary reverse engineering? Is there no reverse engineering of webpage JavaScript source code? For example, cookies are encrypted. Find the location of the encryption function in the source code.

  • couldn‘t have said it any better. reverse engineering got me deep into software development, because i wanted to understand what was going on under the hood. Nothing else makes you understand race conditions like injecting code into another process and randomly crashing, while other times having a perfectly running program.

  • Something i really like about this kind of video is that there is no cringe music in the background that sometimes can get on top of your voice ;
    No, there is just you, talking fluently about a really interesting concept. As a french who tries to learn computer science AND english at the same time, thank you.

  • it goes the other way too with knowing the high level stuff (ie design patterns) :3

  • Do you have an arm processor? normally you cant run arm binaries on intel based processors right? or are you using some virtualization?

  • wth are we really considering javascript high-level? fucked up world

  • There is also the legend of R4ndom, even if it is pretty old by now.

  • This was really fun and informative, I felt like watching Sherlock Holmes!

  • I’m here. I’m open. I’m free. Insert your diskette into my BSD.
    I like curves. I like it straight. Just give it to me. In my free BSD.
    You can pop it. You can shove it.
    Just write it in GCC !

  • Personally, the most education I've learned from low-level stuff was from OS development.

  • For those who can afford (and could make use of – some people don't like them) a textbook, CMU is also home (so to say) to _Computer Systems: A Programmer’s Perspective_. (Disclaimer: I took the course this is used in – or a version thereof – 20+ years ago while a student there in Logic and Computation.) I do echo our host's recommendation of CTFs for the subject – the text might be useful as a reference.

  • Do you have an official documentation on x86 assembly to advise from which I can learn assembly ?

  • Your name is not Ed. Your name is LOW LEVEL LEARNING DAMMIT.

  • I want to learn assembly but I don’t know where to get started

  • what am i missing, why is the first number greather than second one

  • I watch Ben Eater's videos about his breadboard computer, so I actually have seen quite some assembly before, but assembly meant to run on raw hardware without any OS. So he had to implement the serial print function etc. all by himself.

  • Sorry but the explanations are way too shallow for my liking

  • I have the privilege of knowing a low-level and a high-level language… The perfect synergy to hate both.
    One is either slow or an expensive wrapper for C functions underneath. The other is very fast yet every millisecond using it feels like a lifetime.

    I remember… I remember when sudo was a synonym of power, when XML-RPC was the future for data, when machine-learning and logic each had their role, when WebAssembly promised to bring harmony to us all…
    My reference to hope has long been freed but sorrow keeps leaking. Should I hang up, give the final signal? I hear my soul – kernel of my being – panicking: "No !"
    When stuck in that eternal recursion, when linkers scream in a long-forgotten dialect, when heap and stack overflow…
    I tell myself: "At least I don't code in JS."

  • 9:59: ERROR: INVALID MNEMONIC INTERPRETATION

    DETAILS:
    `BLS` is "Branch if Lower or Same," which is distinct from Branch if Less Than (`BLT`). BLS is used to compare unsigned integers; BLT gets used with signed integers.

    I always had difficulty conceptualizing the compare (`CMP`) operation, until I finally realized: `CMP` is identical to `SUB` (Subtract), except that it throws the result away and keeps the flags. So `CMP w1, w0` can be thought of as `SUB w1, w0` (i.e. result = w1 – w0) and thinking about the result of that subtraction. Is the signed result Less Than zero? If so, `BLT` is what you want. For unsigned integers, is the result underflowed (Lower) or equal to zero (Same)? If so, `BLS` is what you want.

Comments are closed.