ti2 tutorium 5. mai 2011 -...

46
Ti2 Tutorium 5. Mai 2011 Freitag, 13. Mai 2011 (KW )

Upload: others

Post on 14-Oct-2019

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

Ti2 Tutorium 5. Mai 2011

Freitag, 13. Mai 2011 (KW )

Page 2: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

Freitag, 13. Mai 2011 (KW )

Page 3: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

intel x86 Assembly Language

Freitag, 13. Mai 2011 (KW )

Page 4: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

intel x86 Assembly Language

Freitag, 13. Mai 2011 (KW )

Page 5: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

intel x86 Assembly Language

• two flavors:

• AT & T Syntax

• .intel_syntax

Freitag, 13. Mai 2011 (KW )

Page 6: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

intel x86 Assembly Language

• two flavors:

• AT & T Syntax

• .intel_syntax

• Extensions:

• MMX, SSE, SSE2, SSE3, x86-64

Freitag, 13. Mai 2011 (KW )

Page 7: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

AT & T Syntax(GNU Assembler default)

.intel_syntax(everyone else’s fault)

mov <from>, <to> mov <to>, <from>goto $label goto label(indirect) [indirect]

Freitag, 13. Mai 2011 (KW )

Page 9: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

Nachschlagewerke

Freitag, 13. Mai 2011 (KW )

Page 10: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

Nachschlagewerke

manual-page (`manpage`) viewer: `man`

Freitag, 13. Mai 2011 (KW )

Page 11: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

Nachschlagewerke

manual-page (`manpage`) viewer: `man`

$ man gcc

Freitag, 13. Mai 2011 (KW )

Page 12: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

Nachschlagewerke

manual-page (`manpage`) viewer: `man`

$ man gcc

$ man as

Freitag, 13. Mai 2011 (KW )

Page 13: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

Nachschlagewerke

manual-page (`manpage`) viewer: `man`

$ man gcc

$ man as

$ man man

Freitag, 13. Mai 2011 (KW )

Page 14: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

Register:0x0000020C

= 2*162 + 0*161 + C*160

= 512 + 0 + 12 * 1

%eax => 514

Freitag, 13. Mai 2011 (KW )

Page 15: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

( ) = Wert an Adresse0x0000020C im RAM

0x0000020C = Verweis auf Adresse0x0000020C im RAM

%eax

Freitag, 13. Mai 2011 (KW )

Page 16: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

( ) = Wert an Adresse0x0000020C im RAM

0x0000020C = Verweis auf Adresse0x0000020C im RAM

%eaxEAX:0x0000020C

Freitag, 13. Mai 2011 (KW )

Page 17: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

direkte Adressierung

indirekte Adressierung

Freitag, 13. Mai 2011 (KW )

Page 18: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

Tools

Freitag, 13. Mai 2011 (KW )

Page 19: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

• GNU binutils

Tools

Freitag, 13. Mai 2011 (KW )

Page 20: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

• GNU binutils

• “gas” – gnu assembler

Tools

Freitag, 13. Mai 2011 (KW )

Page 21: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

• GNU binutils

• “gas” – gnu assembler

Tools

Freitag, 13. Mai 2011 (KW )

Page 22: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

• GNU binutils

• “gas” – gnu assembler

• GCC – GNU Compiler Collection

Tools

Freitag, 13. Mai 2011 (KW )

Page 23: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

• GNU binutils

• “gas” – gnu assembler

• GCC – GNU Compiler Collection

• “cc” – c compiler

Tools

Freitag, 13. Mai 2011 (KW )

Page 24: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

• GNU binutils

• “gas” – gnu assembler

• GCC – GNU Compiler Collection

• “cc” – c compiler

• “cpp” / “c++” / “g++” – gnu c++ compiler

Tools

Freitag, 13. Mai 2011 (KW )

Page 25: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

C Quelltext (*.c)

Freitag, 13. Mai 2011 (KW )

Page 26: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

C Quelltext (*.c)

Assembly Code (*.S)

Freitag, 13. Mai 2011 (KW )

Page 27: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

C Quelltext (*.c)

Assembly Code (*.S)

Object File (*.o)

Freitag, 13. Mai 2011 (KW )

Page 28: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

C Quelltext (*.c)

Assembly Code (*.S)

Object File (*.o)

EXE

Freitag, 13. Mai 2011 (KW )

Page 29: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

C Quelltext (*.c)

Assembly Code (*.S)

Object File (*.o)

EXE ELF

Freitag, 13. Mai 2011 (KW )

Page 30: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

C Quelltext (*.c)

Assembly Code (*.S)

Object File (*.o)

EXE ELF Mach-O

Freitag, 13. Mai 2011 (KW )

Page 31: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

C Quelltext (*.c)

Assembly Code (*.S)

Object File (*.o)

EXE ELF Mach-O

kompilieren (cc)

Freitag, 13. Mai 2011 (KW )

Page 32: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

C Quelltext (*.c)

Assembly Code (*.S)

Object File (*.o)

EXE ELF Mach-O

kompilieren (cc)

assemblieren (as)

Freitag, 13. Mai 2011 (KW )

Page 33: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

C Quelltext (*.c)

Assembly Code (*.S)

Object File (*.o)

EXE ELF Mach-O

kompilieren (cc)

assemblieren (as)

linken (ld)

Freitag, 13. Mai 2011 (KW )

Page 34: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

C Quelltext (*.c)

Assembly Code (*.S)

Object File (*.o)

EXE ELF Mach-O

kompilieren (cc)

assemblieren (as)

linken (ld)

Freitag, 13. Mai 2011 (KW )

Page 35: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

C Quelltext (*.c)

Assembly Code (*.S)

Object File (*.o)

EXE ELF Mach-O

kompilieren (cc)

assemblieren (as)

linken (ld)

Freitag, 13. Mai 2011 (KW )

Page 36: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

C Quelltext (*.c)

Assembly Code (*.S)

Object File (*.o)

EXE ELF Mach-O

kompilieren (cc)

assemblieren (as)

linken (ld)

disassemblieren

Freitag, 13. Mai 2011 (KW )

Page 37: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

Register

Freitag, 13. Mai 2011 (KW )

Page 38: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

Register

• %eax

• %ebx

• %ecx

• %edx

Freitag, 13. Mai 2011 (KW )

Page 39: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

Register

• %eax

• %ebx

• %ecx

• %edx

Freitag, 13. Mai 2011 (KW )

Page 40: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

Register

• %eax

• %ebx

• %ecx

• %edx

• %ebp“base pointer”

Freitag, 13. Mai 2011 (KW )

Page 41: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

Register

• %eax

• %ebx

• %ecx

• %edx

• %ebp“base pointer”

• %esp“stack pointer”

Freitag, 13. Mai 2011 (KW )

Page 42: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

Register

• %eax

• %ebx

• %ecx

• %edx

• %ebp“base pointer”

• %esp“stack pointer”

Freitag, 13. Mai 2011 (KW )

Page 43: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

Register

• %eax

• %ebx

• %ecx

• %edx

• %ebp“base pointer”

• %esp“stack pointer”

Freitag, 13. Mai 2011 (KW )

Page 44: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

Register

• %eax

• %ebx

• %ecx

• %edx

• %ebp“base pointer”

• %esp“stack pointer”

Freitag, 13. Mai 2011 (KW )

Page 45: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

Register

• %eax

• %ebx

• %ecx

• %edx

• %ebp“base pointer”

• %esp“stack pointer”

BASE ADDRESS

TOP OF STACK

Freitag, 13. Mai 2011 (KW )

Page 46: Ti2 Tutorium 5. Mai 2011 - page.mi.fu-berlin.depage.mi.fu-berlin.de/~scravy/ti2/ti2-tutorium-2011-05-05.pdfintel x86 Assembly Language • two flavors: • AT & T Syntax •.intel_syntax

3 + 7 * 8 - 4.section .data

.section .text

.globl _start_start: mov $7, %ebx! imul $8, %ebx, %ebx! add $3, %ebx! sub $4, %ebx!

! mov $1, %eax! int $0x80

Freitag, 13. Mai 2011 (KW )