Devirtualize Documentation

Size: px
Start display at page:

Download "Devirtualize Documentation"

Transcription

1 Devirtualize Documentation Release 0.1 Adam Schwalm January 25, 2017

2

3 Contents 1 The basics Requirements Installation Usage Viewing the Inheritance Graph Package contents devirtualize.graph module devirtualize.itanium module devirtualize.type module devirtualize.utils module devirtualize.view module Contributing 11 4 Indices and tables 13 Python Module Index 15 i

4 ii

5 CHAPTER 1 The basics Devirtualize is an IDA plugin that rebuilds type information from the vtables and RTTI embedded in a binary. This information can then be used to devirtualize virtual function calls. Some additional features are provided like viewing inheritance graphs. 1.1 Requirements devirtualize was written using IDA Pro It may work with earlier versions but has not been tested. Additionally, the plugin makes use of the IDA Decompiler features, so the user must have a license for that. 1.2 Installation Because the project is built using the IDA python interface, there is no need for compilation. devirtualize folder and devirtualize_main.py file into your ida plugins directory. Just copy the 1.3 Usage Most features of the plugin will require that the user has first run the vtable analysis. To do this go to Edit->Plugins->Devirtualize. This process may take several minutes. After the analysis is completed, structures for each recovered type will be present in the Structures window in IDA. The actual devirtualization will occur automatically. When you have set the type of a local variable, the plugin will devirtualize anything it is able to using that information. For example, suppose you have the following type hierarchy: struct Mammal { Mammal() { std::cout << "Mammal::Mammal\n"; } virtual ~Mammal() {} virtual void walk() { std::cout << "Mammal::walk\n"; } }; struct Cat : Mammal { Cat() { std::cout << "Cat::Cat\n"; } virtual ~Cat() {} virtual void walk() { std::cout << "Cat::walk\n"; } }; 1

6 struct Dog : Mammal { Dog() { std::cout << "Dog::Dog\n"; } virtual ~Dog() {} virtual void walk() { std::cout << "Dog::walk\n"; } }; struct Bird { Bird() { std::cout << "Bird::Bird\n"; } virtual ~Bird() {} virtual void fly() { std::cout << "Bird::fly\n"; } }; // This may not be taxonomically accurate struct Bat : Bird, Mammal { Bat() { std::cout << "Bat::Bat\n"; } virtual ~Bat() {} virtual void fly() { std::cout << "Bat::fly\n"; } }; And a main that looks like: 1 int main() { 2 Bird *b; 3 Mammal* m; 4 if (rand() % 2) { 5 b = new Bat(); 6 m = new Cat(); 7 } else { 8 b = new Bird(); 9 m = new Dog(); 10 } 11 b->fly(); 12 m->walk(); 13 } Obviously the calls to fly and walk on lines 11 and 12 are virtual function calls. Which function is actually called depends on the output of rand. Here s how IDA might show main: 2 Chapter 1. The basics

7 Here the virtual function calls are visible on lines 28 and 29. If we run devirtualize, we can look at the Structures window to see what the plugin has been able to recover Usage 3

8 So devirtualize has correctly recovered the heirarchy, as well as the names using RTTI (if RTTI was disabled, the plugin will generate default names). Going back to the decompiled main output, we notice that lines 13, 16, 22, and 25 contain constructor calls (in future versions, devirtualize may rename the constructor to make this easier to see). If we then set a variable to one of these types, we can see the devirtualization. For example if we mark v3 as a Bat*: 4 Chapter 1. The basics

9 Notice that the virtual call on line 28 has been replaced with a normal function call. This function can be renamed, changed types, etc. It is as though a normal function call was actually there in source. 1.4 Viewing the Inheritance Graph If the user right clicks on v3 after setting its type to Bat*, an additional option Open Ancestor Type Graph will be available that will show an inheritance graph: 1.4. Viewing the Inheritance Graph 5

10 6 Chapter 1. The basics

11 CHAPTER 2 Package contents 2.1 devirtualize.graph module 2.2 devirtualize.itanium module This modules implements vtable, vtablegroup and typeinfo for the Itanium ABI. For reference, read class devirtualize.itanium.itaniumtypeinfo(ea) ItaniumTypeInfo is the RTTI typeinfo representation for the Itanium ABI. ea = None The address of the start of this RTTI object name = None The name present in this RTTI entry parents = None A list (in inheritance order) of the parent RTTI objects class devirtualize.itanium.itaniumvtablegroup(ea) A group of consecutive vtables in the Itanium ABI ea = None Start address of the table group primary_table() Same as self.tables[0] size The size in bytes of this table group tables = None A list of the tables comprising this group typeinfo A handle to the typeinfo for the primary table (and so, the full object associated with this table group). class devirtualize.itanium.itaniumvtable(ea) The Vtable representation for the Itanium ABI address_point = None The address of the start of the function array 7

12 ea = None The address of the start of this vtable functions = None A list of function addresses in this vtable (some may be NULL) offset_to_top = None The offset to the top of the object for a subobject with this vtable size = None The size in bytes of this vtable str_ea A string representation of self.ea, in hex. (Clickable when printed in IDA) typeinfo = None Handle to the RTTI object associated with this vtable (if any) 2.3 devirtualize.type module This module defines the generic Type interface for different ABIs. class devirtualize.type.type(tablegroup=none, typeinfo=none) This is the fundamental type in Devirtualize. Type is a flexible representation of a type that existed during compilation. Such a type may be discovered via RTTI or the presence of a TableGroup. ancestors A tree of the parent types for this type (and their parents, etc). For a heirarchy like this: A B \ / C D \ / E E s ancestors will be the nested dictionaries: { } C: { A: {}, B: {} }, D: {} Warning: Remember that dictionary traversal is not ordered, so the first item in the ancestors dictionary is not necessarily the first parent in the parents list. build_struct() Creates an IDA structure for this Type. children = None A list of this type s children constructors() A list of constructors associated with this type. The list will be empty for types not backed by tablegroups. 8 Chapter 2. Package contents

13 descendants A tree of the child types for this type (and their children, etc). For a heirarchy like this: A / \ B C / / \ D E F A s descendants will be the nested dictionaries: { } B: { D: {}, }, C: { E: {}, F: {} } destructors() A list of destructors associated with this type. The list will be empty for types not backed by tablegroups. family The set of Types that are the direct/indirect children and parents of this Type, as well as the children and parents of those types, recursively. is_ancestor_of(other) Returns True if other is a direct or indirect child of this Type. is_descendant_of(other) Returns True if other is a direct or indirect parent of this Type. parents = None A list of this type s parents in inheritance order table_for_cast(parent) Finds the table that would be used for virtual function lookups if this type was cast to parent. tablegroup = None Handle to the TableGroup backing this type (if any) typeinfo = None Handle to the RTTI typeinfo for this type (if any) devirtualize.type.types(regenerate=false) Returns a memoized list of Type objects for this binary devirtualize.type.fixup_this_arg_types(cfunc) Modifies a cfuncptr_t such that its first argument is a pointer to the Type that has this cfunc in its vtable (and is named this ) devirtualize.type.get_type_by_func(ea) Returns a Type with ea in its vtable. If there are multiple such types, the least derived type is returned (or the 1st found, if the multiple types have no known inheritance relationship). devirtualize.type.get_type_by_name(name) Returns any type object matching name 2.3. devirtualize.type module 9

14 devirtualize.type.get_type_by_tinfo(tinfo) Returns the Type that has a struct with the associated tinfo devirtualize.type.parents_from_destructors(type) Finds the direct parents of the Type associated with tablegroup by examining function calls in its destructor. devirtualize.type.save_type_info() Save the current state/relationships between types. This essentially saves the Devirtualize plugin. devirtualize.type.tables_from_heuristics(require_rtti=false) Yields addresses of VTableGroups found via heuristic methods devirtualize.type.tables_from_names() Yields addresses of VtableGroups if binary is not stripped devirtualize.type.type_matching_typeinfo(types, typeinfo) Get the type in types that is associated with typeinfo. 2.4 devirtualize.utils module 2.5 devirtualize.view module devirtualize.view.translate_vptr_references(cfunc) The real work function of Devirtualize. This function takes a cfuncptr and devirtualizes calls. 10 Chapter 2. Package contents

15 CHAPTER 3 Contributing Keeping in mind that this project is currently very unstable, please feel free to contribute by submitting a pull request to the Github project. 11

16 12 Chapter 3. Contributing

17 CHAPTER 4 Indices and tables genindex modindex search 13

18 14 Chapter 4. Indices and tables

19 Python Module Index d devirtualize.graph, 7 devirtualize.itanium, 7 devirtualize.type, 8 devirtualize.utils, 10 devirtualize.view, 10 15

20 16 Python Module Index

21 Index A address_point (devirtualize.itanium.itaniumvtable attribute), 7 ancestors (devirtualize.type.type attribute), 8 B build_struct() (devirtualize.type.type method), 8 C children (devirtualize.type.type attribute), 8 constructors() (devirtualize.type.type method), 8 D descendants (devirtualize.type.type attribute), 8 destructors() (devirtualize.type.type method), 9 devirtualize.graph (module), 7 devirtualize.itanium (module), 7 devirtualize.type (module), 8 devirtualize.utils (module), 10 devirtualize.view (module), 10 E ea (devirtualize.itanium.itaniumtypeinfo attribute), 7 ea (devirtualize.itanium.itaniumvtable attribute), 7 ea (devirtualize.itanium.itaniumvtablegroup attribute), 7 F family (devirtualize.type.type attribute), 9 fixup_this_arg_types() (in module devirtualize.type), 9 functions (devirtualize.itanium.itaniumvtable attribute), 8 G get_type_by_func() (in module devirtualize.type), 9 get_type_by_name() (in module devirtualize.type), 9 get_type_by_tinfo() (in module devirtualize.type), 9 I is_ancestor_of() (devirtualize.type.type method), 9 is_descendant_of() (devirtualize.type.type method), 9 ItaniumTypeInfo (class in devirtualize.itanium), 7 ItaniumVtable (class in devirtualize.itanium), 7 ItaniumVTableGroup (class in devirtualize.itanium), 7 N name (devirtualize.itanium.itaniumtypeinfo attribute), 7 O offset_to_top (devirtualize.itanium.itaniumvtable attribute), 8 P parents (devirtualize.itanium.itaniumtypeinfo attribute), 7 parents (devirtualize.type.type attribute), 9 parents_from_destructors() (in module devirtualize.type), 10 primary_table() (devirtualize.itanium.itaniumvtablegroup method), 7 S save_type_info() (in module devirtualize.type), 10 size (devirtualize.itanium.itaniumvtable attribute), 8 size (devirtualize.itanium.itaniumvtablegroup attribute), 7 str_ea (devirtualize.itanium.itaniumvtable attribute), 8 T table_for_cast() (devirtualize.type.type method), 9 tablegroup (devirtualize.type.type attribute), 9 tables (devirtualize.itanium.itaniumvtablegroup attribute), 7 tables_from_heuristics() (in module devirtualize.type), 10 tables_from_names() (in module devirtualize.type), 10 translate_vptr_references() (in module devirtualize.view), 10 Type (class in devirtualize.type), 8 17

22 type_matching_typeinfo() (in module devirtualize.type), 10 typeinfo (devirtualize.itanium.itaniumvtable attribute), 8 typeinfo (devirtualize.itanium.itaniumvtablegroup attribute), 7 typeinfo (devirtualize.type.type attribute), 9 Types() (in module devirtualize.type), 9 18 Index

CSI33 Data Structures

CSI33 Data Structures Outline Department of Mathematics and Computer Science Bronx Community College November 13, 2017 Outline Outline 1 C++ Supplement.1: Trees Outline C++ Supplement.1: Trees 1 C++ Supplement.1: Trees Uses

More information

Polymorphism. Zimmer CSCI 330

Polymorphism. Zimmer CSCI 330 Polymorphism Polymorphism - is the property of OOP that allows the run-time binding of a function's name to the code that implements the function. (Run-time binding to the starting address of the code.)

More information

Trees, Part 1: Unbalanced Trees

Trees, Part 1: Unbalanced Trees Trees, Part 1: Unbalanced Trees The first part of this chapter takes a look at trees in general and unbalanced binary trees. The second part looks at various schemes to balance trees and/or make them more

More information

Chapter 20: Binary Trees

Chapter 20: Binary Trees Chapter 20: Binary Trees 20.1 Definition and Application of Binary Trees Definition and Application of Binary Trees Binary tree: a nonlinear linked list in which each node may point to 0, 1, or two other

More information

Traversing Trees with Iterators

Traversing Trees with Iterators Steven J. Zeil June 25, 2013 Contents 1 Iterating over Trees 4 1.1 begin()..................................... 6 1.2 operator++................................... 7 2 Iterators using Parent Pointers 11

More information

Traversing Trees with Iterators

Traversing Trees with Iterators Steven J. Zeil June 25, 2013 Contents 1 Iterating over Trees 3 1.1 begin()................................................................ 5 1.2 operator++..............................................................

More information

Why Do We Need Trees?

Why Do We Need Trees? CSE 373 Lecture 6: Trees Today s agenda: Trees: Definition and terminology Traversing trees Binary search trees Inserting into and deleting from trees Covered in Chapter 4 of the text Why Do We Need Trees?

More information

Chapter 6 Introduction to Defining Classes

Chapter 6 Introduction to Defining Classes Introduction to Defining Classes Fundamentals of Java: AP Computer Science Essentials, 4th Edition 1 Objectives Design and implement a simple class from user requirements. Organize a program in terms of

More information

Uses for Trees About Trees Binary Trees. Trees. Seth Long. January 31, 2010

Uses for Trees About Trees Binary Trees. Trees. Seth Long. January 31, 2010 Uses for About Binary January 31, 2010 Uses for About Binary Uses for Uses for About Basic Idea Implementing Binary Example: Expression Binary Search Uses for Uses for About Binary Uses for Storage Binary

More information

Discussion 2C Notes (Week 8, February 25) TA: Brian Choi Section Webpage:

Discussion 2C Notes (Week 8, February 25) TA: Brian Choi Section Webpage: Discussion 2C Notes (Week 8, February 25) TA: Brian Choi (schoi@cs.ucla.edu) Section Webpage: http://www.cs.ucla.edu/~schoi/cs32 Trees Definitions Yet another data structure -- trees. Just like a linked

More information

Trees : Part 1. Section 4.1. Theory and Terminology. A Tree? A Tree? Theory and Terminology. Theory and Terminology

Trees : Part 1. Section 4.1. Theory and Terminology. A Tree? A Tree? Theory and Terminology. Theory and Terminology Trees : Part Section. () (2) Preorder, Postorder and Levelorder Traversals Definition: A tree is a connected graph with no cycles Consequences: Between any two vertices, there is exactly one unique path

More information

Need to store a list of shapes, each of which could be a circle, rectangle, or triangle

Need to store a list of shapes, each of which could be a circle, rectangle, or triangle CS112-2012S-23 Abstract Classes and Interfaces 1 23-0: Drawing Example Creating a drawing program Allow user to draw triangles, circles, rectanlges, move them around, etc. Need to store a list of shapes,

More information

Lec 17 April 8. Topics: binary Trees expression trees. (Chapter 5 of text)

Lec 17 April 8. Topics: binary Trees expression trees. (Chapter 5 of text) Lec 17 April 8 Topics: binary Trees expression trees Binary Search Trees (Chapter 5 of text) Trees Linear access time of linked lists is prohibitive Heap can t support search in O(log N) time. (takes O(N)

More information

An Insight Into Inheritance, Object Oriented Programming, Run-Time Type Information, and Exceptions PV264 Advanced Programming in C++

An Insight Into Inheritance, Object Oriented Programming, Run-Time Type Information, and Exceptions PV264 Advanced Programming in C++ An Insight Into Inheritance, Object Oriented Programming, Run-Time Type Information, and Exceptions PV264 Advanced Programming in C++ Nikola Beneš Jan Mrázek Vladimír Štill Faculty of Informatics, Masaryk

More information

Polymorphism. Miri Ben-Nissan (Kopel) Miri Kopel, Bar-Ilan University

Polymorphism. Miri Ben-Nissan (Kopel) Miri Kopel, Bar-Ilan University Polymorphism Miri Ben-Nissan (Kopel) 1 Shape Triangle Rectangle Circle int main( ) Shape* p = GetShape( ); p->draw( ); Shape* GetShape( ) choose randomly which shape to send back For example: Shape* p

More information

Largest Online Community of VU Students

Largest Online Community of VU Students WWW.VUPages.com http://forum.vupages.com WWW.VUTUBE.EDU.PK Largest Online Community of VU Students MIDTERM EXAMINATION SEMESTER FALL 2003 CS301-DATA STRUCTURE Total Marks:86 Duration: 60min Instructions

More information

SmartDec: Approaching C++ Decompilation

SmartDec: Approaching C++ Decompilation 2011 18th Working Conference on Reverse Engineering SmartDec: Approaching C++ Decompilation Alexander Fokin, Egor Derevenetc, Alexander Chernov and Katerina Troshina Computational Math. and Cybernetics

More information

MicroPython Development Documentation Documentation

MicroPython Development Documentation Documentation MicroPython Development Documentation Documentation Release 1.0 Radomir Dopieralski Nov 12, 2017 Contents 1 Introduction 3 2 Directory Structure 5 2.1 Docs, Logo and Examples........................................

More information

Binary Tree Node Relationships. Binary Trees. Quick Application: Expression Trees. Traversals

Binary Tree Node Relationships. Binary Trees. Quick Application: Expression Trees. Traversals Binary Trees 1 Binary Tree Node Relationships 2 A binary tree is either empty, or it consists of a node called the root together with two binary trees called the left subtree and the right subtree of the

More information

Binary Trees. For example: Jargon: General Binary Trees. root node. level: internal node. edge. leaf node. Data Structures & File Management

Binary Trees. For example: Jargon: General Binary Trees. root node. level: internal node. edge. leaf node. Data Structures & File Management Binary Trees 1 A binary tree is either empty, or it consists of a node called the root together with two binary trees called the left subtree and the right subtree of the root, which are disjoint from

More information

CSE 431S Type Checking. Washington University Spring 2013

CSE 431S Type Checking. Washington University Spring 2013 CSE 431S Type Checking Washington University Spring 2013 Type Checking When are types checked? Statically at compile time Compiler does type checking during compilation Ideally eliminate runtime checks

More information

C++ Addendum: Inheritance of Special Member Functions. Constructors Destructor Construction and Destruction Order Assignment Operator

C++ Addendum: Inheritance of Special Member Functions. Constructors Destructor Construction and Destruction Order Assignment Operator C++ Addendum: Inheritance of Special Member Functions Constructors Destructor Construction and Destruction Order Assignment Operator What s s Not Inherited? The following methods are not inherited: Constructors

More information

Figure 1. A breadth-first traversal.

Figure 1. A breadth-first traversal. 4.3 Tree Traversals Stepping, or iterating, through the entries of a linearly ordered list has only two obvious orders: from front to back or from back to front. There is no obvious traversal of a general

More information

C++ Inheritance and Encapsulation

C++ Inheritance and Encapsulation C++ Inheritance and Encapsulation Protected members Inheritance Type Public Inheritance Private Inheritance Protected Inheritance Special method inheritance Private vs. Protected Private: private members

More information

BBM 201 Data structures

BBM 201 Data structures BBM 201 Data structures Lecture 11: Trees 2018-2019 Fall Content Terminology The Binary Tree The Binary Search Tree Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, 2013

More information

Inheritance, Polymorphism and the Object Memory Model

Inheritance, Polymorphism and the Object Memory Model Inheritance, Polymorphism and the Object Memory Model 1 how objects are stored in memory at runtime? compiler - operations such as access to a member of an object are compiled runtime - implementation

More information

Operations on Heap Tree The major operations required to be performed on a heap tree are Insertion, Deletion, and Merging.

Operations on Heap Tree The major operations required to be performed on a heap tree are Insertion, Deletion, and Merging. Priority Queue, Heap and Heap Sort In this time, we will study Priority queue, heap and heap sort. Heap is a data structure, which permits one to insert elements into a set and also to find the largest

More information

CSE 374 Final Exam Sample Solution 3/17/11

CSE 374 Final Exam Sample Solution 3/17/11 Question 1. (12 points) (testing) In Homework 5, many solutions included a function to add or insert a new word into the trie, creating appropriate strings and nodes as needed (something like insert(char

More information

Formal Verication of C++ Object Construction and Destruction

Formal Verication of C++ Object Construction and Destruction Formal Verication of C++ Object Construction and Destruction Tahina Ramananandro 1 1 INRIA Paris-Rocquencourt November 18th, 2011 Ramananandro (INRIA) Formal verif. of C++ object constr. and destr.november

More information

- 1 - Handout #22S May 24, 2013 Practice Second Midterm Exam Solutions. CS106B Spring 2013

- 1 - Handout #22S May 24, 2013 Practice Second Midterm Exam Solutions. CS106B Spring 2013 CS106B Spring 2013 Handout #22S May 24, 2013 Practice Second Midterm Exam Solutions Based on handouts by Eric Roberts and Jerry Cain Problem One: Reversing a Queue One way to reverse the queue is to keep

More information

Introduction to Programming Using Java (98-388)

Introduction to Programming Using Java (98-388) Introduction to Programming Using Java (98-388) Understand Java fundamentals Describe the use of main in a Java application Signature of main, why it is static; how to consume an instance of your own class;

More information

QUIZ. Write the following for the class Bar: Default constructor Constructor Copy-constructor Overloaded assignment oper. Is a destructor needed?

QUIZ. Write the following for the class Bar: Default constructor Constructor Copy-constructor Overloaded assignment oper. Is a destructor needed? QUIZ Write the following for the class Bar: Default constructor Constructor Copy-constructor Overloaded assignment oper. Is a destructor needed? Or Foo(x), depending on how we want the initialization

More information

C++ Important Questions with Answers

C++ Important Questions with Answers 1. Name the operators that cannot be overloaded. sizeof,.,.*,.->, ::,? 2. What is inheritance? Inheritance is property such that a parent (or super) class passes the characteristics of itself to children

More information

Fuzzing Clang to find ABI Bugs. David Majnemer

Fuzzing Clang to find ABI Bugs. David Majnemer Fuzzing Clang to find ABI Bugs David Majnemer What s in an ABI? The size, alignment, etc. of types Layout of records, RTTI, virtual tables, etc. The decoration of types, functions, etc. To generalize:

More information

C++ Crash Kurs. Polymorphism. Dr. Dennis Pfisterer Institut für Telematik, Universität zu Lübeck

C++ Crash Kurs. Polymorphism. Dr. Dennis Pfisterer Institut für Telematik, Universität zu Lübeck C++ Crash Kurs Polymorphism Dr. Dennis Pfisterer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/pfisterer C++ Polymorphism Major abstractions of C++ Data abstraction

More information

Relationships Between Real Things CSE 143. Common Relationship Patterns. Employee. Supervisor

Relationships Between Real Things CSE 143. Common Relationship Patterns. Employee. Supervisor CSE 143 Object & Class Relationships Inheritance Reading: Ch. 9, 14 Relationships Between Real Things Man walks dog Dog strains at leash Dog wears collar Man wears hat Girl feeds dog Girl watches dog Dog

More information

Crit-bit Trees. Adam Langley (Version )

Crit-bit Trees. Adam Langley (Version ) Crit-bit Trees Adam Langley (agl@imperialviolet.org) (Version 20080926) 1. Introduction This code is taken from Dan Bernstein s qhasm and implements a binary crit-bit (alsa known as PATRICA) tree for NUL

More information

Data Structures and Algorithms

Data Structures and Algorithms Data Structures and Algorithms Trees Sidra Malik sidra.malik@ciitlahore.edu.pk Tree? In computer science, a tree is an abstract model of a hierarchical structure A tree is a finite set of one or more nodes

More information

Best-First Search! Minimizing Space or Time!! RBFS! Save space, take more time!

Best-First Search! Minimizing Space or Time!! RBFS! Save space, take more time! Best-First Search! Minimizing Space or Time!! RBFS! Save space, take more time! RBFS-1 RBFS general properties! Similar to A* algorithm developed for heuristic search! RBFS-2 RBFS general properties 2!

More information

Increases Program Structure which results in greater reliability. Polymorphism

Increases Program Structure which results in greater reliability. Polymorphism UNIT 4 C++ Inheritance What is Inheritance? Inheritance is the process by which new classes called derived classes are created from existing classes called base classes. The derived classes have all the

More information

Relationships Between Real Things. CSE 143 Java. Common Relationship Patterns. Composition: "has a" CSE143 Sp Student.

Relationships Between Real Things. CSE 143 Java. Common Relationship Patterns. Composition: has a CSE143 Sp Student. CSE 143 Java Object & Class Relationships Inheritance Reading: Ch. 9, 14 Relationships Between Real Things Man walks dog Dog strains at leash Dog wears collar Man wears hat Girl feeds dog Girl watches

More information

Trees. Chapter 6. strings. 3 Both position and Enumerator are similar in concept to C++ iterators, although the details are quite different.

Trees. Chapter 6. strings. 3 Both position and Enumerator are similar in concept to C++ iterators, although the details are quite different. Chapter 6 Trees In a hash table, the items are not stored in any particular order in the table. This is fine for implementing Sets and Maps, since for those abstract data types, the only thing that matters

More information

CSI33 Data Structures

CSI33 Data Structures Outline Department of Mathematics and Computer Science Bronx Community College October 19, 2016 Outline Outline 1 Chapter 7: Trees Outline Chapter 7: Trees 1 Chapter 7: Trees Uses Of Trees Chapter 7: Trees

More information

ECE 122. Engineering Problem Solving with Java

ECE 122. Engineering Problem Solving with Java ECE 122 Engineering Problem Solving with Java Lecture 22 Polymorphism using Interfaces Overview Problem: Can we delay decisions regarding which method to use until run time? Polymorphism Different methods

More information

Compuer Science 62 Assignment 10

Compuer Science 62 Assignment 10 Compuer Science 62 Assignment 10 Due 11:59pm on Thursday, April 22, 2010 This assignment is the C++ version of the animal game. The program will have three parts, which have been carefully specified. You

More information

Relationships Between Real Things CSC 143. Common Relationship Patterns. Composition: "has a" CSC Employee. Supervisor

Relationships Between Real Things CSC 143. Common Relationship Patterns. Composition: has a CSC Employee. Supervisor CSC 143 Object & Class Relationships Inheritance Reading: Ch. 10, 11 Relationships Between Real Things Man walks dog Dog strains at leash Dog wears collar Man wears hat Girl feeds dog Girl watches dog

More information

CSE351 Winter 2016, Final Examination March 16, 2016

CSE351 Winter 2016, Final Examination March 16, 2016 CSE351 Winter 2016, Final Examination March 16, 2016 Please do not turn the page until 2:30. Rules: The exam is closed-book, closed-note, etc. Please stop promptly at 4:20. There are 125 (not 100) points,

More information

BST Implementation. Data Structures. Lecture 4 Binary search trees (BST) Dr. Mahmoud Attia Sakr University of Ain Shams

BST Implementation. Data Structures. Lecture 4 Binary search trees (BST) Dr. Mahmoud Attia Sakr University of Ain Shams Lecture 4 Binary search trees (BST) Dr. Mahmoud Attia Sakr mahmoud.sakr@cis.asu.edu.eg Cairo, Egypt, October 2012 Binary Search Trees (BST) 1. Hierarchical data structure with a single reference to root

More information

Overview. Constructors and destructors Virtual functions Single inheritance Multiple inheritance RTTI Templates Exceptions Operator Overloading

Overview. Constructors and destructors Virtual functions Single inheritance Multiple inheritance RTTI Templates Exceptions Operator Overloading HOW C++ WORKS Overview Constructors and destructors Virtual functions Single inheritance Multiple inheritance RTTI Templates Exceptions Operator Overloading Motivation There are lot of myths about C++

More information

XC Total Max Score Grader

XC Total Max Score Grader NAME: NETID: CS2110 Fall 2013, Prelim 1 Thursday Oct 10, 2013 (7:30-9:00p) The exam is closed book and closed notes. Do not begin until instructed. You have 90 minutes. Good luck! Write your name and Cornell

More information

Trees, Binary Trees, and Binary Search Trees

Trees, Binary Trees, and Binary Search Trees COMP171 Trees, Binary Trees, and Binary Search Trees 2 Trees Linear access time of linked lists is prohibitive Does there exist any simple data structure for which the running time of most operations (search,

More information

COSC 2011 Section N. Trees: Terminology and Basic Properties

COSC 2011 Section N. Trees: Terminology and Basic Properties COSC 2011 Tuesday, March 27 2001 Overview Trees and Binary Trees Quick review of definitions and examples Tree Algorithms Depth, Height Tree and Binary Tree Traversals Preorder, postorder, inorder Binary

More information

Practice Final Examination #2

Practice Final Examination #2 Eric Roberts Handout #54 CS106B March 11, 2013 Practice Final Examination #2 Review session: Sunday, March 17, 3:00 5:00 P.M. (Hewlett 200) Scheduled finals: Tuesday, March 19, 12:15 3:15 P.M. (Hewlett

More information

Lecture Notes 16 - Trees CSS 501 Data Structures and Object-Oriented Programming Professor Clark F. Olson

Lecture Notes 16 - Trees CSS 501 Data Structures and Object-Oriented Programming Professor Clark F. Olson Lecture Notes 16 - Trees CSS 501 Data Structures and Object-Oriented Programming Professor Clark F. Olson Reading: Carrano, Chapter 15 Introduction to trees The data structures we have seen so far to implement

More information

Short Notes of CS201

Short Notes of CS201 #includes: Short Notes of CS201 The #include directive instructs the preprocessor to read and include a file into a source code file. The file name is typically enclosed with < and > if the file is a system

More information

Binary Trees. Height 1

Binary Trees. Height 1 Binary Trees Definitions A tree is a finite set of one or more nodes that shows parent-child relationship such that There is a special node called root Remaining nodes are portioned into subsets T1,T2,T3.

More information

3.Constructors and Destructors. Develop cpp program to implement constructor and destructor.

3.Constructors and Destructors. Develop cpp program to implement constructor and destructor. 3.Constructors and Destructors Develop cpp program to implement constructor and destructor. Constructors A constructor is a special member function whose task is to initialize the objects of its class.

More information

CSC/MAT-220: Lab 6. Due: 11/26/2018

CSC/MAT-220: Lab 6. Due: 11/26/2018 CSC/MAT-220: Lab 6 Due: 11/26/2018 In Lab 2 we discussed value and type bindings. Recall, value bindings bind a value to a variable and are intended to be static for the life of a program. Type bindings

More information

Outline. An Application: A Binary Search Tree. 1 Chapter 7: Trees. favicon. CSI33 Data Structures

Outline. An Application: A Binary Search Tree. 1 Chapter 7: Trees. favicon. CSI33 Data Structures Outline Chapter 7: Trees 1 Chapter 7: Trees Approaching BST Making a decision We discussed the trade-offs between linked and array-based implementations of sequences (back in Section 4.7). Linked lists

More information

CSE100. Advanced Data Structures. Lecture 12. (Based on Paul Kube course materials)

CSE100. Advanced Data Structures. Lecture 12. (Based on Paul Kube course materials) CSE100 Advanced Data Structures Lecture 12 (Based on Paul Kube course materials) CSE 100 Coding and decoding with a Huffman coding tree Huffman coding tree implementation issues Priority queues and priority

More information

C++ Inheritance and Encapsulation

C++ Inheritance and Encapsulation C++ Inheritance and Encapsulation Private and Protected members Inheritance Type Public Inheritance Private Inheritance Protected Inheritance Special method inheritance 1 Private Members Private members

More information

CS201 - Introduction to Programming Glossary By

CS201 - Introduction to Programming Glossary By CS201 - Introduction to Programming Glossary By #include : The #include directive instructs the preprocessor to read and include a file into a source code file. The file name is typically enclosed with

More information

Binary Files Ch 11.3

Binary Files Ch 11.3 Binary Files Ch 11.3 Announcements Please only use one Scanner variable in homework (makes our lives easier) Last lab next week, please show up: - Extra credit points - Short lab Random file access So

More information

CSE 333 Midterm Exam 2/14/14

CSE 333 Midterm Exam 2/14/14 Name There are 4 questions worth a total of 100 points. Please budget your time so you get to all of the questions. Keep your answers brief and to the point. The exam is closed book, closed notes, closed

More information

Multiple choice questions. Answer on Scantron Form. 4 points each (100 points) Which is NOT a reasonable conclusion to this sentence:

Multiple choice questions. Answer on Scantron Form. 4 points each (100 points) Which is NOT a reasonable conclusion to this sentence: Multiple choice questions Answer on Scantron Form 4 points each (100 points) 1. Which is NOT a reasonable conclusion to this sentence: Multiple constructors for a class... A. are distinguished by the number

More information

ITI Introduction to Computing II

ITI Introduction to Computing II ITI 1121. Introduction to Computing II Marcel Turcotte School of Electrical Engineering and Computer Science Binary search tree (part I) Version of March 24, 2013 Abstract These lecture notes are meant

More information

Frontier Documentation

Frontier Documentation Frontier Documentation Release 0.1.3-dev Sam Nicholls August 14, 2014 Contents 1 Frontier 3 1.1 Requirements............................................... 3 1.2 Installation................................................

More information

Lecture 15 Binary Search Trees

Lecture 15 Binary Search Trees Lecture 15 Binary Search Trees 15-122: Principles of Imperative Computation (Fall 2017) Frank Pfenning, André Platzer, Rob Simmons, Iliano Cervesato In this lecture, we will continue considering ways to

More information

python-anyvcs Documentation

python-anyvcs Documentation python-anyvcs Documentation Release 1.4.0 Scott Duckworth Sep 27, 2017 Contents 1 Getting Started 3 2 Contents 5 2.1 The primary API............................................. 5 2.2 Git-specific functionality.........................................

More information

Topic 14. The BinaryTree ADT

Topic 14. The BinaryTree ADT Topic 14 The BinaryTree ADT Objectives Define trees as data structures Define the terms associated with trees Discuss tree traversal algorithms Discuss a binary tree implementation Examine a binary tree

More information

Trees. Example: Binary expression trees. Example: Evolution trees. Readings: HtDP, sections 14, 15, 16.

Trees. Example: Binary expression trees. Example: Evolution trees. Readings: HtDP, sections 14, 15, 16. Trees Readings: HtDP, sections 14, 15, 16. We will cover the ideas in the text using different examples and different terminology. The readings are still important as an additional source of examples.

More information

Trees Slow Insertion in an Ordered Array If you re going to be doing a lot of insertions and deletions, an ordered array is a bad choice.

Trees Slow Insertion in an Ordered Array If you re going to be doing a lot of insertions and deletions, an ordered array is a bad choice. Trees Slow Insertion in an Ordered Array Imagine an array in which all the elements are arranged in order; that is, an ordered array, it s quick to search such an array for a particular value, using a

More information

Software Design and Analysis for Engineers

Software Design and Analysis for Engineers Software Design and Analysis for Engineers by Dr. Lesley Shannon Email: lshannon@ensc.sfu.ca Course Website: http://www.ensc.sfu.ca/~lshannon/courses/ensc251 Simon Fraser University Slide Set: 2 Date:

More information

DEVIRTUALIZATION IN LLVM

DEVIRTUALIZATION IN LLVM DEVIRTUALIZATION IN LLVM Piotr Padlewski piotr.padlewski@gmail.com University of Warsaw IIIT @PiotrPadlewski CURRENT DEVIRTUALIZATION IN THE FRONTEND struct A { ; virtual void foo(); void f() { A a; a.foo();

More information

Supporting Class / C++ Lecture Notes

Supporting Class / C++ Lecture Notes Goal Supporting Class / C++ Lecture Notes You started with an understanding of how to write Java programs. This course is about explaining the path from Java to executing programs. We proceeded in a mostly

More information

Trees. (Trees) Data Structures and Programming Spring / 28

Trees. (Trees) Data Structures and Programming Spring / 28 Trees (Trees) Data Structures and Programming Spring 2018 1 / 28 Trees A tree is a collection of nodes, which can be empty (recursive definition) If not empty, a tree consists of a distinguished node r

More information

TREES. Trees - Introduction

TREES. Trees - Introduction TREES Chapter 6 Trees - Introduction All previous data organizations we've studied are linear each element can have only one predecessor and successor Accessing all elements in a linear sequence is O(n)

More information

Inheritance and Polymorphism

Inheritance and Polymorphism Inheritance and Polymorphism Inheritance (Continued) Polymorphism Polymorphism by inheritance Polymorphism by interfaces Reading for this lecture: L&L 10.1 10.3 1 Interface Hierarchies Inheritance can

More information

CSE 250 Final Exam. Fall 2013 Time: 3 hours. Dec 11, No electronic devices of any kind. You can open your textbook and notes

CSE 250 Final Exam. Fall 2013 Time: 3 hours. Dec 11, No electronic devices of any kind. You can open your textbook and notes CSE 250 Final Exam Fall 2013 Time: 3 hours. Dec 11, 2013 Total points: 100 14 pages Please use the space provided for each question, and the back of the page if you need to. Please do not use any extra

More information

TREES. Tree Overview 9/28/16. Prelim 1 tonight! Important Announcements. Tree terminology. Binary trees were in A1!

TREES. Tree Overview 9/28/16. Prelim 1 tonight! Important Announcements. Tree terminology. Binary trees were in A1! //16 Prelim 1 tonight! :3 prelim is very crowded. You HAVE to follow these directions: 1. Students taking the normal :3 prelim (not the quiet room) and whose last names begin with A through Da MUST go

More information

Programming in C# Inheritance and Polymorphism

Programming in C# Inheritance and Polymorphism Programming in C# Inheritance and Polymorphism C# Classes Classes are used to accomplish: Modularity: Scope for global (static) methods Blueprints for generating objects or instances: Per instance data

More information

Midterm 2. 7] Explain in your own words the concept of a handle class and how it s implemented in C++: What s wrong with this answer?

Midterm 2. 7] Explain in your own words the concept of a handle class and how it s implemented in C++: What s wrong with this answer? Midterm 2 7] Explain in your own words the concept of a handle class and how it s implemented in C++: What s wrong with this answer? A handle class is a pointer vith no visible type. What s wrong with

More information

A set of nodes (or vertices) with a single starting point

A set of nodes (or vertices) with a single starting point Binary Search Trees Understand tree terminology Understand and implement tree traversals Define the binary search tree property Implement binary search trees Implement the TreeSort algorithm 2 A set of

More information

Object-Oriented Concept

Object-Oriented Concept Object-Oriented Concept Encapsulation ADT, Object Inheritance Derived object Polymorphism Each object knows what it is Polymorphism noun, the quality or state of being able to assume different forms -

More information

Overview. Lecture 7: Inheritance and GUIs. Inheritance. Example 9/30/2008

Overview. Lecture 7: Inheritance and GUIs. Inheritance. Example 9/30/2008 Overview Lecture 7: Inheritance and GUIs Written by: Daniel Dalevi Inheritance Subclasses and superclasses Java keywords Interfaces and inheritance The JComponent class Casting The cosmic superclass Object

More information

ITI Introduction to Computing II

ITI Introduction to Computing II ITI 1121. Introduction to Computing II Marcel Turcotte School of Electrical Engineering and Computer Science Binary search tree (part I) Version of March 24, 2013 Abstract These lecture notes are meant

More information

Unit III - Tree TREES

Unit III - Tree TREES TREES Unit III - Tree Consider a scenario where you are required to represent the directory structure of your operating system. The directory structure contains various folders and files. A folder may

More information

CS 270 Algorithms. Oliver Kullmann. Binary search. Lists. Background: Pointers. Trees. Implementing rooted trees. Tutorial

CS 270 Algorithms. Oliver Kullmann. Binary search. Lists. Background: Pointers. Trees. Implementing rooted trees. Tutorial Week 7 General remarks Arrays, lists, pointers and 1 2 3 We conclude elementary data structures by discussing and implementing arrays, lists, and trees. Background information on pointers is provided (for

More information

Object Model Comparisons

Object Model Comparisons Object Model Comparisons 1 Languages are designed, just like programs Someone decides what the language is for Someone decides what features it's going to have Can't really understand a language until

More information

CISC 235 Topic 3. General Trees, Binary Trees, Binary Search Trees

CISC 235 Topic 3. General Trees, Binary Trees, Binary Search Trees CISC 235 Topic 3 General Trees, Binary Trees, Binary Search Trees Outline General Trees Terminology, Representation, Properties Binary Trees Representations, Properties, Traversals Recursive Algorithms

More information

Java Inheritance. Written by John Bell for CS 342, Spring Based on chapter 6 of Learning Java by Niemeyer & Leuck, and other sources.

Java Inheritance. Written by John Bell for CS 342, Spring Based on chapter 6 of Learning Java by Niemeyer & Leuck, and other sources. Java Inheritance Written by John Bell for CS 342, Spring 2018 Based on chapter 6 of Learning Java by Niemeyer & Leuck, and other sources. Review Which of the following is true? A. Java classes may either

More information

SCJ2013 Data Structure & Algorithms. Binary Search Tree. Nor Bahiah Hj Ahmad

SCJ2013 Data Structure & Algorithms. Binary Search Tree. Nor Bahiah Hj Ahmad SCJ2013 Data Structure & Algorithms Binary Search Tree Nor Bahiah Hj Ahmad Binary Search Tree A binary search tree has the following properties: For every node n in the tree Value of n is greater than

More information

Crit-bit Trees. Adam Langley (Version )

Crit-bit Trees. Adam Langley (Version ) CRITBIT CWEB OUTPUT 1 Crit-bit Trees Adam Langley (agl@imperialviolet.org) (Version 20080926) 1. Introduction This code is taken from Dan Bernstein s qhasm and implements a binary crit-bit (alsa known

More information

Python for Astronomers. Week 1- Basic Python

Python for Astronomers. Week 1- Basic Python Python for Astronomers Week 1- Basic Python UNIX UNIX is the operating system of Linux (and in fact Mac). It comprises primarily of a certain type of file-system which you can interact with via the terminal

More information

Lecture 34. Wednesday, April 6 CS 215 Fundamentals of Programming II - Lecture 34 1

Lecture 34. Wednesday, April 6 CS 215 Fundamentals of Programming II - Lecture 34 1 Lecture 34 Log into Linux. Copy files on csserver from /home/hwang/cs215/lecture33/*.* In order to compile these files, also need bintree.h from last class. Project 7 posted. Due next week Friday, but

More information

(12-1) OOP: Polymorphism in C++ D & D Chapter 12. Instructor - Andrew S. O Fallon CptS 122 (April 3, 2019) Washington State University

(12-1) OOP: Polymorphism in C++ D & D Chapter 12. Instructor - Andrew S. O Fallon CptS 122 (April 3, 2019) Washington State University (12-1) OOP: Polymorphism in C++ D & D Chapter 12 Instructor - Andrew S. O Fallon CptS 122 (April 3, 2019) Washington State University Key Concepts Polymorphism virtual functions Virtual function tables

More information

Data Abstraction. Hwansoo Han

Data Abstraction. Hwansoo Han Data Abstraction Hwansoo Han Data Abstraction Data abstraction s roots can be found in Simula67 An abstract data type (ADT) is defined In terms of the operations that it supports (i.e., that can be performed

More information

Chapter 1: Object-Oriented Programming Using C++

Chapter 1: Object-Oriented Programming Using C++ Chapter 1: Object-Oriented Programming Using C++ Objectives Looking ahead in this chapter, we ll consider: Abstract Data Types Encapsulation Inheritance Pointers Polymorphism Data Structures and Algorithms

More information

CE 221 Data Structures and Algorithms

CE 221 Data Structures and Algorithms CE 221 Data Structures and Algorithms Chapter 4: Trees (Binary) Text: Read Weiss, 4.1 4.2 Izmir University of Economics 1 Preliminaries - I (Recursive) Definition: A tree is a collection of nodes. The

More information

Trees. CSE 373 Data Structures

Trees. CSE 373 Data Structures Trees CSE 373 Data Structures Readings Reading Chapter 7 Trees 2 Why Do We Need Trees? Lists, Stacks, and Queues are linear relationships Information often contains hierarchical relationships File directories

More information