Assembly 01

advertisement
Assembly 01
Outline
•
•
•
•
•
•
•
1
this analogy will make sense…
Binary vs. Text Files
Compiler vs. Assembler
Mnemonic
Assembly Process
Development Process
Debugging
Example
Text Files
• Meaningful to humans when displayed
• Contains 95 visible characters and white space
• White space includes spaces, tabs, and newlines
• You compile or assemble text files into binary files
• Old school computer scientists wrote binary instructions (yuck!)
• Thank your compiler and/or assembler!!
2
Example Text File
Command-line editor vim showing
simple “Hello World” C++ program
3
Binary Files
• NOT meaningful to humans
• Example binary files:
•
•
•
•
•
4
Executables (i.e., instructions for CPU)
Compressed files (e.g., .zip)
Network I/O
Sensor data
…
Example Text File
Command-line editor vim showing
compiled “Hello World” executable
5
Text Files
• Text files are stored as binary in computer’s memory
• How else would contents be stored?!?!
• Text files are ASCII characters
• 95 meaningful characters and white space
• ASCII character is a byte
• E.g., ‘A’ is 0x41, decimal 65, binary sequence 0100 0001
6
Text File Contents
Bless Hex Editor
equivalent hexadecimal
representing the binary
stored in memory
text
• Texts are stored in memory as binary, but displayed as humanreadable ASCII characters
7
Outline
•
•
•
•
•
•
•
8
this analogy will make sense…
Binary vs. Text Files
Compiler vs. Assembler
Mnemonic
Assembly Process
Development Process
Debugging
Example
Compiler vs. Assembler
high-level language
compile
assembly language
compile
assemble
machine language
(object code)
9
Compiler
high-level language
compile
assembly language
compile
assemble
machine language
(object code)
10
Compiler
• Translates high-level language into object code
• Assembly code may be intermediate step
• Programmer DOES NOT have full control of object code
• Compiler decides what instructions go into machine code
• Compiler decides the order of instructions in machine code
• E.g., code snippet “ x = 4; “ could be compiled into 4 or 5 instructions
11
Assembler
high-level language
compile
assembly language
compile
assemble
machine language
(object code)
12
Mnemonic
• Example use of mov mnemonic:
mov eax,4 ; place 4 in general 32-bit register eax
13
Assembler
• Translates assembly language into machine language
• Programmer has FULL CONTROL of object code
• Must define every instruction to be executed
• “Long journey in very small steps”
• Each “step” is instruction for CPU
• (many lines of code)
14
Outline
•
•
•
•
•
•
•
15
Binary vs. Text Files
Compiler vs. Assembler
Mnemonic
Assembly Process
Development Process
Debugging
Example
Mnemonic
• Assembler sees at least one line of assembly source code for
every machine instruction it generates
• Assembly language has a mnemonic for each machine
instruction available for that architecture
• Example mnemonics for x86 architecture:
•
•
•
•
16
mov
add
push
…
Mnemonic
• Example line of assembly:
mov eax,4 ; place 4 in general 32-bit register eax
17
Mnemonic
• Example line of assembly:
mov eax,4 ; place 4 in general 32-bit register eax
mnemonic
18
Mnemonic
• Example line of assembly:
mov eax,4 ; place 4 in general 32-bit register eax
operands
note:
• some instructions have zero operands
• other instructions have 1 operand
• other instructions have 2 operands
19
Mnemonic
• Example line of assembly:
mov eax,4 ; place 4 in general 32-bit register eax
comment:
starts at ;
ends at EOL
best practice: comment EVERY line of assembly code!!
20
Mnemonic
• Example line of assembly:
mov eax,4 ; place 4 in general 32-bit register eax
instruction: mnemonic and operand(s)
21
Mnemonic
• Assembler converts instruction into object code
mov ebp,esp
; save stack pointer to ebp register
assembly
language
instruction
gets assembled into…
0x8BEC
22
machine
language
instruction
Mnemonic
• Machine language instruction gets decoded…
• Execution cycle begins…
0x8BEC = 1000 1011 1110 1100
23
Mnemonic
• You will become familiar with x86 mnemonics
• Practice, practice, practice writing x86 assembly code
• Same idea for MIPS and ARM assembly..
• Slightly different mnemonics and operands
• Flip through Appendix A in the book…
• Taste of x86 mnemonics
• Don’t worry about details, yet
24
BREAK TIME!!
• Please stand up, stretch your legs, walk around…
25
Outline
•
•
•
•
•
•
•
26
Binary vs. Text Files
Compiler vs. Assembler
Mnemonic
Assembly Process
Development Process
Debugging
Example
Assembly Process
• How to go from assembly source code to executable
• Two steps:
1. Assemble
2. Link
3. (Execute)
27
Assembly Process
.o
.asm
.o
.asm
executable
program
file
.o
.asm
assembly
source
code
file(s)
executable
assembler
object
file(s)
linker
Assembly Process
1) Assembler translates assembly source code into object file
• Assembly source code file(s) end in .asm
• Object file(s) end in .o
• Object file(s) cannot be executed by CPU
• Modern operating systems prevent object file execution
.asm
29
.o
Assembly Process
2) Linker (or loader) creates executable program file
• Linker “links” object file(s) into executable
• Linker creates image of how executable will be stored in memory
.o
30
executable
Assembly Process
2) Execute
• Run the assembly code
• Run the machine language instructions…
• Do cool stuff…
31
Assembly Process
• Example: Assemble, load, and execute “eatsyscall.asm”
• Note: “UNIX>” will indicate the command prompt
• This example is available to download from book’s website:
• http://www.copperwood.com/pub/
• “asmsbs3e.zip” contains all examples in book!!
32
Assembly Process
• Step 1: Assemble the source file eatsyscall.asm
• We’ll discuss what goes into assembly source files in the coming weeks
UNIX> nasm –f elf –g –F stabs eatsyscall.asm
33
Assembly Process
• Step 1: Assemble the source file eatsyscall.asm
UNIX> nasm –f elf –g –F stabs eatsyscall.asm
invoke the
nasm
assembler
34
Assembly Process
• Step 1: Assemble the source file eatsyscall.asm
UNIX> nasm –f elf –g –F stabs eatsyscall.asm
-f elf
command line option:
.o files (produced by
nasm) will be elf
format
35
Assembly Process
• Step 1: Assemble the source file eatsyscall.asm
UNIX> nasm –f elf –g –F stabs eatsyscall.asm
-g
command line option:
include debug
information in .o file
36
Assembly Process
• Step 1: Assemble the source file eatsyscall.asm
UNIX> nasm –f elf –g –F stabs eatsyscall.asm
-F stabs
command line option:
debug information in
“stabs” format
37
Assembly Process
• Step 1: Assemble the source file eatsyscall.asm
UNIX> nasm –f elf –g –F stabs eatsyscall.asm
filename of assembly
source code to be
assembled
38
Assembly Process
• Step 2: Link the object file(s) to create executable
UNIX> ld –o eatsyscall eatsyscall.o
39
Assembly Process
• Step 2: Link the object file(s) to create executable
UNIX> ld –o eatsyscall eatsyscall.o
invoke the linker
40
Assembly Process
• Step 2: Link the object file(s) to create executable
UNIX> ld –o eatsyscall eatsyscall.o
-o
command line option:
specifies name of
executable
(e.g., eatsyscall)
41
Assembly Process
• Step 2: Link the object file(s) to create executable
UNIX> ld –o eatsyscall eatsyscall.o
name of object file(s)
to be linked together
42
Assembly Process
• Step 3: Execute the program
UNIX> ./eatsyscall
Eat at Joe’s!
./
(dot slash) indicates
current directory
43
Assembly Process
• Step 3: Execute the program
UNIX> ./eatsyscall
Eat at Joe’s!
eatsyscall
executable program name
44
Assembly Process
• Step 3: Execute the program
UNIX> ./eatsyscall
Eat at Joe’s!
output
45
Outline
•
•
•
•
•
•
•
46
Binary vs. Text Files
Compiler vs. Assembler
Mnemonic
Assembly Process
Development Process
Debugging
Example
Development Process
• General idea for developing assembly code
1.
2.
3.
4.
5.
6.
47
Edit
Assemble
Link
Execute
Debug
Repeat..
.o
.o
Assembler
no errors
.asm
Assembler
errors
.o
previously
assemble
d object
files
Linker
Linker errors
no errors
editor
Debugger
start here
48
doesn’t
work
executable
works perfectly!! you’re done!!
Outline
•
•
•
•
•
•
•
49
Binary vs. Text Files
Compiler vs. Assembler
Mnemonic
Assembly Process
Development Process
Debugging
Example
Debugging
• We are going to use KDbg
• Easy to use
• View register contents, output, etc.
• GUI front-end to gdb
• Book uses insight (Chapter 6+)
• It would not install on VMs!!
• Other options out there
• e.g., ddd
50
Debugging
screensho
t of KDbg
51
Debugging
• To begin debugging
UNIX> kdbg eatsyscall
kdbg
starts KDbg debugger GUI
52
Debugging
• To begin debugging
UNIX> kdbg eatsyscall
name of executable program
e.g., eatsyscall
53
Debugging
• Using a debugger will save you time and frustration!!!
• Use breakpoints to check flow of execution
• Register contents
• Output
• etc.
• KDbg is a visual debugger, easier than command line only
• gdb command-line debugger is clunky and hard to learn
54
Outline
•
•
•
•
•
•
•
55
Binary vs. Text Files
Compiler vs. Assembler
Mnemonic
Assembly Process
Development Process
Debugging
Example
Example
• VMWare virtual machine
• running Linux operating system (lubuntu)
• Assemble, link, execute eatsyscall.asm
• Use KDbg debugger to analyze registers..
56
Download