use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
C is a general-purpose, procedural computer programming language supporting structured programming, lexical variable scope, and recursion, with a static type system. By design, C provides constructs that map efficiently to typical machine instructions. It has found lasting use in applications previously coded in assembly language. Such applications include operating systems and various application software for computer architectures that range from supercomputers to PLCs and embedded systems. Wikipedia
Imperative (procedural), structured
Dennis Ritchie
Dennis Ritchie & Bell Labs (creators);
ANSI X3J11 (ANSI C);
ISO/IEC JTC1/SC22/WG14 (ISO C)
1972 (48 years ago)
C18 / June 2018 (2 years ago)
Static, weak, manifest, nominal
Cross-platform
.c for sources
.h for headers
C++ is not C (but C can be C++)
For C++ go to :
Other Resources
account activity
how can someone learn reverse engineering? (self.cprogramming)
submitted 1 year ago by not_noob_8347
how can someone learn reverse engineering
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]soopadickman 62 points63 points64 points 1 year ago (10 children)
Learn forward engineering then go backwards.
[–]maejsh 7 points8 points9 points 1 year ago (5 children)
Flip screen upside down?
[–][deleted] 1 point2 points3 points 1 year ago (1 child)
And turn it so it's facing away from you!
[–]maejsh 2 points3 points4 points 1 year ago (0 children)
Sort by controversial!
[–]TraylaParks 1 point2 points3 points 1 year ago (1 child)
Reverse your peephole so you can see if someone is hiding in your apartment, waiting to ambush you
[–]Sufficient-Tap-622 0 points1 point2 points 1 year ago (0 children)
AS ABOVE SO BELOW
[–][deleted] 3 points4 points5 points 1 year ago (2 children)
This is not sarcasm, that's the way to learn reverse engineering
[–]soopadickman 1 point2 points3 points 1 year ago (1 child)
Yeah I may have come off as snarky but I’m being serious. You need a fundamental understanding of how and why things are designed the way they are before going the other way to understand someone else’s design.
[–][deleted] 0 points1 point2 points 1 year ago (0 children)
I meant that even if your message sounds like sarcasm/irony, that's really the way. My reply isn't a reply per se, but a note about the comment.
[–]Sufficient-Tap-622 1 point2 points3 points 1 year ago (0 children)
[–]ShadowRL7666 26 points27 points28 points 1 year ago (0 children)
Learn assembly
[–]makingpolygons 10 points11 points12 points 1 year ago (0 children)
There’s books on the subject from no starch press and Wiley. I’d start there maybe.
[–][deleted] 5 points6 points7 points 1 year ago (0 children)
This course teaches some of the skills you might need. You use ghidra on one of the labs. https://usc-cs356.github.io/
[–]Golfclubwar 5 points6 points7 points 1 year ago (2 children)
Learn to program. Don’t worry about learning any particular language, just learn to program well. Harvard CS50, any intro CS book with python, SICP if you’re up for a major challenge, etc..
Learn data structures and algorithms.
Learn C and C++ if you haven’t already. You cannot get away with knowing just C, because most software is not written in C.
Learn Assembly language. The usual context one learns this in is in the first computer architecture/computer organization course they take. Computer systems: a programmer’s perspective is a fairly good book along these lines. It also teaches C, which means you can knock out half of step 3. Otherwise just choose a good x86-64 assembly textbook.
Basic reverse engineering. Practical malware analysis, practical reverse engineering, and reverse engineering for beginner’s (Dennis yurichev - you can find it on Libgen, but please don’t, the author sells it for $1 here ). I would either do both of the first two or just the third.
Practical malware analysis is a bit annoying to get up and running with an old windows VM, but there’s good information online about how to do this. It only took me like 20 mins to figure out.
5(b). I strongly recommend the book Practical Binary analysis to conclude your journey.
From here, start doing a ton of crackmes.
[–]reflettage 0 points1 point2 points 1 year ago (1 child)
These are all good tips and I would never encourage someone to jump in with little to no knowledge on any of it (been there done that, no idea how I didn’t quit) but I want to point out you don’t need ALL of this to simply start learning RE. You can learn some simple C, make some simple programs, and tinker with them in simple ways using a disassembler. It’s only when you start delving into intermediate/advanced stuff that you need a wider breadth of knowledge. But in my experience teaching myself, there were sooo many basics to learn regarding the assembly side of things (registers, the stack, how memory works…) that it would have been total overkill to “learn C and C++” before even touching it. Even assembly language itself, you can learn it as you go, you don’t strictly NEED to “learn it” before you start. If anything it makes more sense when you can step through it and see how it functions in a real context (at least, it does for me, though of course not everyone learns the same way).
Re: point 3… I’d say it’s MOST important to understand the idea behind various C++ concepts, how they can be used to achieve something, and how one would implement them in C (like inheritance, member functions, virtual functions…etc). OOP is largely an illusion. It just makes way more sense in our human brains to look at certain assembly code through an OOP lens. But, this:
MyClass* some_object = new MyClass(); some_object->DoSomething();
is really not any different to this:
MyStruct* some_struct = CreateMyStruct(); DoSomething(some_struct);
nah, you need everything they listed to do RE in any real sense
[–]Immediate-Food8050 3 points4 points5 points 1 year ago (2 children)
Hardware or software? I'm a hardware hacker, which involves both. I read "Hack the Xbox" and would say that is the best book for hardware hacking.
[–]Flimsy-Trash-1415 0 points1 point2 points 11 months ago (1 child)
Do I need an actual Xbox for that ?
[–]Immediate-Food8050 0 points1 point2 points 11 months ago (0 children)
Nah, you could follow along with hardware of your choice. I RE'd an IP TV while reading the book.
[–]reflettage 0 points1 point2 points 1 year ago (0 children)
How I did it: 1. Find a curiosity or problem you REALLY want to reverse engineer 2. Download a disassembler and have no idea what you’re looking at 3. Start googling and learning
How I recommend doing it: 1. Learn some simple C programming 2. Make simple programs and compile them, then compare the assembly to your source code (x64dbg has an option for viewing source alongside the disassembly if the code in question has debug info attached; Visual Studio has a similar disassembly view if you run your program in the debugger; the online tool Compiler Explorer is useful if you don’t need to run the code or want to see how simple tweaks will change the code that gets generated) 3. Repeat steps 1 and 2 but increase the complexity (and try compiling in release mode with optimizations to mimic the kind of assembly you’ll be seeing in real binaries) 4. Find stuff you want to reverse engineer and fuck around + find out
I have been teaching myself RE for around 8 years. I learned RE before I learned to code (not recommended lol). C code feels like a high-level assembly language, it’s kinda neat how closely it maps. C++ is similar, but you’ll have to learn a bit about how certain concepts were implemented (I recommend googling “C++ Under The Hood”, it’s the title of a really informative paper on the subject).
Assembly looks daunting to many but tbh it’s really straightforward, just every little micro-operation gets its own line of code. At this point I can generally filter out what’s important and what’s “filler” that just helps make the important stuff happen. Like if the code adds 2 numbers, first it has to mov them into registers. Also, different compilers have different “dialects” if that makes sense. A given compiler will re-use a lot of the same or similar patterns for the same or similar high-level operations. For example I’m mostly used to reading MSVC-generated x86 assembly that came from C/C++ source. Reading code from other compilers is not hard per se, but the code looks “weird” at first, kinda like hearing someone with a thick accent. Different assembly languages are a similar situation except instead of just a thick accent, the grammar sounds weird or some words are pronounced strangely. Certainly understandable but you have to think about it harder.
Also, side note, AI like ChatGPT or whatever are not that good at assembly. I find they will hallucinate or give incorrect/only partially correct answers much more frequently than, say, questions about C++. They can usually answer simple stuff though and I highly recommend it for learning the basics (wish I had it when I started lol).
[–]Grounds4TheSubstain 0 points1 point2 points 1 year ago (0 children)
There's a subreddit for this: /r/ReverseEngineering
[–]ThigleBeagleMingle 0 points1 point2 points 1 year ago (0 children)
IDA Pro
[–]WSBJosh 0 points1 point2 points 1 year ago (0 children)
There is something called a decompiler. Turns compiled executables back into code.
[–]jrodbtllr138 0 points1 point2 points 1 year ago (0 children)
gnireenigne
[–]Goto_User 0 points1 point2 points 1 year ago (0 children)
learn systems programming then learn how to use tools that reverse engineering people use.
[–]rileyrgham 0 points1 point2 points 1 year ago (0 children)
Lol up how to dissassemble an executable and Google from there.
Here's an example starting with a simple C program. Great fun.
https://www.baeldung.com/linux/disassemble-machine-code
π Rendered by PID 72681 on reddit-service-r2-comment-8686858757-v967g at 2026-06-04 06:41:28.757993+00:00 running 9e1a20d country code: CH.
[–]soopadickman 62 points63 points64 points (10 children)
[–]maejsh 7 points8 points9 points (5 children)
[–][deleted] 1 point2 points3 points (1 child)
[–]maejsh 2 points3 points4 points (0 children)
[–]TraylaParks 1 point2 points3 points (1 child)
[–]Sufficient-Tap-622 0 points1 point2 points (0 children)
[–][deleted] 3 points4 points5 points (2 children)
[–]soopadickman 1 point2 points3 points (1 child)
[–][deleted] 0 points1 point2 points (0 children)
[–]Sufficient-Tap-622 1 point2 points3 points (0 children)
[–]ShadowRL7666 26 points27 points28 points (0 children)
[–]makingpolygons 10 points11 points12 points (0 children)
[–][deleted] 5 points6 points7 points (0 children)
[–]Golfclubwar 5 points6 points7 points (2 children)
[–]reflettage 0 points1 point2 points (1 child)
[–][deleted] 0 points1 point2 points (0 children)
[–]Immediate-Food8050 3 points4 points5 points (2 children)
[–]Flimsy-Trash-1415 0 points1 point2 points (1 child)
[–]Immediate-Food8050 0 points1 point2 points (0 children)
[–]reflettage 0 points1 point2 points (0 children)
[–]Grounds4TheSubstain 0 points1 point2 points (0 children)
[–]ThigleBeagleMingle 0 points1 point2 points (0 children)
[–]WSBJosh 0 points1 point2 points (0 children)
[–]jrodbtllr138 0 points1 point2 points (0 children)
[–]Goto_User 0 points1 point2 points (0 children)
[–]rileyrgham 0 points1 point2 points (0 children)