Ithaca College 1 Machine-Level Programming VIII: Advanced Topics: alignment & Unions Comp 21000: Introduction to Computer Systems & Assembly Lang Systems.

Slides:



Advertisements
Similar presentations
Machine/Assembler Language Putting It All Together Noah Mendelsohn Tufts University Web:
Advertisements

Dynamic Memory Allocation I Topics Basic representation and alignment (mainly for static memory allocation, main concepts carry over to dynamic memory.
Machine-Level Programming IV: Structured Data Feb 5, 2004 Topics Arrays Structs Unions class08.ppt “The course that gives CMU its Zip!”
University of Washington Data Structures! Arrays  One-dimensional  Multi-dimensional (nested)  Multi-level Structs  Alignment Unions 1.
Carnegie Mellon 1 Machine-Level Programming V: Advanced Topics : Introduction to Computer Systems 8 th Lecture, Sep. 16, 2010 Instructors: Randy.
Structured Data: Sept. 20, 2001 Topics Arrays Structs Unions class08.ppt “The course that gives CMU its Zip!”
Machine-Level Programming IV: Data Sept. 19, 2007 Structured Data Arrays Structs UnionsData/Control Buffer overflow class07.ppt F’07.
Machine-Level Programming IV: Structured Data Topics Arrays Structures Unions CS213.
– 1 – EECS213, S’08 Alignment Aligned Data Primitive data type requires K bytes Address must be multiple of K Required on some machines; advised on IA32.
Structured Data II Heterogenous Data Sept. 22, 1998 Topics Structure Allocation Alignment Operating on Byte Strings Unions Byte Ordering Alpha Memory Organization.
Data Representation and Alignment Topics Simple static allocation and alignment of basic types and data structures Policies Mechanisms.
Machine-Level Programming 6 Structured Data Topics Structs Unions.
Machine-Level Programming V: Advanced Topics CS304
Machine-Level Programming IV: Structured Data Topics Arrays Structs Unions CS 105 “Tour of the Black Holes of Computing”
Carnegie Mellon 1 Bryant and O’Hallaron, Computer Systems: A Programmer’s Perspective, Third Edition Machine-Level Programming IV: Data : Introduction.
Info stored in computer (memory) Numbers All in binaray – can be converted to octal, hex Characters ASCII – 1-byte/char Unicode – 2-byte/char Unicode-table.com/en.
Instructors: Gregory Kesden and Markus Püschel
Carnegie Mellon 1 Bryant and O’Hallaron, Computer Systems: A Programmer’s Perspective, Third Edition Machine-Level Programming V: Unions and Memory layout.
University of Amsterdam Computer Systems – Data in C Arnoud Visser 1 Computer Systems New to C?
Machine-level Programming IV: Data Structures Topics –Arrays –Structs –Unions.
University of Washington Today Lab 3 out  Buffer overflow! Finish-up data structures 1.
Machine-Level Programming V: Advanced Topics
Carnegie Mellon 1 Bryant and O’Hallaron, Computer Systems: A Programmer’s Perspective, Third Edition Machine-Level Programming IV: Data Topics: Arrays.
Fabián E. Bustamante, Spring 2007 Machine-Level Prog. IV - Structured Data Today Arrays Structures Unions Next time Arrays.
Machine-Level Programming IV: Structured Data
Carnegie Mellon 1 Bryant and O’Hallaron, Computer Systems: A Programmer’s Perspective, Third Edition Machine-Level Programming IV: Data MCS284: Computer.
Machine-Level Programming IV: Structured Data Topics Arrays Structs Unions CS 105 “Tour of the Black Holes of Computing”
EECS 370 Discussion 1 xkcd.com. EECS 370 Discussion Topics Today: – ARM Addressing Endianness, Loading, and Storing Data – Data Layout Struct Packing.
Carnegie Mellon /18-243: Introduction to Computer Systems Instructors: Bill Nace and Gregory Kesden (c) All Rights Reserved. All work.
Carnegie Mellon 1 Bryant and O’Hallaron, Computer Systems: A Programmer’s Perspective, Third Edition Machine-Level Programming IV: Data Slides adapted.
Carnegie Mellon 1 Machine-Level Programming V: Advanced Topics / : Introduction to Computer Systems 9 th Lecture, Sep. 25, 2012 Instructors:
Lecture 9 Aggregate Data Topics Arrays Structs Unions again Lab 02 comments Vim, gedit, February 22, 2016 CSCE 212 Computer Architecture.
1 Binghamton University Machine-Level Programming V: Advanced Topics CS220: Computer Systems II.
Carnegie Mellon 1 Machine-Level Programming V: Advanced Topics Slides courtesy of: Randy Bryant & Dave O’Hallaron.
Instructor: Fatma CORUT ERGİN
Big-Endians Little-Endians and Bi-Endians
Machine-Level Programming V: Miscellaneous Topics
Machine-Level Programming IV: Data
Machine-Level Programming IV: Data
Machine-Level Programming V: Unions and Memory layout
Machine-Level Programming V: Miscellaneous Topics
Machine-Level Programming IV: Structured Data
Instructors: Gregory Kesden
Machine-Level Programming IV: Structured Data Sept. 30, 2008
Heterogeneous Data Structures & Alignment
Machine-Level Programming IV: Data CSCE 312
Machine-level Programming IV: Data Structures
Feb 2 Announcements Arrays/Structs in C Lab 2? HW2 released
Machine-Level Programming IV: Data September 8, 2008
Machine-Level Programming 6 Structured Data
Machine-Level Programming IV: Structured Data Sept. 19, 2002
Machine-Level Programming IV: Data
Roadmap C: Java: Assembly language: OS: Machine code: Computer system:
Machine-Level Programming IV: Structured Data
Structured Data II Heterogenous Data Feb. 15, 2000
Machine-Level Programming IV: Data
Instructors: Majd Sakr and Khaled Harras
Machine-Level Programming IV: Machine Data 9th Lecture
Comp Org & Assembly Lang
Machine-Level Programming V: Advanced Topics
Machine-Level Representation of Programs (x86-64)
Machine-Level Programming IV: Structured Data
Instructor: Fatma CORUT ERGİN
Machine-Level Programming VIII: Data Comp 21000: Introduction to Computer Systems & Assembly Lang Spring 2017 Systems book chapter 3* * Modified slides.
Data Spring, 2019 Euiseong Seo
Machine-Level Programming VIII: Data Comp 21000: Introduction to Computer Systems & Assembly Lang Spring 2017 Systems book chapter 3* * Modified slides.
Machine-Level Programming IV: Structured Data
Machine-Level Programming IV: Data
Machine-Level Programming IV: Structured Data
Machine-Level Programming IV: Structured Data
Presentation transcript:

Ithaca College 1 Machine-Level Programming VIII: Advanced Topics: alignment & Unions Comp 21000: Introduction to Computer Systems & Assembly Lang Systems book chapter 3* * Modified slides from the book “Computer Systems: a Programmer’s Perspective”, Randy Bryant & David O’Hallaron, 2011

Ithaca College 2 Today Structures  Alignment Unions Memory Layout Buffer Overflow  Vulnerability  Protection

Ithaca College 3 Structures & Alignment Unaligned Data Aligned Data  Primitive data type requires K bytes  Address must be multiple of K ci[0]i[1]v 3 bytes4 bytes p+0p+4p+8p+16p+24 Multiple of 4Multiple of 8 ci[0]i[1]v pp+1p+5p+9p+17 struct S1 { char c; int i[2]; double v; } *p; struct S1 { char c; int i[2]; double v; } *p;

Ithaca College 4 Alignment Principles Aligned Data  Primitive data type requires K bytes  Address must be multiple of K  Required on some machines; advised on IA32  treated differently by IA32 Linux, x86-64 Linux, and Windows! Motivation for Aligning Data  Memory accessed by (aligned) chunks of 4 or 8 bytes (system dependent)  Inefficient to load or store datum that spans quad word boundaries  Virtual memory very tricky when datum spans 2 pages Compiler  Inserts gaps in structure to ensure correct alignment of fields

Ithaca College 5 Specific Cases of Alignment (IA32) 1 byte: char, …  no restrictions on address 2 bytes: short, …  lowest 1 bit of address must be bytes: int, float, char *, …  lowest 2 bits of address must be bytes: double, …  Windows (and most other OS’s & instruction sets):  lowest 3 bits of address must be  Linux:  lowest 2 bits of address must be 00 2  i.e., treated the same as a 4-byte primitive data type 12 bytes: long double  Windows, Linux:  lowest 2 bits of address must be 00 2  i.e., treated the same as a 4-byte primitive data type

Ithaca College 6 Specific Cases of Alignment (x86-64) 1 byte: char, …  no restrictions on address 2 bytes: short, …  lowest 1 bit of address must be bytes: int, float, …  lowest 2 bits of address must be bytes: double, char *, …  Windows & Linux:  lowest 3 bits of address must be bytes: long double  Linux:  lowest 3 bits of address must be  i.e., treated the same as a 8-byte primitive data type

Ithaca College 7 struct S1 { char c; int i[2]; double v; } *p; struct S1 { char c; int i[2]; double v; } *p; Satisfying Alignment with Structures Within structure:  Must satisfy each element’s alignment requirement Overall structure placement  Each structure has alignment requirement K  K = Largest alignment of any element  Initial address & structure length must be multiples of K Example (under Windows or x86-64):  K = 8, due to double element ci[0]i[1]v 3 bytes4 bytes p+0p+4p+8p+16p+24 Multiple of 4Multiple of 8

Ithaca College 8 Different Alignment Conventions x86-64 or IA32 Windows:  K = 8, due to double element IA32 Linux  K = 4; double treated like a 4-byte data type struct S1 { char c; int i[2]; double v; } *p; struct S1 { char c; int i[2]; double v; } *p; c 3 bytes i[0]i[1] 4 bytes v p+0p+4p+8p+16p+24 c 3 bytes i[0]i[1]v p+0p+4p+8p+12p+20 Multiple of 8 Multiple of 4

Ithaca College 9 Meeting Overall Alignment Requirement For largest alignment requirement K Overall structure must be multiple of K struct S2 { double v; int i[2]; char c; } *p; struct S2 { double v; int i[2]; char c; } *p; vi[0]i[1]c 7 bytes p+0p+8p+16p+24

Ithaca College 10 Ordering Elements Within Structure struct S4 { char c1; double v; char c2; int i; } *p; struct S5 { double v; char c1; char c2; int i; } *p; c1c1 iv p+0p+20p+8p+16 p +24 c2c2 c1iv p+0p+12p+8p+16 c2 10 bytes wasted space in Windows 2 bytes wasted space

Ithaca College 11 Arrays of Structures Overall structure length multiple of K Satisfy alignment requirement for every element struct S2 { double v; int i[2]; char c; } a[10]; struct S2 { double v; int i[2]; char c; } a[10]; vi[0]i[1]c 7 bytes a+24a+32a+40a+48 a[0]a[1]a[2] a+0a+24a+48a+72  Allocated by repeating allocation for array type  In general, may nest arrays & structures to arbitrary depth

Ithaca College 12 Accessing Array Elements Compute array offset 12i  sizeof(S3), including alignment spacers Element j is at offset 8 within structure Assembler gives offset a+8  Resolved during linking struct S3 { short i; float v; short j; } a[10]; struct S3 { short i; float v; short j; } a[10]; short get_j(int idx) { return a[idx].j; } short get_j(int idx) { return a[idx].j; } # %eax = idx leal (%eax,%eax,2),%eax # 3*idx movswl a+8(,%eax,4),%eax # %eax = idx leal (%eax,%eax,2),%eax # 3*idx movswl a+8(,%eax,4),%eax a[0] a[i] a+0a+12a+12i i 2 bytes vj a+12ia+12i+8

Ithaca College 13 Saving Space Put large data types first Effect (K=4) struct S4 { char c; int i; char d; } *p; struct S4 { char c; int i; char d; } *p; struct S5 { int i; char c; char d; } *p; struct S5 { int i; char c; char d; } *p; ci 3 bytes d cid 2 bytes

Ithaca College 14 Satisfying Alignment within Structure Achieving Alignment  Starting address of structure array must be multiple of worst-case alignment for any element  a must be multiple of 4  Offset of element within structure must be multiple of element’s alignment requirement  v ’s offset of 4 is a multiple of 4  Overall size of structure must be multiple of worst-case alignment for any element  Structure padded with unused space to be 12 bytes struct S6 { short i; float v; short j; } a[10]; a[0] a+0 a[i] a+12i a+12ia+12i+4 a[1].ia[1].ja[1].v Multiple of 4

Ithaca College 15 Today Structures  Alignment Unions Memory Layout Buffer Overflow  Vulnerability  Protection

Ithaca College 16 Union Allocation Allocate according to largest element Can only use one field at a time union U1 { char c; int i[2]; double v; } *up; union U1 { char c; int i[2]; double v; } *up; struct S1 { char c; int i[2]; double v; } *sp; struct S1 { char c; int i[2]; double v; } *sp; c 3 bytes i[0]i[1] 4 bytes v sp+0sp+4sp+8sp+16sp+24 c i[0]i[1] v up+0up+4up+8

Ithaca College 17 typedef union { float f; unsigned u; } bit_float_t; typedef union { float f; unsigned u; } bit_float_t; float bit2float(unsigned u) { bit_float_t arg; arg.u = u; return arg.f; } float bit2float(unsigned u) { bit_float_t arg; arg.u = u; return arg.f; } unsigned float2bit(float f) { bit_float_t arg; arg.f = f; return arg.u; } unsigned float2bit(float f) { bit_float_t arg; arg.f = f; return arg.u; } Using Union to Access Bit Patterns Same as (float) u ? NO, not the same as (float) u Same as (unsigned) f ? NO, not the same as (unsigned) f u f 04 Get direct access to bit representation of float

Ithaca College 18 Byte Ordering Revisited Idea  Short/long/quad words stored in memory as 2/4/8 consecutive bytes  Which is most (least) significant?  Can cause problems when exchanging binary data between machines Big Endian  Most significant byte has lowest address  Sparc Little Endian  Least significant byte has lowest address  Intel x86

Ithaca College 19 Byte Ordering Example union { unsigned char c[8]; unsigned short s[4]; unsigned int i[2]; unsigned long l[1]; } dw; 32-bit 64-bit

Ithaca College 20 Byte Ordering Example (Cont). int j; for (j = 0; j < 8; j++) dw.c[j] = 0xf0 + j; printf("Characters 0-7 == [0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x]\n", dw.c[0], dw.c[1], dw.c[2], dw.c[3], dw.c[4], dw.c[5], dw.c[6], dw.c[7]); printf("Shorts 0-3 == [0x%x,0x%x,0x%x,0x%x]\n", dw.s[0], dw.s[1], dw.s[2], dw.s[3]); printf("Ints 0-1 == [0x%x,0x%x]\n", dw.i[0], dw.i[1]); printf("Long 0 == [0x%lx]\n", dw.l[0]);

Ithaca College 21 Byte Ordering on IA32 Little Endian Characters 0-7 == [0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7] Shorts 0-3 == [0xf1f0,0xf3f2,0xf5f4,0xf7f6] Ints 0-1 == [0xf3f2f1f0,0xf7f6f5f4] Long 0 == [0xf3f2f1f0] Output: LSB MSB LSB MSB Print

Ithaca College 22 Byte Ordering on Sun Big Endian Characters 0-7 == [0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7] Shorts 0-3 == [0xf0f1,0xf2f3,0xf4f5,0xf6f7] Ints 0-1 == [0xf0f1f2f3,0xf4f5f6f7] Long 0 == [0xf0f1f2f3] Output on Sun: MSB LSB MSB LSB Print

Ithaca College 23 Byte Ordering on x86-64 Little Endian Characters 0-7 == [0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7] Shorts 0-3 == [0xf1f0,0xf3f2,0xf5f4,0xf7f6] Ints 0-1 == [0xf3f2f1f0,0xf7f6f5f4] Long 0 == [0xf7f6f5f4f3f2f1f0] Output on x86-64: LSB MSB Print

Ithaca College 24 Summary Arrays in C  Contiguous allocation of memory  Aligned to satisfy every element’s alignment requirement  Pointer to first element  No bounds checking Structures  Allocate bytes in order declared  Pad in middle and at end to satisfy alignment Unions  Overlay declarations  Way to circumvent type system