Program Testing via Symbolic Execution

Size: px
Start display at page:

Download "Program Testing via Symbolic Execution"

Transcription

1 Program Testing via Symbolic Execution Daniel Dunbar Program Testing via Symbolic Execution p. 1/26

2 Introduction Motivation Manual testing is difficult Program Testing via Symbolic Execution p. 2/26

3 Introduction Motivation Manual testing is difficult Requires knowledge of code Program Testing via Symbolic Execution p. 2/26

4 Introduction Motivation Manual testing is difficult Requires knowledge of code Requires constant maintenance Program Testing via Symbolic Execution p. 2/26

5 Introduction Motivation Manual testing is difficult Requires knowledge of code Requires constant maintenance Random testing is ineffective Hard to deeply probe programs Program Testing via Symbolic Execution p. 2/26

6 Introduction Motivation Manual testing is difficult Requires knowledge of code Requires constant maintenance Random testing is ineffective Hard to deeply probe programs Symbolic execution? Automatic Can check for error conditions Can reach deep code paths Program Testing via Symbolic Execution p. 2/26

7 Overview KLEE: A Symbolic Virtual Machine Basic Architecture Constraint Solver Optimizations Program Testing via Symbolic Execution p. 3/26

8 Overview KLEE: A Symbolic Virtual Machine Basic Architecture Constraint Solver Optimizations A Modeling Environment for UNIX Program Testing via Symbolic Execution p. 3/26

9 Overview KLEE: A Symbolic Virtual Machine Basic Architecture Constraint Solver Optimizations A Modeling Environment for UNIX Case Study: Coreutils Over 80% coverage on majority of tools Overall coverage better than developer tests Program Testing via Symbolic Execution p. 3/26

10 What is Symbolic Execution? Program Testing via Symbolic Execution p. 4/26

11 What is Symbolic Execution? Symbolic Replace concrete program values with symbolic variables Program Testing via Symbolic Execution p. 4/26

12 What is Symbolic Execution? Symbolic Replace concrete program values with symbolic variables Execution Program instructions become operations on expressions Program Testing via Symbolic Execution p. 4/26

13 What is Symbolic Execution? Symbolic Replace concrete program values with symbolic variables Execution Program instructions become operations on expressions Also: Record branch choices in a path condition Program Testing via Symbolic Execution p. 4/26

14 What is Symbolic Execution? void escape(char *s, char *out) { while (*s!= 0) { char c = *s++; if (c == \\ ) c = *s++; *out++ = c; } } Program Testing via Symbolic Execution p. 5/26

15 What is Symbolic Execution? void escape(char *s, char *out) { while (*s!= 0) { char c = *s++; if (c == \\ ) c = *s++; *out++ = c; } } Input: A 0 s: c:? Program Testing via Symbolic Execution p. 5/26

16 What is Symbolic Execution? void escape(char *s, char *out) { while (*s!= 0) { char c = *s++; if (c == \\ ) c = *s++; *out++ = c; } } Input: s 0 0 s: c: path:? Program Testing via Symbolic Execution p. 5/26

17 What is Symbolic Execution? void escape(char *s, char *out) { while (*s!= 0) { char c = *s++; if (c == \\ ) c = *s++; *out++ = c; } } Input: s 0 0 s: c: path:? Program Testing via Symbolic Execution p. 5/26

18 What is Symbolic Execution? void escape(char *s, char *out) { while (*s!= 0) { char c = *s++; if (c == \\ ) c = *s++; *out++ = c; } } Input: s 0 0 s: c: path:? s 0 0 Input: s 0 0 s: c: path:? s 0 = 0 Program Testing via Symbolic Execution p. 5/26

19 What is Symbolic Execution? void escape(char *s, char *out) { while (*s!= 0) { char c = *s++; if (c == \\ ) c = *s++; *out++ = c; } } Input: s 0 0 s: c: s 0 path: s 0 0 Program Testing via Symbolic Execution p. 5/26

20 What is Symbolic Execution? void escape(char *s, char *out) { while (*s!= 0) { char c = *s++; if (c == \\ ) c = *s++; *out++ = c; } } Input: s 0 0 s: c: s 0 path: s 0 = \ Input: s 0 0 s: c: s 0 path: s 0 0 s 0 \ Program Testing via Symbolic Execution p. 5/26

21 What is Symbolic Execution? void escape(char *s, char *out) { while (*s!= 0) { char c = *s++; if (c == \\ ) c = *s++; *out++ = c; } } Input: s 0 0 s: c: path: 0 s 0 = \ Program Testing via Symbolic Execution p. 5/26

22 What is Symbolic Execution? void escape(char *s, char *out) { while (*s!= 0) { char c = *s++; if (c == \\ ) c = *s++; *out++ = c; } } Input: s 0 0 s: c: path: 0 s 0 = \ Program Testing via Symbolic Execution p. 5/26

23 The KLEE Architecture Based on experience with EXE system Goals Simplicity Scalability Speed Program Testing via Symbolic Execution p. 6/26

24 The KLEE Architecture: Simplicity Interpreter for LLVM Assembly Language Precise semantics Multiple language support Mature binary tools Program Testing via Symbolic Execution p. 7/26

25 The KLEE Architecture: Simplicity Interpreter for LLVM Assembly Language Precise semantics Multiple language support Mature binary tools Easy to understand Simple interpreter loop Explicit process representation Modular search & constraint solving Program Testing via Symbolic Execution p. 7/26

26 The KLEE Architecture: Scalability Fine-grained heap memory Object level copy-on-write Program Testing via Symbolic Execution p. 8/26

27 The KLEE Architecture: Scalability Fine-grained heap memory Object level copy-on-write Careful data structure selection Persistent heap, expressions, path data Compact expression representation Program Testing via Symbolic Execution p. 8/26

28 The KLEE Architecture: Scalability Fine-grained heap memory Object level copy-on-write Careful data structure selection Persistent heap, expressions, path data Compact expression representation Handle over 100k processes for small programs Program Testing via Symbolic Execution p. 8/26

29 The KLEE Architecture: Speed Constraint solving dominates run-time Program Testing via Symbolic Execution p. 9/26

30 The KLEE Architecture: Speed Constraint solving dominates run-time Keep constraints simple Canonicalize simple forms Cache concrete values and indices Dynamically rewrite path constraints Program Testing via Symbolic Execution p. 9/26

31 The KLEE Architecture: Speed Constraint solving dominates run-time Keep constraints simple Canonicalize simple forms Cache concrete values and indices Dynamically rewrite path constraints Optimize constraint solving Program Testing via Symbolic Execution p. 9/26

32 Solver Optimization Take advantage of the nature of symbolic execution Program Testing via Symbolic Execution p. 10/26

33 Solver Optimization Take advantage of the nature of symbolic execution Program decomposition Queries deal with distinct input variables Program Testing via Symbolic Execution p. 10/26

34 Solver Optimization Take advantage of the nature of symbolic execution Program decomposition Queries deal with distinct input variables Considerable redundancy Processes accrue constraints Static set of branches Program Testing via Symbolic Execution p. 10/26

35 Independent Constraint Opt. Path constraints may refer to many variables Path: s 0 = A s 1 = 0 y 0 < 100 Program Testing via Symbolic Execution p. 11/26

36 Independent Constraint Opt. Path constraints may refer to many variables Path: s 0 = A s 1 = 0 y 0 < 100 Individual expressions only refer to a few Branch condition: y = 10 Program Testing via Symbolic Execution p. 11/26

37 Independent Constraint Opt. Path constraints may refer to many variables Path: s 0 = A s 1 = 0 y 0 < 100 Individual expressions only refer to a few Branch condition: y = 10 Independent constraint optimization: Group constraints into disjoint subsets based on referenced variables Only pass dependent constraints to solver Query: y < 100 y = 10 Program Testing via Symbolic Execution p. 11/26

38 Counterexample Cache Take advantage of free counterexamples Program Testing via Symbolic Execution p. 12/26

39 Counterexample Cache Take advantage of free counterexamples Cache C {A, }, where C is a set of constraints and A a satisfying assignment Program Testing via Symbolic Execution p. 12/26

40 Counterexample Cache Take advantage of free counterexamples Cache C {A, }, where C is a set of constraints and A a satisfying assignment When performing a query with constraints C: Program Testing via Symbolic Execution p. 12/26

41 Counterexample Cache Take advantage of free counterexamples Cache C {A, }, where C is a set of constraints and A a satisfying assignment When performing a query with constraints C: 1. If (C, x) in cache, return x Program Testing via Symbolic Execution p. 12/26

42 Counterexample Cache Take advantage of free counterexamples Cache C {A, }, where C is a set of constraints and A a satisfying assignment When performing a query with constraints C: 1. If (C, x) in cache, return x 2. If (C, ), C C in cache, return Program Testing via Symbolic Execution p. 12/26

43 Counterexample Cache Take advantage of free counterexamples Cache C {A, }, where C is a set of constraints and A a satisfying assignment When performing a query with constraints C: 1. If (C, x) in cache, return x 2. If (C, ), C C in cache, return 3. If (C, A), C C in cache, return A Program Testing via Symbolic Execution p. 12/26

44 Counterexample Cache Take advantage of free counterexamples Cache C {A, }, where C is a set of constraints and A a satisfying assignment When performing a query with constraints C: 1. If (C, x) in cache, return x 2. If (C, ), C C in cache, return 3. If (C, A), C C in cache, return A 4. Otherwise, for each (C, A), C C in cache, speculatively evaluate C using A Program Testing via Symbolic Execution p. 12/26

45 Counterexample Cache Example void foo(int x) { if (x < 100)... if (x!= 50)... } Program Testing via Symbolic Execution p. 13/26

46 Counterexample Cache Example void foo(int x) { if (x < 100)... if (x!= 50)... } Cache: {} Program Testing via Symbolic Execution p. 13/26

47 Counterexample Cache Example void foo(int x) { if (x < 100)... if (x!= 50)... } Cache: {} Query: x < 100, Cache: {(x < 100, {x : 0})} Program Testing via Symbolic Execution p. 13/26

48 Counterexample Cache Example void foo(int x) { if (x < 100)... if (x!= 50)... } Cache: {} Query: x < 100, Cache: {(x < 100, {x : 0})} Query: x < 100 x 50 Program Testing via Symbolic Execution p. 13/26

49 Counterexample Cache Example void foo(int x) { if (x < 100)... if (x!= 50)... } Cache: {} Query: x < 100, Cache: {(x < 100, {x : 0})} Query: x < 100 x 50 Evaluate with {x : 0} 0 < Found assignment Program Testing via Symbolic Execution p. 13/26

50 Optimization Results Average Time (s) Base Independence Cex Cache All Normalized Num. Instructions Program Testing via Symbolic Execution p. 14/26

51 Environment Modeling Testing real applications requires providing a realistic environment system libraries operating system Program Testing via Symbolic Execution p. 15/26

52 Environment Modeling Testing real applications requires providing a realistic environment system libraries operating system Our approach: Compile and execute using µlibc Implement UNIX systems calls in separate modeling library Program Testing via Symbolic Execution p. 15/26

53 Environment Modeling (2) Idea: Overlay symbolic environment onto operating system Program sees virtual symbolic resources and actual OS resources Program Testing via Symbolic Execution p. 16/26

54 Environment Modeling (2) Idea: Overlay symbolic environment onto operating system Program sees virtual symbolic resources and actual OS resources Implemented by routing system calls through model routines Symbolic resources are handled in model Actual resources are forwarded to OS Program Testing via Symbolic Execution p. 16/26

55 Environment Modeling (3) Currently model supports symbolic files and program arguments Program Testing via Symbolic Execution p. 17/26

56 Environment Modeling (3) Currently model supports symbolic files and program arguments Supports open(), close(), read(), write(), lseek(), stat(), fstat() as well as simple stubs for several more Program Testing via Symbolic Execution p. 17/26

57 Environment Modeling (3) Currently model supports symbolic files and program arguments Supports open(), close(), read(), write(), lseek(), stat(), fstat() as well as simple stubs for several more Implementation is about 800 lines of C code Program Testing via Symbolic Execution p. 17/26

58 Testing Process Test generation: The application is linked with µclibc and the model and run with KLEE Program Testing via Symbolic Execution p. 18/26

59 Testing Process Test generation: The application is linked with µclibc and the model and run with KLEE Additional arguments specify what parts of environment to make symbolic Program Testing via Symbolic Execution p. 18/26

60 Testing Process Test generation: The application is linked with µclibc and the model and run with KLEE Additional arguments specify what parts of environment to make symbolic KLEE generates test cases for any errors and for coverage Program Testing via Symbolic Execution p. 18/26

61 Testing Process (2) Test verification: Programs are linked with gcc using µlibc and stripped down model Program Testing via Symbolic Execution p. 19/26

62 Testing Process (2) Test verification: Programs are linked with gcc using µlibc and stripped down model Tests are replayed natively Program Testing via Symbolic Execution p. 19/26

63 Testing Process (2) Test verification: Programs are linked with gcc using µlibc and stripped down model Tests are replayed natively Protects against modeling and system errors Program Testing via Symbolic Execution p. 19/26

64 Coreutils Background GNU implementation of standard UNIX utilities Program Testing via Symbolic Execution p. 20/26

65 Coreutils Background GNU implementation of standard UNIX utilities Core of most Linux installations Program Testing via Symbolic Execution p. 20/26

66 Coreutils Background GNU implementation of standard UNIX utilities Core of most Linux installations Encompasses 90 applications of varying size and focus File system: ls, dd, chmod Numeric: factor, seq System: printenv, hostname Text Processing: sort, head, od Program Testing via Symbolic Execution p. 20/26

67 Coreutils Case Study All 90 applications were tested on latest public release Program Testing via Symbolic Execution p. 21/26

68 Coreutils Case Study All 90 applications were tested on latest public release Focused on tool front-ends Program Testing via Symbolic Execution p. 21/26

69 Coreutils Case Study All 90 applications were tested on latest public release Focused on tool front-ends Covers 20k combined executable lines of code Program Testing via Symbolic Execution p. 21/26

70 Coreutils Case Study All 90 applications were tested on latest public release Focused on tool front-ends Covers 20k combined executable lines of code Mostly automatic One source code modification required Most programs tested using a generic configuration Program Testing via Symbolic Execution p. 21/26

71 Results: Bugs Six bugs found One fixed in developer repository Three resulted in segmentation fault Two allowed arbitrary heap smashing ptx -F\\ abcdefghijklmnopqrstuvwxyz paste -d\\ abcdefghijklmnopqrstuvwxyz seq -f %0 1 mkdir -Z a b mkfifo -Z a b mknod -Z a b p Program Testing via Symbolic Execution p. 22/26

72 Results: Coverage Overall coverage: 70.6% Over 80% on 61/ % (37) 80% (21) 80% (14) 71% (8) 77% (3) 82% (1) % (1) 56% (1) 15 47% (4) % % 50-60% 60-70% 70-80% 80-90% % 100% Executable Lines of Code Program Testing via Symbolic Execution p. 23/26

73 Results: Vs. Manual Developers tests overall coverage: 67.4%. Generated tests outperform on majority of tools Generated Tests Developer Tests Shared Program Testing via Symbolic Execution p. 24/26

74 Conclusion Symbolic execution can provide an effective testing tool Program Testing via Symbolic Execution p. 25/26

75 Conclusion Symbolic execution can provide an effective testing tool Can scale to real applications Careful attention to scalability Take advantage of specialized domain to optimize constraint solving Program Testing via Symbolic Execution p. 25/26

76 Conclusion Symbolic execution can provide an effective testing tool Can scale to real applications Careful attention to scalability Take advantage of specialized domain to optimize constraint solving Requires only modest amount of effort to construct an adequate model Program Testing via Symbolic Execution p. 25/26

77 Conclusion Symbolic execution can provide an effective testing tool Can scale to real applications Careful attention to scalability Take advantage of specialized domain to optimize constraint solving Requires only modest amount of effort to construct an adequate model Can beat manual testing out-of-the-box Program Testing via Symbolic Execution p. 25/26

78 Questions? Program Testing via Symbolic Execution p. 26/26

Microsoft SAGE and LLVM KLEE. Julian Cohen Manual and Automatic Program Analysis

Microsoft SAGE and LLVM KLEE. Julian Cohen Manual and Automatic Program Analysis Microsoft SAGE and LLVM KLEE Julian Cohen HockeyInJune@isis.poly.edu Manual and Automatic Program Analysis KLEE KLEE [OSDI 2008, Best Paper Award] Based on symbolic execution and constraint solving techniques

More information

KLEE: Effective Testing of Systems Programs Cristian Cadar

KLEE: Effective Testing of Systems Programs Cristian Cadar KLEE: Effective Testing of Systems Programs Cristian Cadar Joint work with Daniel Dunbar and Dawson Engler April 16th, 2009 Writing Systems Code Is Hard Code complexity Tricky control flow Complex dependencies

More information

KLEE: Unassisted and Automatic Generation of High-Coverage Tests for Complex Systems Programs

KLEE: Unassisted and Automatic Generation of High-Coverage Tests for Complex Systems Programs KLEE: Unassisted and Automatic Generation of High-Coverage Tests for Complex Systems Programs Cristian Cadar, Daniel Dunbar, Dawson Engler Stanford University Abstract We present a new symbolic execution

More information

Advanced Systems Security: Symbolic Execution

Advanced Systems Security: Symbolic Execution Systems and Internet Infrastructure Security Network and Security Research Center Department of Computer Science and Engineering Pennsylvania State University, University Park PA Advanced Systems Security:

More information

Constraint Solving Challenges in Dynamic Symbolic Execution. Cristian Cadar. Department of Computing Imperial College London

Constraint Solving Challenges in Dynamic Symbolic Execution. Cristian Cadar. Department of Computing Imperial College London Constraint Solving Challenges in Dynamic Symbolic Execution Cristian Cadar Department of Computing Imperial College London Joint work with Dawson Engler, Daniel Dunbar Peter Collingbourne, Paul Kelly,

More information

KLEE: Unassisted and Automatic Generation of High-Coverage Tests for Complex Systems Programs

KLEE: Unassisted and Automatic Generation of High-Coverage Tests for Complex Systems Programs KLEE: Unassisted and Automatic Generation of High-Coverage Tests for Complex Systems Programs Cristian Cadar, Daniel Dunbar, Dawson Engler Stanford University Abstract We present a new symbolic execution

More information

Blanket Execution: Dynamic Similarity Testing for Program Binaries and Components

Blanket Execution: Dynamic Similarity Testing for Program Binaries and Components Blanket Execution: Dynamic Similarity Testing for Program Binaries and Components Manuel Egele, Maverick Woo, Peter Chapman, and David Brumley Carnegie Mellon University 1 Picture Yourself as an Analyst

More information

Symbolic Execution in Difficult Environments

Symbolic Execution in Difficult Environments 15-745 Optimizing Compilers Project Final Report Symbolic Execution in Difficult Environments David Renshaw renshaw@cmu.edu Soonho Kong soonhok@cs.cmu.edu April 28, 2011 1 Introduction 1.1 Problem / Opportunity

More information

Symbolic and Concolic Execution of Programs

Symbolic and Concolic Execution of Programs Symbolic and Concolic Execution of Programs Information Security, CS 526 Omar Chowdhury 10/7/2015 Information Security, CS 526 1 Reading for this lecture Symbolic execution and program testing - James

More information

Automated Software Analysis Techniques For High Reliability: A Concolic Testing Approach. Moonzoo Kim

Automated Software Analysis Techniques For High Reliability: A Concolic Testing Approach. Moonzoo Kim Automated Software Analysis Techniques For High Reliability: A Concolic Testing Approach Moonzoo Kim Contents Automated Software Analysis Techniques Background Concolic testing process Example of concolic

More information

Software Testing CS 408. Lecture 6: Dynamic Symbolic Execution and Concolic Testing 1/30/18

Software Testing CS 408. Lecture 6: Dynamic Symbolic Execution and Concolic Testing 1/30/18 Software Testing CS 408 Lecture 6: Dynamic Symbolic Execution and Concolic Testing 1/30/18 Relevant Papers CUTE: A Concolic Unit Testing Engine for C Koushik Sen, Darko Marinov, Gul Agha Department of

More information

Qemu code fault automatic discovery with symbolic search. Paul Marinescu, Cristian Cadar, Chunjie Zhu, Philippe Gabriel

Qemu code fault automatic discovery with symbolic search. Paul Marinescu, Cristian Cadar, Chunjie Zhu, Philippe Gabriel Qemu code fault automatic discovery with symbolic search Paul Marinescu, Cristian Cadar, Chunjie Zhu, Philippe Gabriel Goals of this presentation Introduction of KLEE (symbolic execution tool) Qemu fault/patch

More information

How is Dynamic Symbolic Execution Different from Manual Testing? An Experience Report on KLEE

How is Dynamic Symbolic Execution Different from Manual Testing? An Experience Report on KLEE How is Dynamic Symbolic Execution Different from Manual Testing? An Experience Report on KLEE Xiaoyin Wang, Lingming Zhang, Philip Tanofsky University of Texas at San Antonio University of Texas at Dallas

More information

CMSC 430 Introduction to Compilers. Fall Symbolic Execution

CMSC 430 Introduction to Compilers. Fall Symbolic Execution CMSC 430 Introduction to Compilers Fall 2015 Symbolic Execution Introduction Static analysis is great Lots of interesting ideas and tools Commercial companies sell, use static analysis It all looks good

More information

Baggy bounds with LLVM

Baggy bounds with LLVM Baggy bounds with LLVM Anton Anastasov Chirantan Ekbote Travis Hance 6.858 Project Final Report 1 Introduction Buffer overflows are a well-known security problem; a simple buffer-overflow bug can often

More information

Symbolic Execution. Wei Le April

Symbolic Execution. Wei Le April Symbolic Execution Wei Le 2016 April Agenda What is symbolic execution? Applications History Interal Design: The three challenges Path explosion Modeling statements and environments Constraint solving

More information

Honours/Master/PhD Thesis Projects Supervised by Dr. Yulei Sui

Honours/Master/PhD Thesis Projects Supervised by Dr. Yulei Sui Honours/Master/PhD Thesis Projects Supervised by Dr. Yulei Sui Projects 1 Information flow analysis for mobile applications 2 2 Machine-learning-guide typestate analysis for UAF vulnerabilities 3 3 Preventing

More information

This document provides an overview of the COPRTHR-2 Software. available in the following supporting documentation:

This document provides an overview of the COPRTHR-2 Software. available in the following supporting documentation: COPRTHR-2 Overview This document provides an overview of the COPRTHR-2 Software. available in the following supporting documentation: Additional information is COPRTHR-2: Development Tools provides information

More information

Overview AEG Conclusion CS 6V Automatic Exploit Generation (AEG) Matthew Stephen. Department of Computer Science University of Texas at Dallas

Overview AEG Conclusion CS 6V Automatic Exploit Generation (AEG) Matthew Stephen. Department of Computer Science University of Texas at Dallas CS 6V81.005 Automatic Exploit Generation (AEG) Matthew Stephen Department of Computer Science University of Texas at Dallas February 20 th, 2012 Outline 1 Overview Introduction Considerations 2 AEG Challenges

More information

Access Control Lists. Don Porter CSE 506

Access Control Lists. Don Porter CSE 506 Access Control Lists Don Porter CSE 506 Background (1) ò If everything in Unix is a file ò Everything in Windows is an object ò Why not files? ò Not all OS abstractions make sense as a file ò Examples:

More information

Lecture 03 Bits, Bytes and Data Types

Lecture 03 Bits, Bytes and Data Types Lecture 03 Bits, Bytes and Data Types Computer Languages A computer language is a language that is used to communicate with a machine. Like all languages, computer languages have syntax (form) and semantics

More information

Testing, code coverage and static analysis. COSC345 Software Engineering

Testing, code coverage and static analysis. COSC345 Software Engineering Testing, code coverage and static analysis COSC345 Software Engineering Outline Various testing processes ad hoc / formal / automatic Unit tests and test driven development Code coverage metrics Integration

More information

n HW7 due in about ten days n HW8 will be optional n No CLASS or office hours on Tuesday n I will catch up on grading next week!

n HW7 due in about ten days n HW8 will be optional n No CLASS or office hours on Tuesday n I will catch up on grading next week! Announcements SMT Solvers, Symbolic Execution n HW7 due in about ten days n HW8 will be optional n No CLASS or office hours on Tuesday n I will catch up on grading next week! n Presentations n Some of

More information

Advances in Compilers

Advances in Compilers Advances in Compilers Prof. (Dr.) K.R. Chowdhary, Director COE Email: kr.chowdhary@jietjodhpur.ac.in webpage: http://www.krchowdhary.com JIET College of Engineering August 4, 2017 kr chowdhary Compilers

More information

Hyperkernel: Push-Button Verification of an OS Kernel

Hyperkernel: Push-Button Verification of an OS Kernel Hyperkernel: Push-Button Verification of an OS Kernel Luke Nelson, Helgi Sigurbjarnarson, Kaiyuan Zhang, Dylan Johnson, James Bornholt, Emina Torlak, and Xi Wang The OS Kernel is a critical component Essential

More information

Testing Error Handling Code in Device Drivers Using Characteristic Fault Injection

Testing Error Handling Code in Device Drivers Using Characteristic Fault Injection 1 Testing Error Handling Code in Device Drivers Using Characteristic Fault Injection Jia-Ju Bai, Yu-Ping Wang, Jie Yin, Shi-Min Hu Department of Computer Science and Technology Tsinghua University Beijing,

More information

Call Paths for Pin Tools

Call Paths for Pin Tools , Xu Liu, and John Mellor-Crummey Department of Computer Science Rice University CGO'14, Orlando, FL February 17, 2014 What is a Call Path? main() A() B() Foo() { x = *ptr;} Chain of function calls that

More information

The Low-Level Bounded Model Checker LLBMC

The Low-Level Bounded Model Checker LLBMC The Low-Level Bounded Model Checker LLBMC A Precise Memory Model for LLBMC Carsten Sinz Stephan Falke Florian Merz October 7, 2010 VERIFICATION MEETS ALGORITHM ENGINEERING KIT University of the State of

More information

SPIN Operating System

SPIN Operating System SPIN Operating System Motivation: general purpose, UNIX-based operating systems can perform poorly when the applications have resource usage patterns poorly handled by kernel code Why? Current crop of

More information

Minion: Fast, Scalable Constraint Solving. Ian Gent, Chris Jefferson, Ian Miguel

Minion: Fast, Scalable Constraint Solving. Ian Gent, Chris Jefferson, Ian Miguel Minion: Fast, Scalable Constraint Solving Ian Gent, Chris Jefferson, Ian Miguel 1 60 Second Introduction to CSPs Standard Definition A CSP is a tuple V: list of variables D: a domain for each

More information

Program Analysis. Program Analysis

Program Analysis. Program Analysis Program Analysis Class #4 Program Analysis Dynamic Analysis 1 Static VS Dynamic Analysis Static analysis operates on a model of the SW (without executing it) If successful, produces definitive information

More information

Automated Unit Testing of Large Industrial Embedded Software using Concolic Testing

Automated Unit Testing of Large Industrial Embedded Software using Concolic Testing Automated Unit Testing of Large Industrial Embedded Software using Concolic Testing, Moonzoo Kim SW Testing & Verification Group KAIST, South Korea Youil Kim, Taeksu Kim, Gunwoo Lee, Yoonkyu Jang Samsung

More information

Prototyping Architectural Support for Program Rollback Using FPGAs

Prototyping Architectural Support for Program Rollback Using FPGAs Prototyping Architectural Support for Program Rollback Using FPGAs Radu Teodorescu and Josep Torrellas http://iacoma.cs.uiuc.edu University of Illinois at Urbana-Champaign Motivation Problem: Software

More information

Verifying Temporal Properties via Dynamic Program Execution. Zhenhua Duan Xidian University, China

Verifying Temporal Properties via Dynamic Program Execution. Zhenhua Duan Xidian University, China Verifying Temporal Properties via Dynamic Program Execution Zhenhua Duan Xidian University, China Main Points Background & Motivation MSVL and Compiler PPTL Unified Program Verification Tool Demo Conclusion

More information

Agenda. CSE P 501 Compilers. Java Implementation Overview. JVM Architecture. JVM Runtime Data Areas (1) JVM Data Types. CSE P 501 Su04 T-1

Agenda. CSE P 501 Compilers. Java Implementation Overview. JVM Architecture. JVM Runtime Data Areas (1) JVM Data Types. CSE P 501 Su04 T-1 Agenda CSE P 501 Compilers Java Implementation JVMs, JITs &c Hal Perkins Summer 2004 Java virtual machine architecture.class files Class loading Execution engines Interpreters & JITs various strategies

More information

Symbolic Execution, Dynamic Analysis

Symbolic Execution, Dynamic Analysis Symbolic Execution, Dynamic Analysis http://d3s.mff.cuni.cz Pavel Parízek CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics Symbolic execution Pavel Parízek Symbolic Execution, Dynamic Analysis

More information

DART: Directed Automated Random Testing. CUTE: Concolic Unit Testing Engine. Slide Source: Koushik Sen from Berkeley

DART: Directed Automated Random Testing. CUTE: Concolic Unit Testing Engine. Slide Source: Koushik Sen from Berkeley DAR: Directed Automated Random esting CUE: Concolic Unit esting Engine Slide Source: Koushik Sen from Berkeley Verification and esting We would like to prove programs correct Verification and esting We

More information

CMSC 631 Program Analysis and Understanding. Spring Symbolic Execution

CMSC 631 Program Analysis and Understanding. Spring Symbolic Execution CMSC 631 Program Analysis and Understanding Spring 2013 Symbolic Execution Introduction Static analysis is great Lots of interesting ideas and tools Commercial companies sell, use static analysis It all

More information

Introduction to Supercomputing

Introduction to Supercomputing Introduction to Supercomputing TMA4280 Introduction to UNIX environment and tools 0.1 Getting started with the environment and the bash shell interpreter Desktop computers are usually operated from a graphical

More information

CSE 333 Lecture 1 - Systems programming

CSE 333 Lecture 1 - Systems programming CSE 333 Lecture 1 - Systems programming Hal Perkins Department of Computer Science & Engineering University of Washington Welcome! Today s goals: - introductions - big picture - course syllabus - setting

More information

New Java performance developments: compilation and garbage collection

New Java performance developments: compilation and garbage collection New Java performance developments: compilation and garbage collection Jeroen Borgers @jborgers #jfall17 Part 1: New in Java compilation Part 2: New in Java garbage collection 2 Part 1 New in Java compilation

More information

ECE 7650 Scalable and Secure Internet Services and Architecture ---- A Systems Perspective

ECE 7650 Scalable and Secure Internet Services and Architecture ---- A Systems Perspective ECE 7650 Scalable and Secure Internet Services and Architecture ---- A Systems Perspective Part II: Data Center Software Architecture: Topic 3: Programming Models CIEL: A Universal Execution Engine for

More information

Dynamic Binary Instrumentation: Introduction to Pin

Dynamic Binary Instrumentation: Introduction to Pin Dynamic Binary Instrumentation: Introduction to Pin Instrumentation A technique that injects instrumentation code into a binary to collect run-time information 2 Instrumentation A technique that injects

More information

Introduction to Linux (Part II) BUPT/QMUL 2018/03/21

Introduction to Linux (Part II) BUPT/QMUL 2018/03/21 Introduction to Linux (Part II) BUPT/QMUL 2018/03/21 Contents 10. vi 11. Other commands 12. Developing tools 2 10. Editor - vi Text editor Insert mode Override mode Use sub-commands Tradition tools and

More information

0x1A Great Papers in Computer Security

0x1A Great Papers in Computer Security CS 380S 0x1A Great Papers in Computer Security Vitaly Shmatikov http://www.cs.utexas.edu/~shmat/courses/cs380s/ slide 1 Reference Monitor Observes execution of the program/process At what level? Possibilities:

More information

Compiling Techniques

Compiling Techniques Lecture 2: The view from 35000 feet 19 September 2017 Table of contents 1 2 Passes Representations 3 Instruction Selection Register Allocation Instruction Scheduling 4 of a compiler Source Compiler Machine

More information

CSE 333 Lecture 1 - Systems programming

CSE 333 Lecture 1 - Systems programming CSE 333 Lecture 1 - Systems programming Steve Gribble Department of Computer Science & Engineering University of Washington Welcome! Today s goals: - introductions - big picture - course syllabus - setting

More information

Portland State University ECE 587/687. Virtual Memory and Virtualization

Portland State University ECE 587/687. Virtual Memory and Virtualization Portland State University ECE 587/687 Virtual Memory and Virtualization Copyright by Alaa Alameldeen and Zeshan Chishti, 2015 Virtual Memory A layer of abstraction between applications and hardware Programs

More information

Bug Finding with Under-approximating Static Analyses. Daniel Kroening, Matt Lewis, Georg Weissenbacher

Bug Finding with Under-approximating Static Analyses. Daniel Kroening, Matt Lewis, Georg Weissenbacher Bug Finding with Under-approximating Static Analyses Daniel Kroening, Matt Lewis, Georg Weissenbacher Overview Over- vs. underapproximating static analysis Path-based symbolic simulation Path merging Acceleration

More information

Lecture 9 Dynamic Compilation

Lecture 9 Dynamic Compilation Lecture 9 Dynamic Compilation I. Motivation & Background II. Overview III. Compilation Policy IV. Partial Method Compilation V. Partial Dead Code Elimination VI. Escape Analysis VII. Results Partial Method

More information

Linux Operating System

Linux Operating System Linux Operating System Dept. of Computer Science & Engineering 1 History Linux is a modern, free operating system based on UNIX standards. First developed as a small but self-contained kernel in 1991 by

More information

Symbolic Execution. Michael Hicks. for finding bugs. CMSC 631, Fall 2017

Symbolic Execution. Michael Hicks. for finding bugs. CMSC 631, Fall 2017 Symbolic Execution for finding bugs Michael Hicks CMSC 631, Fall 2017 Software has bugs To find them, we use testing and code reviews But some bugs are still missed Rare features Rare circumstances Nondeterminism

More information

2012 LLVM Euro - Michael Spencer. lld. Friday, April 13, The LLVM Linker

2012 LLVM Euro - Michael Spencer. lld. Friday, April 13, The LLVM Linker lld Friday, April 13, 2012 The LLVM Linker What is lld? A system linker Produce final libraries and executables, no other tools or runtime required Understands platform ABI What is lld? A system linker

More information

A Gentle Introduction to Program Analysis

A Gentle Introduction to Program Analysis A Gentle Introduction to Program Analysis Işıl Dillig University of Texas, Austin January 21, 2014 Programming Languages Mentoring Workshop 1 / 24 What is Program Analysis? Very broad topic, but generally

More information

[07] SEGMENTATION 1. 1

[07] SEGMENTATION 1. 1 [07] SEGMENTATION 1. 1 OUTLINE Segmentation An Alternative to Paging Implementing Segments Segment Table Lookup Algorithm Protection and Sharing Sharing Subtleties External Fragmentation Segmentation vs

More information

COS 318: Operating Systems

COS 318: Operating Systems COS 318: Operating Systems OS Structures and System Calls Prof. Margaret Martonosi Computer Science Department Princeton University http://www.cs.princeton.edu/courses/archive/fall11/cos318/ Outline Protection

More information

Memory Safety for Embedded Devices with nescheck

Memory Safety for Embedded Devices with nescheck Memory Safety for Embedded Devices with nescheck Daniele MIDI, Mathias PAYER, Elisa BERTINO Purdue University AsiaCCS 2017 Ubiquitous Computing and Security Sensors and WSNs are pervasive Small + cheap

More information

Systems I: Programming Abstractions

Systems I: Programming Abstractions Systems I: Programming Abstractions Course Philosophy: The goal of this course is to help students become facile with foundational concepts in programming, including experience with algorithmic problem

More information

CS 471 Operating Systems. Yue Cheng. George Mason University Fall 2017

CS 471 Operating Systems. Yue Cheng. George Mason University Fall 2017 CS 471 Operating Systems Yue Cheng George Mason University Fall 2017 Review: Segmentation 2 Virtual Memory Accesses o Approaches: Static Relocation Dynamic Relocation Base Base-and-Bounds Segmentation

More information

What are some common categories of system calls? What are common ways of structuring an OS? What are the principles behind OS design and

What are some common categories of system calls? What are common ways of structuring an OS? What are the principles behind OS design and What are the services provided by an OS? What are system calls? What are some common categories of system calls? What are the principles behind OS design and implementation? What are common ways of structuring

More information

Automatic Software Verification

Automatic Software Verification Automatic Software Verification Instructor: Mooly Sagiv TA: Oded Padon Slides from Eran Yahav and the Noun Project, Wikipedia Course Requirements Summarize one lecture 10% one lecture notes 45% homework

More information

Pipelining, Branch Prediction, Trends

Pipelining, Branch Prediction, Trends Pipelining, Branch Prediction, Trends 10.1-10.4 Topics 10.1 Quantitative Analyses of Program Execution 10.2 From CISC to RISC 10.3 Pipelining the Datapath Branch Prediction, Delay Slots 10.4 Overlapping

More information

Project 5 File System Protection

Project 5 File System Protection Project 5 File System Protection Introduction This project will implement simple protection in the xv6 file system. Your goals are to: 1. Implement protection in the xv6 file system. 2. Understand how

More information

CMPSC 311- Introduction to Systems Programming Module: Systems Programming

CMPSC 311- Introduction to Systems Programming Module: Systems Programming CMSC 311- Introduction to Systems rogramming Module: Systems rogramming rofessor atrick McDaniel Fall 2013 Software Systems A platform, application, or other structure that: is composed of multiple modules

More information

Introduction. CS 2210 Compiler Design Wonsun Ahn

Introduction. CS 2210 Compiler Design Wonsun Ahn Introduction CS 2210 Compiler Design Wonsun Ahn What is a Compiler? Compiler: A program that translates source code written in one language to a target code written in another language Source code: Input

More information

JPF SE: A Symbolic Execution Extension to Java PathFinder

JPF SE: A Symbolic Execution Extension to Java PathFinder JPF SE: A Symbolic Execution Extension to Java PathFinder Saswat Anand 1,CorinaS.Păsăreanu 2, and Willem Visser 2 1 College of Computing, Georgia Institute of Technology saswat@cc.gatech.edu 2 QSS and

More information

Test Automation. 20 December 2017

Test Automation. 20 December 2017 Test Automation 20 December 2017 The problem of test automation Testing has repetitive components, so automation is justified The problem is cost-benefit evaluation of automation [Kaner] Time for: test

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

Program Analysis and Constraint Programming

Program Analysis and Constraint Programming Program Analysis and Constraint Programming Joxan Jaffar National University of Singapore CPAIOR MasterClass, 18-19 May 2015 1 / 41 Program Testing, Verification, Analysis (TVA)... VS... Satifiability/Optimization

More information

CSE 4/521 Introduction to Operating Systems

CSE 4/521 Introduction to Operating Systems CSE 4/521 Introduction to Operating Systems Lecture 3 Operating Systems Structures (Operating-System Services, User and Operating-System Interface, System Calls, Types of System Calls, System Programs,

More information

Memory Management. CSCI 315 Operating Systems Design Department of Computer Science

Memory Management. CSCI 315 Operating Systems Design Department of Computer Science Memory Management CSCI 315 Operating Systems Design Department of Computer Science Notice: The slides for this lecture are based on those from Operating Systems Concepts, 9th ed., by Silberschatz, Galvin,

More information

How Software Executes

How Software Executes How Software Executes CS-576 Systems Security Instructor: Georgios Portokalidis Overview Introduction Anatomy of a program Basic assembly Anatomy of function calls (and returns) Memory Safety Programming

More information

Ufo: A Framework for Abstraction- and Interpolation-Based Software Verification

Ufo: A Framework for Abstraction- and Interpolation-Based Software Verification Ufo: A Framework for Abstraction- and Interpolation-Based Software Verification Aws Albarghouthi 1, Yi Li 1, Arie Gurfinkel 2, and Marsha Chechik 1 1 Department of Computer Science, University of Toronto,

More information

Shared Memory programming paradigm: openmp

Shared Memory programming paradigm: openmp IPM School of Physics Workshop on High Performance Computing - HPC08 Shared Memory programming paradigm: openmp Luca Heltai Stefano Cozzini SISSA - Democritos/INFM

More information

A Trace-based Java JIT Compiler Retrofitted from a Method-based Compiler

A Trace-based Java JIT Compiler Retrofitted from a Method-based Compiler A Trace-based Java JIT Compiler Retrofitted from a Method-based Compiler Hiroshi Inoue, Hiroshige Hayashizaki, Peng Wu and Toshio Nakatani IBM Research Tokyo IBM Research T.J. Watson Research Center April

More information

Kampala August, Agner Fog

Kampala August, Agner Fog Advanced microprocessor optimization Kampala August, 2007 Agner Fog www.agner.org Agenda Intel and AMD microprocessors Out Of Order execution Branch prediction Platform, 32 or 64 bits Choice of compiler

More information

CS533 Concepts of Operating Systems. Jonathan Walpole

CS533 Concepts of Operating Systems. Jonathan Walpole CS533 Concepts of Operating Systems Jonathan Walpole Lightweight Remote Procedure Call (LRPC) Overview Observations Performance analysis of RPC Lightweight RPC for local communication Performance Remote

More information

OS lpr. www. nfsd gcc emacs ls 1/27/09. Process Management. CS 537 Lecture 3: Processes. Example OS in operation. Why Processes? Simplicity + Speed

OS lpr. www. nfsd gcc emacs ls 1/27/09. Process Management. CS 537 Lecture 3: Processes. Example OS in operation. Why Processes? Simplicity + Speed Process Management CS 537 Lecture 3: Processes Michael Swift This lecture begins a series of topics on processes, threads, and synchronization Today: processes and process management what are the OS units

More information

Automatic Generation of Assembly to IR Translators Using Compilers

Automatic Generation of Assembly to IR Translators Using Compilers Automatic Generation of Assembly to IR Translators Using Compilers Niranjan Hasabnis and R. Sekar Stony Brook University, NY 8th Workshop on Architectural and Microarchitectural Support for Binary Translation

More information

Ricardo Rocha. Department of Computer Science Faculty of Sciences University of Porto

Ricardo Rocha. Department of Computer Science Faculty of Sciences University of Porto Ricardo Rocha Department of Computer Science Faculty of Sciences University of Porto Slides based on the book Operating System Concepts, 9th Edition, Abraham Silberschatz, Peter B. Galvin and Greg Gagne,

More information

Scaling Symbolic Execution using Ranged Analysis

Scaling Symbolic Execution using Ranged Analysis Scaling Symbolic Execution using Ranged Analysis Junaid Haroon Siddiqui University of Texas at Austin 1 University Station Austin, TX 78712 {jsiddiqui,khurshid}@ece.utexas.edu Sarfraz Khurshid Abstract

More information

Introduction to Cygwin Operating Environment

Introduction to Cygwin Operating Environment Introduction to Cygwin Operating Environment ICT 106 Fundamentals of Computer Systems Eric Li ICT106_Pract_week 1 1 What s Cygwin? Emulates Unix/Linux environment on a Windows Operating System; A collection

More information

How to Sandbox IIS Automatically without 0 False Positive and Negative

How to Sandbox IIS Automatically without 0 False Positive and Negative How to Sandbox IIS Automatically without 0 False Positive and Negative Professor Tzi-cker Chiueh Computer Science Department Stony Brook University chiueh@cs.sunysb.edu 1/10/06 Blackhat Federal 2006 1

More information

Binding and Storage. COMP 524: Programming Language Concepts Björn B. Brandenburg. The University of North Carolina at Chapel Hill

Binding and Storage. COMP 524: Programming Language Concepts Björn B. Brandenburg. The University of North Carolina at Chapel Hill Binding and Storage Björn B. Brandenburg The University of North Carolina at Chapel Hill Based in part on slides and notes by S. Olivier, A. Block, N. Fisher, F. Hernandez-Campos, and D. Stotts. What s

More information

xtc Robert Grimm Making C Safely Extensible New York University

xtc Robert Grimm Making C Safely Extensible New York University xtc Making C Safely Extensible Robert Grimm New York University The Problem Complexity of modern systems is staggering Increasingly, a seamless, global computing environment System builders continue to

More information

Virtual Memory 1. To do. q Segmentation q Paging q A hybrid system

Virtual Memory 1. To do. q Segmentation q Paging q A hybrid system Virtual Memory 1 To do q Segmentation q Paging q A hybrid system Address spaces and multiple processes IBM OS/360 Split memory in n parts (possible!= sizes) A process per partition Program Code Heap Operating

More information

Practical Considerations for Multi- Level Schedulers. Benjamin

Practical Considerations for Multi- Level Schedulers. Benjamin Practical Considerations for Multi- Level Schedulers Benjamin Hindman @benh agenda 1 multi- level scheduling (scheduler activations) 2 intra- process multi- level scheduling (Lithe) 3 distributed multi-

More information

CMPSC 311- Introduction to Systems Programming Module: Systems Programming

CMPSC 311- Introduction to Systems Programming Module: Systems Programming CMPSC 311- Introduction to Systems Programming Module: Systems Programming Professor Patrick McDaniel Fall 2013 Patrick McDaniel Professor of Computer Science and Engineering Co-head of Security Group

More information

CSE P 501 Compilers. Java Implementation JVMs, JITs &c Hal Perkins Winter /11/ Hal Perkins & UW CSE V-1

CSE P 501 Compilers. Java Implementation JVMs, JITs &c Hal Perkins Winter /11/ Hal Perkins & UW CSE V-1 CSE P 501 Compilers Java Implementation JVMs, JITs &c Hal Perkins Winter 2008 3/11/2008 2002-08 Hal Perkins & UW CSE V-1 Agenda Java virtual machine architecture.class files Class loading Execution engines

More information

Protection and Mitigation of Software Bug Exploitation

Protection and Mitigation of Software Bug Exploitation Protection and Mitigation of Software Bug Exploitation Vartan Padaryan vartan@ispras.ru 1 How safe is latest Linux release? Command line arguments fuzzer (inspired by Brumley s article) Launch programs

More information

High-Level Language VMs

High-Level Language VMs High-Level Language VMs Outline Motivation What is the need for HLL VMs? How are these different from System or Process VMs? Approach to HLL VMs Evolutionary history Pascal P-code Object oriented HLL VMs

More information

Evolution of Virtual Machine Technologies for Portability and Application Capture. Bob Vandette Java Hotspot VM Engineering Sept 2004

Evolution of Virtual Machine Technologies for Portability and Application Capture. Bob Vandette Java Hotspot VM Engineering Sept 2004 Evolution of Virtual Machine Technologies for Portability and Application Capture Bob Vandette Java Hotspot VM Engineering Sept 2004 Topics Virtual Machine Evolution Timeline & Products Trends forcing

More information

ENHANCED TOOLS FOR RISC-V PROCESSOR DEVELOPMENT

ENHANCED TOOLS FOR RISC-V PROCESSOR DEVELOPMENT ENHANCED TOOLS FOR RISC-V PROCESSOR DEVELOPMENT THE FREE AND OPEN RISC INSTRUCTION SET ARCHITECTURE Codasip is the leading provider of RISC-V processor IP Codasip Bk: A portfolio of RISC-V processors Uniquely

More information

Threads. CS3026 Operating Systems Lecture 06

Threads. CS3026 Operating Systems Lecture 06 Threads CS3026 Operating Systems Lecture 06 Multithreading Multithreading is the ability of an operating system to support multiple threads of execution within a single process Processes have at least

More information

Basic Buffer Overflows

Basic Buffer Overflows Operating Systems Security Basic Buffer Overflows (Stack Smashing) Computer Security & OS lab. Cho, Seong-je ( 조성제 ) Fall, 2018 sjcho at dankook.ac.kr Chapter 10 Buffer Overflow 2 Contents Virtual Memory

More information

GDB Tutorial. A Walkthrough with Examples. CMSC Spring Last modified March 22, GDB Tutorial

GDB Tutorial. A Walkthrough with Examples. CMSC Spring Last modified March 22, GDB Tutorial A Walkthrough with Examples CMSC 212 - Spring 2009 Last modified March 22, 2009 What is gdb? GNU Debugger A debugger for several languages, including C and C++ It allows you to inspect what the program

More information

Reserve Engineering & Buffer Overflow Attacks. Tom Chothia Computer Security, Lecture 17

Reserve Engineering & Buffer Overflow Attacks. Tom Chothia Computer Security, Lecture 17 Reserve Engineering & Buffer Overflow Attacks Tom Chothia Computer Security, Lecture 17 Introduction A simplified, high-level view of buffer overflow attacks. x86 architecture overflows on the stack Some

More information

CS 61C: Great Ideas in Computer Architecture CALL continued ( Linking and Loading)

CS 61C: Great Ideas in Computer Architecture CALL continued ( Linking and Loading) CS 61C: Great Ideas in Computer Architecture CALL continued ( Linking and Loading) Instructors: Nicholas Weaver & Vladimir Stojanovic http://inst.eecs.berkeley.edu/~cs61c/sp16 1 Where Are We Now? 2 Linker

More information

Saint Louis University. Intro to Linux and C. CSCI 2400/ ECE 3217: Computer Architecture. Instructors: David Ferry

Saint Louis University. Intro to Linux and C. CSCI 2400/ ECE 3217: Computer Architecture. Instructors: David Ferry Intro to Linux and C CSCI 2400/ ECE 3217: Computer Architecture Instructors: David Ferry 1 Overview Linux C Hello program in C Compiling 2 History of Linux Way back in the day: Bell Labs Unix Widely available

More information

Building Binary Optimizer with LLVM

Building Binary Optimizer with LLVM Building Binary Optimizer with LLVM Maksim Panchenko maks@fb.com BOLT Binary Optimization and Layout Tool Built in less than 6 months x64 Linux ELF Runs on large binary (HHVM, non-jitted part) Improves

More information