WallShadow wrote:I'm a fairly advanced programmer for my age. I started out from Lua, then learned C++, Java, GML, parts of perl, and bits and pieces of javascript, html, and visual basic. Everyone always says how C++, Java, and all these popular languages are all high-level languages. I'm hoping to learn more about the internals workings of computers and computer security and I was wondering, what would be a good low-level language for me to study?
Thanks for reading!
Yay, someone else interested in low-level languages!
Anyways, in the realm of the low-level, there's only a few guys; machine language, binary, and assembly. (Note: Some people will tell you that C is a low-level language. That is absolutely not true. C is, for all intensive purposes, a high level language. While it does, and can, facilitate to the ring 0 arena, so can any other HLL out there (Python for example)). Now, back to my discussion:
If you do not have a good C head on your shoulders, stop reading this, go back an learn that. While I just said that it is, in-fact, a HLL, it is very widely used in the low-level sector as well. If you know C++ well enough, you might get by, but you should still invest some time into C anyway as there are some odd functions and syntaxes of C that C++ doesn't have.
Alright. From here on, I'm assuming you have a decent grip on C. Now, unless you want to be coding in 0's and 1's, which is highly unlikely, extremely difficult, and an amazingly huge time-waster, don't go with binary. While it may be the roots of a computer, it's not even close to efficient to program. So, that leaves us with ASM (assembly language) or machine language. For read-ability, ease, and documentation, I would tell you to go with assembly. While it's perfectly possible to code in machine language, it really doesn't have any advantage over ASM in speed or efficiency. So, that leaves us with ASM.
Some background info on ASM; ASM is the lowest, human readable, language there is. It is what all compilers, compile their code into. This then gets assembled by an assembler, and presto-chango, you have yourself a working, executable, program. It has several advantages to it, those being; faster, more efficient (uses less resources), extremely flexible and customizable, tons of fun. The down sides are that the syntax is more difficult, it's harder to learn, it requires quite a bit of basic computer theory, and doesn't have pre-built functions. It takes a lot of time and effort to learn ASM, but it really is fun in the end.