Reversing for dummies – x86 assembly and C code (Beginner/ADHD friendly)
0x44.cc
0x44.cc
As a self taught developer, I tried to learn “bottom up”, i.e. starting from low level concepts in my early teens. Everything I tried to learn bounced off of my brain, and what really got me going was picking up Python, and later Ruby (not rails) in the early 2000s.
This eventually grew into a successful career, and I spent most of my professional life not really knowing much more than the general gist of lower level stuff.
More recently, I decided to go back to trying to learn this and it’s like discovering a whole new world. 20 years of coding gave me great intuitions for higher level code, but left all of these unanswered questions about how it works at a lower level. And it’s making me fall in love with code all over again, because now it all makes so much sense, and answers these questions I sometimes forgot that I had. Taking this a step further and going down to the level of circuits is even more mind expanding, and has been a joy.
If you’ve been coding for a long time and this all seems hard to imagine breaking into, all I can say is: try again! You might be surprised at how much easier it will be now.
From my experience, once you understand the "bottom/low level", you will go back to the "up/high level".
I studied and used at university Assembly language and C (and C++) and I am not willing to write an e-commerce application with ASM 80x86
Beyond this, I think a lot of human thinking is inherently limited by the higher level abstractions we impose on the world, and so while I’d never attempt to write an e-commerce app in assembly, I’ve grown to appreciate the value of understanding the whole system and the wider set of options and deeper intuitions available to me as a result.
Building on that, the "NAND2Tetris" starts, as the name suggests, with basic logic gates and packages these low level concepts Matryoshka-style into recursive boxes with the end goal of programming a Tetris clone. See https://www.nand2tetris.org/
His “Hacking a weird TV censoring device” [0] video is an incredibly fun watch, and what made me an instant subscriber.
Currently working through his 8-bit series and planning to build one at home.
In the past year, however, I've really tried to change my attitude. My 2024 resolution is to gain a baseline level of competency down to the assembly layer at least.
Maybe because each section is short and straight to the point?
For the record I do think putting ADHD friendly in the title is a little silly.
For some people, this is an inconvenience. For some people, this makes the content impenetrable.
In a learning context, most people benefit from better organization and concision. Some people benefit significantly more than others, and they’re called out here.
C# regex docs: https://learn.microsoft.com/en-us/dotnet/api/system.text.reg...
Java regex docs: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pa...
JS regex docs: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
PHP preg_replace docs: https://www.php.net/manual/en/function.preg-replace.php
Python regex docs: https://docs.python.org/3/howto/regex.html
Which one of these is not like the others? The Python docs are brilliant for people that click with that style, and as we can see from this well-shared and very controversial piece, (http://cryto.net/~joepie91/blog/2013/02/19/the-python-docume...) suck for others.
Edit: As usual when the Python docs usability is questioned, cue the "well I've got ADHD and I just LOVE the Python docs" (said in the voice of the 'Well I LOVE SPAM' guy from the Monty Python skit). Sure, but you aren't some sort of standard by which others are measured.
More on C# Regex, extra props for source-generated Regexes also generating documentation to explain the exact pattern and how it is matched similar to how websites like regexr do it.
But almost any time I've seen them discussed, even intimating that they're not ideal in their current state is an open invitation to summoning the online equivalent to a pitchfork-wielding crowd implying you're incompetent, lazy, and stupid for having a different usage style. I'm sure there are a lot of people involved who want nothing more than for them to be as useful as possible to everyone who needs them, but those toxic dynamics emerge so quickly in critique. It would obviously be a huge mistake to simply remove that info, but I think the format could be enhanced to work well with other usage styles.
It's presented in a highly linear conversational fashion but the data doesn't appear to need to be linear. I absorb things in a non-linear fashion (I jump around, sometimes I even read/skim things backwards and out of order.) So it could easily be made ADHD friendly with clear delineation between ideas. A really simple way to do this would be surrounding definition blocks with a slightly lighter background color box and sticking strictly to necessary data, not using conversational language.
Also the color scheme sucks (or rather is non-functional at least to me.). The blue text words really stick out, but the white bold text is what's important. However it also matches with the headers since they seem to be the same font and color, it's really distracting for some reason. Under assembly instructions specifically: like all I see is "value, register, destination, source, destination, expression, destination, destination, destination,..." literally the least important information is highlighted.
The sidebar on the left is distracting too and pulls my eye constantly.
Equating Beginner with ADHD is also mildly offensive and defeats the point if this is targeted at people suffering from ADHD. People with ADHD dive head first in the deep end or not at all, no exceptions. If it's labelled beginner/for-dummies, I'm skipping it or at best skimming it (like i did with this).
[0]: https://thejunkland.com/blog/using-llms-to-reverse-javascrip...
At least it would bring some normalization to variable and function names.
The functionality has also been merged into the bigger `r2ai` tool and supports anthropic and local LLMs as well. [2]
Edit: ADHD in software isn't about being able to read blog posts, we don't need blog post labels. It's about surviving our mindless bullshit one-size-fits-all corporate culture that demands perfect organization of pointless tasks and butts in seats at all times....just like our mindless bullshit one-size-fits-all school system.
https://web.archive.org/web/20190917072736/http://www.woodma...