ASIA CCS'17 ~ Strict Virtual Call Integrity Checking for C++ Binaries

Total Page:16

File Type:pdf, Size:1020Kb

ASIA CCS'17 ~ Strict Virtual Call Integrity Checking for C++ Binaries Strict Virtual Call Integrity Checking for C++ Binaries Mohamed Elsabagh Dan Fleck Angelos Stavrou [email protected] dfl[email protected] [email protected] Department of Computer Science George Mason University Fairfax, VA 22030, USA ABSTRACT though modern systems are equipped with W⊕X and Data Modern operating systems are equipped with defenses that Execution Prevention (DEP), attackers can still achieve ar- render legacy code injection attacks inoperable. However, bitrary code execution by repurposing existing code from the attackers can bypass these defenses by crafting attacks that program memory, in what is known as code-reuse attacks. reuse existing code in a program's memory. One of the most This can range from reusing blocks of instructions, such common classes of attacks manipulates memory data used as Return Oriented Programming (ROP), to even reusing indirectly to execute code, such as function pointers. This is whole functions in a Function Reuse Attack (FRA). especially prevalent in C++ programs, since tables of func- The use of Control Flow Integrity (CFI) [1], which is a crit- tion pointers (vtables) are used by all major compilers to ical program security property, can assure the program does support polymorphism. In this paper, we propose VCI, a not execute unintended code. Unfortunately, constructing binary rewriting system that secures C++ binaries against a sound and complete CFI policy has proven to be a chal- vtable attacks. VCI works directly on stripped binary files. lenging task [9]. Enforcing CFI is especially hard due to It identifies and reconstructs various C++ semantics from indirect control flow transfer, such as indirect calls through the binary, and constructs a strict CFI policy by resolving function pointers. The problem becomes even harder if the and pairing virtual function calls (vcalls) with precise sets source code is not available. This makes binary-only solu- of target classes. The policy is enforced by instrumenting tions very desirable, since, in practice, the source code of checks into the binary at vcall sites. Experimental results many programs is not always available, and that includes on SPEC CPU2006 and Firefox show that VCI is signifi- many commercial products, 3rd party libraries, legacy soft- cantly more precise than state-of-the-art binary solutions. ware and firmware to name a few. Even if the source code is Testing against the ground truth from the source-based de- available, compiling in new protections is not always feasible fense GCC VTV, VCI achieved greater than 60% precision or desirable, for instance, due to the presence of legacy code in most cases, accounting for at least 48% to 99% additional and compiler dependencies. reduction in the attack surface compared to the state-of- Indirect calls are prevalent in OOP languages in order the-art binary defenses. VCI incurs a 7:79% average run- to enable polymorphism. Of particular interest to us is ++ time overhead which is comparable to the state-of-the-art. C , where all major compilers, including GCC, LLVM, and ++ In addition, we discuss how VCI defends against real-world MSVC, support C polymorphism via tables of function attacks, and how it impacts advanced vtable reuse attacks pointers. This is also the case for compilers of closely related # ++ such as COOP. languages, such as C and D. C supports class and func- tion polymorphs by allowing derived classes to redefine base functions that are declared virtual. Each object of a class Keywords that (re)defines virtual functions stores a pointer (vptr) to Virtual table attacks; C++; Control flow integrity; Type-call a read-only table of pointers to virtual function definitions pairing; Static binary analysis (called vtable for short). To invoke a virtual function, the compiler generates code that indirectly executes the corre- sponding function in the object's vtable (see Section 2). We 1. INTRODUCTION refer to such code sites in the binary as virtual call (vcall) Presently, memory subversion remains an unsolved secu- sites. rity threat. By manipulating control data, such as func- In an unprotected binary, an attacker with control over tion pointers and return addresses, attackers can hijack the an object's memory or vtable can call any function within control flow of programs and execute arbitrary code. Even the program whenever the program uses the object's vtable to make a vcall. This is typically achieved by exploiting a memory access bug that enables overwriting the in Permission to make digital or hard copies of all or part of this work for personal or vptr classroom use is granted without fee provided that copies are not made or distributed an object's memory, in what is known as a \vtable attack". for profit or commercial advantage and that copies bear this notice and the full cita- Perhaps the most common class of enabler bugs in this cat- tion on the first page. Copyrights for components of this work owned by others than egory is the infamous use-after-free [2]. Here, a pointer to a ACM must be honored. Abstracting with credit is permitted. To copy otherwise, or re- publish, to post on servers or to redistribute to lists, requires prior specific permission freed object is used in a later program statement (a dangling and/or a fee. Request permissions from [email protected]. pointer) to invoke one of the object's virtual functions. This ASIA CCS ’17, April 02-06, 2017, Abu Dhabi, United Arab Emirates dangling pointer can allow an attacker to execute arbitrary c 2017 ACM. ISBN 978-1-4503-4944-4/17/04. $15.00 code if she can control the contents of the object's freed DOI: http://dx.doi.org/10.1145/3052973.3052976 140 memory, e.g., using heap overflows or heap spraying [12]. its runtime overhead. We show that VCI can mitigate Such bugs are very prevalent in commodity desktop appli- real-world attacks, and incurs a comparable overhead cations, such as office suites and browsers, since they are to existing solutions. typically written in C++. Recent studies (e.g., [7, 22, 25]) The rest of the paper is organized as follows: Section 2 suggested use-after-free vulnerabilities account for at least provides an overview of relevant C++ primitives. In Sec- 69% of all vulnerabilities in browsers, about 50% of Win- tion 3 we define the threat model, discuss vtable attacks dows 7 exploits, and 21% of all vulnerabilities in all operat- and give an overview of our solution. Section 4 lays out the ing systems. details of VCI. We evaluate VCI in Section 5, and discuss In this paper, we present VCI, a static binary CFI system limitations and improvements in Section 6. We present re- that retrofits C++ binaries with defenses against vtable at- lated work in Section 7 and conclude in Section 8. In the tacks. VCI protects the binaries by enforcing a strict CFI Appendix, we provide additional technical details and dis- policy that limits the number of callable function from vcall cuss complementary policies. sites (see Section 3). VCI works on stripped binaries, with- out needing debug, symbol or type information. To deter- mine valid function targets we developed algorithms to re- 2. BACKGROUND construct several C++ semantics from binaries, namely: vta- Commodity applications, such as office suites and web bles, constructors, class layouts, class hierarchies, and vcalls browsers, are built with performance in mind. Given the (see Section 4). VCI exploits patterns in the assembly, and sophisticated functionalities they provide, it is standard to uses backward slicing and inter-procedural analysis to sym- use languages that provide sufficient levels of abstraction bolically trace the this pointer expressions of objects across with a minimal performance penalty. Therefore, low-level function boundaries. It builds a mapping between vcall sites object-oriented languages, such as C++, are typically the and their target class types. It then instruments the binary choice for their implementation. To enable polymorphism, by generating and injecting the integrity policy to enforce C++ uses virtual functions. A function is declared virtual the mapping at runtime. if its behavior (implementation) can be changed by derived We implemented a prototype of VCI in C++ on Linux, us- classes. The exact function body to be called is determined ing Dyninst [15] for binary parsing and rewriting. The pro- at runtime depending on the invoking object's class. totype consists of ∼3500 SLOC for the analysis in addition to a ∼500 SLOC dynamic library where the integrity pol- 2.1 Polymorphism and Virtual Tables icy procedures reside. Experimental results (see Section 5) All major C++ compilers, including GCC, Clang/LLVM, on the C++ SPEC CPU2006 benchmarks and Mozilla Fire- fox show that VCI significantly reduces the attack surface MSVC, Linux versions of HP and Intel compilers, use vta- compared to the state-of-the-art binary vtable defenses. For bles to dispatch virtual functions. A vtable is a reserved instance, in comparison with VTint [43] and vfGuard [30], read-only table in the binary that contains function point- VCI achieved at least 96% and 48% additional reduction ers to the definitions of virtual functions accessible through a polymorphic class. A polymorphic class is a class that in the number of allowable vcall targets, respectively. In 1 comparison to GCC VTV (source-based ground truth), VCI declares, defines or inherits virtual functions. Each virtual achieved the highest precision amongst other binary solu- function in a class has a corresponding offset in the class' tions, with 100% precision in some cases and greater than vtable which stores the address of the implementation body 60% precision for the majority of the test programs. Our of the function in the code section. Whenever an object of experiments show that VCI incurs a low runtime overhead some class type invokes a virtual function, the class' vtable (∼7:79%), and can defend against real-world exploits includ- is accessed, and the address at the corresponding function ing the recent COOP attacks [10, 34].
Recommended publications
  • Strict Protection for Virtual Function Calls in COTS C++ Binaries
    vfGuard: Strict Protection for Virtual Function Calls in COTS C++ Binaries Aravind Prakash Xunchao Hu Heng Yin Department of EECS Department of EECS Department of EECS Syracuse University Syracuse University Syracuse University [email protected] [email protected] [email protected] Abstract—Control-Flow Integrity (CFI) is an important se- these binary-only solutions are unfortunately coarse-grained curity property that needs to be enforced to prevent control- and permissive. flow hijacking attacks. Recent attacks have demonstrated that existing CFI protections for COTS binaries are too permissive, While coarse-grained CFI solutions have significantly re- and vulnerable to sophisticated code reusing attacks. Accounting duced the attack surface, recent efforts by Goktas¸¨ et al. [9] for control flow restrictions imposed at higher levels of semantics and Carlini [10] have demonstrated that coarse-grained CFI is key to increasing CFI precision. In this paper, we aim to provide solutions are too permissive, and can be bypassed by reusing more stringent protection for virtual function calls in COTS large gadgets whose starting addresses are allowed by these C++ binaries by recovering C++ level semantics. To achieve this solutions. The primary reason for such permissiveness is the goal, we recover C++ semantics, including VTables and virtual lack of higher level program semantics that introduce certain callsites. With the extracted C++ semantics, we construct a sound mandates on the control flow. For example, given a class CFI policy and further improve the policy precision by devising two filters, namely “Nested Call Filter” and “Calling Convention inheritance, target of a virtual function dispatch in C++ must Filter”.
    [Show full text]
  • Tricore Architecture Manual for a Detailed Discussion of Instruction Set Encoding and Semantics
    User’s Manual, v2.3, Feb. 2007 TriCore 32-bit Unified Processor Core Embedded Applications Binary Interface (EABI) Microcontrollers Edition 2007-02 Published by Infineon Technologies AG 81726 München, Germany © Infineon Technologies AG 2007. All Rights Reserved. Legal Disclaimer The information given in this document shall in no event be regarded as a guarantee of conditions or characteristics (“Beschaffenheitsgarantie”). With respect to any examples or hints given herein, any typical values stated herein and/or any information regarding the application of the device, Infineon Technologies hereby disclaims any and all warranties and liabilities of any kind, including without limitation warranties of non- infringement of intellectual property rights of any third party. Information For further information on technology, delivery terms and conditions and prices please contact your nearest Infineon Technologies Office (www.infineon.com). Warnings Due to technical requirements components may contain dangerous substances. For information on the types in question please contact your nearest Infineon Technologies Office. Infineon Technologies Components may only be used in life-support devices or systems with the express written approval of Infineon Technologies, if a failure of such components can reasonably be expected to cause the failure of that life-support device or system, or to affect the safety or effectiveness of that device or system. Life support devices or systems are intended to be implanted in the human body, or to support and/or maintain and sustain and/or protect human life. If they fail, it is reasonable to assume that the health of the user or other persons may be endangered. User’s Manual, v2.3, Feb.
    [Show full text]
  • IAR C/C++ Compiler Reference Guide for V850
    IAR Embedded Workbench® IAR C/C++ Compiler Reference Guide for the Renesas V850 Microcontroller Family CV850-9 COPYRIGHT NOTICE © 1998–2013 IAR Systems AB. No part of this document may be reproduced without the prior written consent of IAR Systems AB. The software described in this document is furnished under a license and may only be used or copied in accordance with the terms of such a license. DISCLAIMER The information in this document is subject to change without notice and does not represent a commitment on any part of IAR Systems. While the information contained herein is assumed to be accurate, IAR Systems assumes no responsibility for any errors or omissions. In no event shall IAR Systems, its employees, its contractors, or the authors of this document be liable for special, direct, indirect, or consequential damage, losses, costs, charges, claims, demands, claim for lost profits, fees, or expenses of any nature or kind. TRADEMARKS IAR Systems, IAR Embedded Workbench, C-SPY, visualSTATE, The Code to Success, IAR KickStart Kit, I-jet, I-scope, IAR and the logotype of IAR Systems are trademarks or registered trademarks owned by IAR Systems AB. Microsoft and Windows are registered trademarks of Microsoft Corporation. Renesas is a registered trademark of Renesas Electronics Corporation. V850 is a trademark of Renesas Electronics Corporation. Adobe and Acrobat Reader are registered trademarks of Adobe Systems Incorporated. All other product names are trademarks or registered trademarks of their respective owners. EDITION NOTICE Ninth edition: May 2013 Part number: CV850-9 This guide applies to version 4.x of IAR Embedded Workbench® for the Renesas V850 microcontroller family.
    [Show full text]
  • Lecture 21: Calling Conventions Menu Calling Convention Calling Convention X86 C Calling Convention
    CS216: Program and Data Representation University of Virginia Computer Science Spring 2006 David Evans Menu Lecture 21: Calling Conventions • x86 C Calling Convention • Java Byte Code Wizards http://www.cs.virginia.edu/cs216 UVa CS216 Spring 2006 - Lecture 21: Calling Conventions 2 Calling Convention Calling Convention • Rules for how the caller and the Caller Callee callee make subroutine calls • Where to put • Where to find • Caller needs to know: params params • What registers can I • What registers – How to pass parameters assume are same must I not bash – What registers might be bashed by • Where to find result • Where to put result called function • State of stack • State of stack – What is state of stack after return – Where to get result UVa CS216 Spring 2006 - Lecture 21: Calling Conventions 3 UVa CS216 Spring 2006 - Lecture 21: Calling Conventions 4 Calling Convention: x86 C Calling Convention Easiest for Caller Caller Callee Caller Callee • Where to put • Where to find • Params on stack in • Find params on stack params params reverse order in reverse order • What registers can I • What registers • Can assume EBX, • Must not bash EBX, assume are same must I not bash EDI and ESI are EDI or ESI – All of them – None of them same • Put result in EAX • Where to find result • Where to put result • Find result in EAX • Stack rules next • State of stack • State of stack • Stack rules next Need to save and Need to save and restore restore EBX, EDI (EAX), ECX, EDX and ESI UVa CS216 Spring 2006 - Lecture 21: Calling Conventions 5 UVa CS216
    [Show full text]
  • Specification of Compiler Abstraction
    Specification of Compiler Abstraction V2.2.1 R3.2 Rev 3 Document Title Specification of Compiler Abstraction Document Owner AUTOSAR Document Responsibility AUTOSAR Document Identification No 051 Document Classification Standard Document Version 2.2.1 Document Status Final Part of Release 3.2 Revision 3 Document Change History Date Version Changed by Change Description 28.02.2014 2.2.1 AUTOSAR Editorial changes Release Management 17.05.2012 2.2.0 AUTOSAR Added pointer class ‘REGSPACE’ (for Administration register access) 07.04.2011 2.1.0 AUTOSAR Addtition of the macros Administration FUNC_P2CONST(COMPILER061, COMPILER062) and FUNC_P2VAR(COMPILER063, COMPILER064) (see bug #43874) Rework of COMPILER058 to be compatible to the added macros 23.06.2008 2.0.1 AUTOSAR Legal disclaimer revised Administration 27.11.2007 2.0.0 AUTOSAR Keyword "_STATIC_" has been renamed Administration to "STATIC" Keyword "_INLINE_" has been renamed to "INLINE" Keyword "TYPEDEF" has been added as empty memory qualifier for use in type definitions Document meta information extended Small layout adaptations made 31.01.2007 1.1.0 AUTOSAR Add: COMPILER058 Administration Add: COMPILER057 Change: COMPILER040 Legal disclaimer revised Release Notes added “Advice for users” revised “Revision Information” added 1 of 44 Document ID 051: AUTOSAR_SWS_CompilerAbstraction - AUTOSAR confidential - Specification of Compiler Abstraction V2.2.1 R3.2 Rev 3 Document Change History Date Version Changed by Change Description 27.04.2006 1.0.0 AUTOSAR Initial Release Administration 2 of 44 Document ID 051: AUTOSAR_SWS_CompilerAbstraction - AUTOSAR confidential - Specification of Compiler Abstraction V2.2.1 R3.2 Rev 3 Disclaimer This specification and the material contained in it, as released by AUTOSAR is for the purpose of information only.
    [Show full text]
  • EECS 373 Design of Microprocessor-Based Systems
    Procedures Procedures are very important for writing reusable and maintainable code in assembly and high-level languages. How are they implemented? · Application Binary Interfaces · Calling Conventions · Recursive Calls · Examples Reference: PowerPC Embedded ABI General Concepts · Caller: The calling procedure Callee: The procedure called by the caller ¼ int mult(x, y) prod = mult (a, b) ¼ ¼ return (x * y) · Caller and callee must agree on: · How to pass parameters · How to return the return value(s), if any · How to maintain relevant information across calls · PowerPC architecture does not define ªagreementº. Instead, common policies are defined by convention. PowerPC Features The PowerPC ISA provides the following features to support procedure/function calls: · link register (p. 2-11) · bl: branch and link (p. 4-41) · blr: branch to link register (Table F-4) A Very Simple Calling Convention · Passing arguments · Use GPRs r3 to r10 in order · Use stack in main memory if more than 8 arguments · Passing return value · Leave result in r3 Example int func(int a, int b) { return (a + b); } main { ¼ func(5,6); ¼ } Another Example int func2(int a, int b) { return func(a , b); } main { ¼ func2(5,6); ¼ } The Stack · Information for each function invocation (e.g. link register) is saved on the call stack or simply stack. · Each function invocation has its own stack frame (a.k.a. activation record ). high address func2 stack frame func stack frame stack pointer low address Using the Stack main ¼ Describe the stack and LR contents ¼ · right before
    [Show full text]
  • “Option Summary” in Using the GNU Compiler Collection (GCC)
    Using the GNU Compiler Collection For gcc version 4.3.6 (GCC) Richard M. Stallman and the GCC Developer Community Published by: GNU Press Website: www.gnupress.org a division of the General: [email protected] Free Software Foundation Orders: [email protected] 51 Franklin Street, Fifth Floor Tel 617-542-5942 Boston, MA 02110-1301 USA Fax 617-542-2652 Last printed October 2003 for GCC 3.3.1. Printed copies are available for $45 each. Copyright c 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being “GNU General Public License” and “Funding Free Software”, the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the section entitled “GNU Free Documentation License”. (a) The FSF’s Front-Cover Text is: A GNU Manual (b) The FSF’s Back-Cover Text is: You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise funds for GNU development. i Short Contents Introduction ............................................. 1 1 Programming Languages Supported by GCC ............... 3 2 Language Standards Supported by GCC .................. 5 3 GCC Command Options ............................... 9 4 C Implementation-defined behavior ..................... 237 5 Extensions to the C Language Family ..................
    [Show full text]
  • System Calls
    System Calls 1 Learning Outcomes • A high-level understanding of System Calls – Mostly from the user’s perspective • From textbook (section 1.6) • Exposure architectural details of the MIPS R3000 – Detailed understanding of the of exception handling mechanism • From “Hardware Guide” on class web site • Understanding of the existence of compiler function calling conventions – Including details of the MIPS ‘C’ compiler calling convention • Understanding of how the application kernel boundary is crossed with system calls in general • Including an appreciation of the relationship between a case study (OS/161 system call handling) and the general case. 2 Operating System System Calls Kernel Level Operating System Requests Applications (System Calls) User Level Applications Applications 3 System Calls • Can be viewed as special function calls – Provides for a controlled entry into the kernel – While in kernel, they perform a privileged operation – Returns to original caller with the result • The system call interface represents the abstract machine provided by the operating system. 4 A Brief Overview of Classes System Calls • From the user’s perspective – Process Management – File I/O – Directories management – Some other selected Calls – There are many more • On Linux, see man syscalls for a list 5 Some System Calls For Process Management 6 Some System Calls For File Management 7 Some System Calls For Directory Management 8 Some System Calls For Miscellaneous Tasks 9 System Calls • A stripped down shell: while (TRUE) { /* repeat forever */
    [Show full text]
  • System V Application Binary Interface AMD64 Architecture Processor Supplement Draft Version 0.99.4
    System V Application Binary Interface AMD64 Architecture Processor Supplement Draft Version 0.99.4 Edited by Michael Matz1, Jan Hubickaˇ 2, Andreas Jaeger3, Mark Mitchell4 January 13, 2010 [email protected] [email protected] [email protected] [email protected] AMD64 ABI Draft 0.99.4 – January 13, 2010 – 15:33 Contents 1 Introduction 8 2 Software Installation 9 3 Low Level System Information 10 3.1 Machine Interface . 10 3.1.1 Processor Architecture . 10 3.1.2 Data Representation . 10 3.2 Function Calling Sequence . 14 3.2.1 Registers and the Stack Frame . 14 3.2.2 The Stack Frame . 15 3.2.3 Parameter Passing . 16 3.3 Operating System Interface . 23 3.3.1 Exception Interface . 23 3.3.2 Virtual Address Space . 23 3.3.3 Page Size . 23 3.3.4 Virtual Address Assignments . 23 3.4 Process Initialization . 26 3.4.1 Initial Stack and Register State . 26 3.4.2 Thread State . 29 3.4.3 Auxiliary Vector . 29 3.5 Coding Examples . 31 3.5.1 Architectural Constraints . 32 3.5.2 Conventions . 34 3.5.3 Position-Independent Function Prologue . 35 3.5.4 Data Objects . 36 3.5.5 Function Calls . 44 3.5.6 Branching . 46 1 AMD64 ABI Draft 0.99.4 – January 13, 2010 – 15:33 3.5.7 Variable Argument Lists . 49 3.6 DWARF Definition . 54 3.6.1 DWARF Release Number . 55 3.6.2 DWARF Register Number Mapping . 55 3.7 Stack Unwind Algorithm . 55 4 Object Files 59 4.1 ELF Header .
    [Show full text]
  • Introduction to Intel X86-64 Assembly, Architecture, Applications, & Alliteration
    Introduction to Intel x86-64 Assembly, Architecture, Applications, & Alliteration Xeno Kovah – 2014-2015 [email protected] All materials is licensed under a Creative Commons “Share Alike” license. • http://creativecommons.org/licenses/by-sa/3.0/ Attribution condition: You must indicate that derivative work "Is derived from Xeno Kovah's 'Intro x86-64’ class, available at http://OpenSecurityTraining.info/IntroX86-64.html” Attribution condition: You must indicate that derivative work "Is derived from Xeno Kovah's ‘Intro x86-64’ class, available at http://OpenSecurityTraining.info/IntroX86-64.html" The Stack • The stack is a conceptual area of main memory (RAM) which is designated by the OS when a program is started. – Different OS start it at different addresses by their own convention • A stack is a Last-In-First-Out (LIFO/FILO) data structure where data is "pushed" on to the top of the stack and "popped" off the top. • By convention the stack grows toward lower memory addresses. Adding something to the stack means the top of the stack is now at a lower memory address. Book page107 The Stack 2 • As already mentioned, RSP points to the top of the stack, the lowest address which is being used – While data will exist at addresses beyond the top of the stack, it is considered undefined • The stack keeps track of which functions were called before the current one, it holds local variables and is often used to pass arguments to the next function to be called. • A firm understanding of what is happening on the stack is *essential* to understanding a program’s operation.
    [Show full text]
  • Calling Conventions for Different C++ Compilers and Operating Systems
    5. Calling conventions for different C++ compilers and operating systems By Agner Fog. Copenhagen University College of Engineering. Copyright © 2004 - 2012. Last updated 2012-02-29. Contents 1 Introduction ....................................................................................................................... 3 2 The need for standardization............................................................................................. 5 3 Data representation...........................................................................................................6 4 Data alignment .................................................................................................................. 8 5 Stack alignment................................................................................................................. 9 6 Register usage ................................................................................................................10 6.1 Can floating point registers be used in 64-bit Windows? ........................................... 13 6.2 YMM vector registers................................................................................................ 14 6.3 Register usage in kernel code................................................................................... 14 7 Function calling conventions ........................................................................................... 16 7.1 Passing and returning objects..................................................................................
    [Show full text]
  • RISC-V Instructions and How to Implement Functions
    CS 61C: Great Ideas in Computer Architecture More RISC-V Instructions and How to Implement Functions Instructors: Nick Weaver & John Wawrzynek http://inst.eecs.Berkeley.edu/~cs61c/Fa17 Spring 2018 - Lecture #6 1 Outline • RISC-V ISA and C-to-RISC-V Review • Program Execution Overview • Function Call • Function Call Example • And in Conclusion … 2 Outline • RISC-V ISA and C-to-RISC-V Review • Program Execution Overview • Function Call • Function Call Example • And in Conclusion … 3 Levels oF Representation/Interpretation High Level Language temp = v[k]; Program (e.g., C) v[k] = v[k+1]; Compiler v[k+1] = temp; lw $t0, 0($2) Anything can be represented lw $t1, 4($2) Assembly Language sw $t1, 0($2) as a number, sw $t0, 4($2) Program (e.g., RISC-V) i.e., data or instructions Assembler 0000 1001 1100 0110 1010 1111 0101 1000 Machine Language 1010 1111 0101 1000 0000 1001 1100 0110 Program (RISC-V) 1100 0110 1010 1111 0101 1000 0000 1001 Machine 0101 1000 0000 1001 1100 0110 1010 1111 Interpretation Hardware Architecture Description (e.g., block diagrams) Architecture Implementation Logic Circuit Description (Circuit Schematic Diagrams) 4 Review From Last Lecture … • Computer’s native operations called instructions. The instruction set deFines all the valid instructions. • RISC-V is example RISC instruction set - used in CS61C – Lecture/problems use 32-bit RV32 ISA, book uses 64-bit RV64 ISA • Rigid Format: one operation, two source operands, one destination – add,sub – lw,sw,lb,sb to move data to/From registers From/to memory • Simple mappings
    [Show full text]