Graphics Programs Reference
In-Depth Information
8048391: eb 13 jmp 80483a6 <main+0x32>
8048393: c7 04 24 84 84 04 08 mov DWORD PTR [esp],0x8048484
804839a: e8 01 ff ff ff call 80482a0 <printf@plt>
804839f: 8d 45 fc lea eax,[ebp-4]
80483a2: ff 00 inc DWORD PTR [eax]
80483a4: eb e5 jmp 804838b <main+0x17>
80483a6: c9 leave
80483a7: c3 ret
80483a8: 90 nop
80483a9: 90 nop
80483aa: 90 nop
reader@hacking:~/booksrc $
Personally, I think Intel syntax is much more readable and easier to
understand, so for the purposes of this topic, I will try to stick with this syntax.
Regardless of the assembly language representation, the commands a pro-
cessor understands are quite simple. These instructions consist of an oper-
ation and sometimes additional arguments that describe the destination
and/or the source for the operation. These operations move memory
around, perform some sort of basic math, or interrupt the processor to get it
to do something else. In the end, that's all a computer processor can really
do. But in the same way millions of books have been written using a relatively
small alphabet of letters, an infinite number of possible programs can be
created using a relatively small collection of machine instructions.
Processors also have their own set of special variables called registers . Most
of the instructions use these registers to read or write data, so understanding
the registers of a processor is essential to understanding the instructions.
The bigger picture keeps getting bigger. . . .
0x252
The x 86 Processor
The 8086 CPU was the first x 86 processor. It was developed and manufactured
by Intel, which later developed more advanced processors in the same
family: the 80186, 80286, 80386, and 80486. If you remember people talking
about 386 and 486 processors in the '80s and '90s, this is what they were
referring to.
The x 86 processor has several registers, which are like internal variables
for the processor. I could just talk abstractly about these registers now, but
I think it's always better to see things for yourself. The GNU development
tools also include a debugger called GDB. Debuggers are used by program-
mers to step through compiled programs, examine program memory, and
view processor registers. A programmer who has never used a debugger to
look at the inner workings of a program is like a seventeenth-century doctor
who has never used a microscope. Similar to a microscope, a debugger allows
a hacker to observe the microscopic world of machine codeā€”but a debugger is
far more powerful than this metaphor allows. Unlike a microscope, a debugger
can view the execution from all angles, pause it, and change anything along
the way.
Search WWH ::




Custom Search