Devirtualize Documentation
|
|
- Oliver Byron Snow
- 5 years ago
- Views:
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
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 informationPolymorphism. 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 informationTrees, 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 informationChapter 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 informationTraversing 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 informationTraversing Trees with Iterators
Steven J. Zeil June 25, 2013 Contents 1 Iterating over Trees 3 1.1 begin()................................................................ 5 1.2 operator++..............................................................
More informationWhy 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 informationChapter 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 informationUses 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 informationDiscussion 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 informationTrees : 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 informationNeed 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 informationLec 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 informationAn 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 informationPolymorphism. 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 informationLargest 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 informationSmartDec: 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 informationMicroPython 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 informationBinary 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 informationBinary 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 informationCSE 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 informationC++ 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 informationFigure 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 informationC++ 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 informationBBM 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 informationInheritance, 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 informationOperations 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 informationCSE 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 informationFormal 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
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 informationIntroduction 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 informationQUIZ. 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 informationC++ 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 informationFuzzing 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 informationC++ 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 informationRelationships 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 informationCrit-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 informationData 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 informationBest-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 informationIncreases 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 informationRelationships 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 informationTrees. 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 informationCSI33 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 informationECE 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 informationCompuer 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 informationRelationships 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 informationCSE351 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 informationBST 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 informationOverview. 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 informationXC 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 informationTrees, 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 informationCOSC 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 informationPractice 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 informationLecture 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 informationShort 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 informationBinary 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 information3.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 informationCSC/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 informationOutline. 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 informationCSE100. 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 informationC++ 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 informationCS201 - 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 informationBinary 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 informationCSE 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 informationMultiple 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 informationITI 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 informationFrontier 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 informationLecture 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 informationpython-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 informationTopic 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 informationTrees. 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 informationTrees 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 informationSoftware 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 informationDEVIRTUALIZATION 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 informationSupporting 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 informationTrees. (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 informationTREES. 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 informationInheritance 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 informationCSE 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 informationTREES. 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 informationProgramming 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 informationMidterm 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 informationA 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 informationObject-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 informationOverview. 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 informationITI 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 informationUnit 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 informationCS 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 informationObject 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 informationCISC 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 informationJava 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 informationSCJ2013 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 informationCrit-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 informationPython 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 informationLecture 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 Key Concepts Polymorphism virtual functions Virtual function tables
More informationData 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 informationChapter 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 informationCE 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 informationTrees. 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