ti2 tutorium 5. mai 2011 -...
TRANSCRIPT
Ti2 Tutorium 5. Mai 2011
Freitag, 13. Mai 2011 (KW )
Freitag, 13. Mai 2011 (KW )
intel x86 Assembly Language
Freitag, 13. Mai 2011 (KW )
intel x86 Assembly Language
Freitag, 13. Mai 2011 (KW )
intel x86 Assembly Language
• two flavors:
• AT & T Syntax
• .intel_syntax
Freitag, 13. Mai 2011 (KW )
intel x86 Assembly Language
• two flavors:
• AT & T Syntax
• .intel_syntax
• Extensions:
• MMX, SSE, SSE2, SSE3, x86-64
Freitag, 13. Mai 2011 (KW )
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 )
Nachschlagewerke
x86 Assembly Reference:http://www.x86asm.net/
Intel Handbücher:http://www.intel.com/products/processor/manuals/
Die englische Wikipedia:http://en.wikipedia.org/wiki/X86_instruction_listings
Freitag, 13. Mai 2011 (KW )
Nachschlagewerke
Freitag, 13. Mai 2011 (KW )
Nachschlagewerke
manual-page (`manpage`) viewer: `man`
Freitag, 13. Mai 2011 (KW )
Nachschlagewerke
manual-page (`manpage`) viewer: `man`
$ man gcc
Freitag, 13. Mai 2011 (KW )
Nachschlagewerke
manual-page (`manpage`) viewer: `man`
$ man gcc
$ man as
Freitag, 13. Mai 2011 (KW )
Nachschlagewerke
manual-page (`manpage`) viewer: `man`
$ man gcc
$ man as
$ man man
Freitag, 13. Mai 2011 (KW )
Register:0x0000020C
= 2*162 + 0*161 + C*160
= 512 + 0 + 12 * 1
%eax => 514
Freitag, 13. Mai 2011 (KW )
( ) = Wert an Adresse0x0000020C im RAM
0x0000020C = Verweis auf Adresse0x0000020C im RAM
%eax
Freitag, 13. Mai 2011 (KW )
( ) = Wert an Adresse0x0000020C im RAM
0x0000020C = Verweis auf Adresse0x0000020C im RAM
%eaxEAX:0x0000020C
Freitag, 13. Mai 2011 (KW )
direkte Adressierung
indirekte Adressierung
Freitag, 13. Mai 2011 (KW )
Tools
Freitag, 13. Mai 2011 (KW )
• GNU binutils
Tools
Freitag, 13. Mai 2011 (KW )
• GNU binutils
• “gas” – gnu assembler
Tools
Freitag, 13. Mai 2011 (KW )
• GNU binutils
• “gas” – gnu assembler
Tools
Freitag, 13. Mai 2011 (KW )
• GNU binutils
• “gas” – gnu assembler
• GCC – GNU Compiler Collection
Tools
Freitag, 13. Mai 2011 (KW )
• GNU binutils
• “gas” – gnu assembler
• GCC – GNU Compiler Collection
• “cc” – c compiler
Tools
Freitag, 13. Mai 2011 (KW )
• GNU binutils
• “gas” – gnu assembler
• GCC – GNU Compiler Collection
• “cc” – c compiler
• “cpp” / “c++” / “g++” – gnu c++ compiler
Tools
Freitag, 13. Mai 2011 (KW )
C Quelltext (*.c)
Freitag, 13. Mai 2011 (KW )
C Quelltext (*.c)
Assembly Code (*.S)
Freitag, 13. Mai 2011 (KW )
C Quelltext (*.c)
Assembly Code (*.S)
Object File (*.o)
Freitag, 13. Mai 2011 (KW )
C Quelltext (*.c)
Assembly Code (*.S)
Object File (*.o)
EXE
Freitag, 13. Mai 2011 (KW )
C Quelltext (*.c)
Assembly Code (*.S)
Object File (*.o)
EXE ELF
Freitag, 13. Mai 2011 (KW )
C Quelltext (*.c)
Assembly Code (*.S)
Object File (*.o)
EXE ELF Mach-O
Freitag, 13. Mai 2011 (KW )
C Quelltext (*.c)
Assembly Code (*.S)
Object File (*.o)
EXE ELF Mach-O
kompilieren (cc)
Freitag, 13. Mai 2011 (KW )
C Quelltext (*.c)
Assembly Code (*.S)
Object File (*.o)
EXE ELF Mach-O
kompilieren (cc)
assemblieren (as)
Freitag, 13. Mai 2011 (KW )
C Quelltext (*.c)
Assembly Code (*.S)
Object File (*.o)
EXE ELF Mach-O
kompilieren (cc)
assemblieren (as)
linken (ld)
Freitag, 13. Mai 2011 (KW )
C Quelltext (*.c)
Assembly Code (*.S)
Object File (*.o)
EXE ELF Mach-O
kompilieren (cc)
assemblieren (as)
linken (ld)
Freitag, 13. Mai 2011 (KW )
C Quelltext (*.c)
Assembly Code (*.S)
Object File (*.o)
EXE ELF Mach-O
kompilieren (cc)
assemblieren (as)
linken (ld)
Freitag, 13. Mai 2011 (KW )
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 )
Register
Freitag, 13. Mai 2011 (KW )
Register
• %eax
• %ebx
• %ecx
• %edx
Freitag, 13. Mai 2011 (KW )
Register
• %eax
• %ebx
• %ecx
• %edx
Freitag, 13. Mai 2011 (KW )
Register
• %eax
• %ebx
• %ecx
• %edx
• %ebp“base pointer”
Freitag, 13. Mai 2011 (KW )
Register
• %eax
• %ebx
• %ecx
• %edx
• %ebp“base pointer”
• %esp“stack pointer”
Freitag, 13. Mai 2011 (KW )
Register
• %eax
• %ebx
• %ecx
• %edx
• %ebp“base pointer”
• %esp“stack pointer”
Freitag, 13. Mai 2011 (KW )
Register
• %eax
• %ebx
• %ecx
• %edx
• %ebp“base pointer”
• %esp“stack pointer”
Freitag, 13. Mai 2011 (KW )
Register
• %eax
• %ebx
• %ecx
• %edx
• %ebp“base pointer”
• %esp“stack pointer”
Freitag, 13. Mai 2011 (KW )
Register
• %eax
• %ebx
• %ecx
• %edx
• %ebp“base pointer”
• %esp“stack pointer”
BASE ADDRESS
TOP OF STACK
Freitag, 13. Mai 2011 (KW )
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 )