The Assembly language is the lowest level human readable programming language on any platform. Knowing the way things are on the Assembly level will help developers design their code in a much more elegant and efficient way. It may be produced by compiling source code from a high-level programming language (such as C/C++) but can also be written from scratch. Assembly code can be converted to machine code using an assembler.
The first section of the book starts with setting up the development environment on Windows and Linux, mentioning most common toolchains. The reader is led through the basic structure of CPU and memory, and is presented the most important Assembly instructions through examples for both Windows and Linux, 32 and 64 bits. Then the reader would understand how high level languages are translated into Assembly and then compiled into object code. Finally, we will cover patching existing code, either legacy code without sources or a running code in same or remote process.
There is a widespread misbelief that one should by all means avoid using x86 Assembly (we will further use the term “Assembly” for simplicity) language as it is complicated, error prone, high level language compilers make better optimizations than one could make by hand and because programming in Assembly requires much more effort. While the accuracy of these statements is sometimes arguable and sometimes equals to 0, writing a book in order to simply refute them would be an inexcusable waste of time and effort, just like arguing whether chicken preceded the egg or vice versa. Instead, the intention behind this work is to show why it is important to know what lies beneath all the technology, even in this era of virtually unlimited resources and wide variety of software building instruments for every taste, and demonstrate how such knowledge can be applied in daily work.
This site uses cookie files for our mutual comfort.