UNIX Systems Programming by Robbins & Robbins

Total Page:16

File Type:pdf, Size:1020Kb

UNIX Systems Programming by Robbins & Robbins • Table of Contents Unix™ Systems Programming: Communication, Concurrency, and Threads By Kay A. Robbins, Steven Robbins Publisher: Prentice Hall PTR Pub Date: June 17, 2003 ISBN: 0-13-042411-0 Pages: 912 This completely updated classic (originally titled Practical UNIX Programming) demonstrates how to design complex software to get the most from the UNIX operating system. UNIX Systems Programming provides a clear and easy-to-understand introduction tothe essentials of UNIX programming. Starting with short code snippetsthat illustrate how to use system calls, Robbins and Robbins movequickly to hands-on projects that help readers expand their skill levels. This practical guide thoroughly explores communication, concurrency,and multithreading. Known for its comprehensive and lucid explanations of complicated topics such as signals and concurrency, the book features practical examples, exercises, reusable code, and simplified libraries for use in network communication applications. A self-contained reference that relies on the latest UNIX standards,UNIX Systems Programming provides thorough coverage of files, signals,semaphores, POSIX threads, and client-server communication. Thisedition features all-new chapters on the Web, UDP, and server performance. The sample material has been tested extensively in the classroom. • Table of Contents Unix™ Systems Programming: Communication, Concurrency, and Threads By Kay A. Robbins, Steven Robbins Publisher: Prentice Hall PTR Pub Date: June 17, 2003 ISBN: 0-13-042411-0 Pages: 912 Copyright About the Web Site Preface Acknowledgments Part I: Fundamentals Chapter 1. Technology's Impact on Programs Section 1.1. Terminology of Change Section 1.2. Time and Speed Section 1.3. Multiprogramming and Time Sharing Section 1.4. Concurrency at the Applications Level Section 1.5. Security and Fault Tolerance Section 1.6. Buffer Overflows for Breaking and Entering Section 1.7. UNIX Standards Section 1.8. Additional Reading Chapter 2. Programs, Processes and Threads Section 2.1. How a Program Becomes a Process Section 2.2. Threads and Thread of Execution Section 2.3. Layout of a Program Image Section 2.4. Library Function Calls Section 2.5. Function Return Values and Errors Section 2.6. Argument Arrays Section 2.7. Thread-Safe Functions Section 2.8. Use of Static Variables Section 2.9. Structure of Static Objects Section 2.10. Process Environment Section 2.11. Process Termination Section 2.12. Exercise: An env Utility Section 2.13. Exercise: Message Logging Section 2.14. Additional Reading Chapter 3. Processes in UNIX Section 3.1. Process Identification Section 3.2. Process State Section 3.3. UNIX Process Creation and fork Section 3.4. The wait Function Section 3.5. The exec Function Section 3.6. Background Processes and Daemons Section 3.7. Critical Sections Section 3.8. Exercise: Process Chains Section 3.9. Exercise: Process Fans Section 3.10. Additional Reading Chapter 4. UNIX I/O Section 4.1. Device Terminology Section 4.2. Reading and Writing Section 4.3. Opening and Closing Files Section 4.4. The select Function Section 4.5. The poll Function Section 4.6. File Representation Section 4.7. Filters and Redirection Section 4.8. File Control Section 4.9. Exercise: Atomic Logging Section 4.10. Exercise: A cat Utility Section 4.11. Additional Reading Chapter 5. Files and Directories Section 5.1. UNIX File System Navigation Section 5.2. Directory Access Section 5.3. UNIX File System Implementation Section 5.4. Hard Links and Symbolic Links Section 5.5. Exercise: The which Command Section 5.6. Exercise: Biffing Section 5.7. Exercise: News biff Section 5.8. Exercise: Traversing Directories Section 5.9. Additional Reading Chapter 6. UNIX Special Files Section 6.1. Pipes Section 6.2. Pipelines Section 6.3. FIFOs Section 6.4. Pipes and the Client-Server Model Section 6.5. Terminal Control Section 6.6. Audio Device Section 6.7. Exercise: Audio Section 6.8. Exercise: Barriers Section 6.9. Exercise: The stty Command Section 6.10. Exercise: Client-Server Revisited Section 6.11. Additional Reading Chapter 7. Project: The Token Ring Section 7.1. Ring Topology Section 7.2. Ring Formation Section 7.3. Ring Exploration Section 7.4. Simple Communication Section 7.5. Mutual Exclusion with Tokens Section 7.6. Mutual Exclusion by Voting Section 7.7. Leader Election on an Anonymous Ring Section 7.8. Token Ring for Communication Section 7.9. Pipelined Preprocessor Section 7.10. Parallel Ring Algorithms Section 7.11. Flexible Ring Section 7.12. Additional Reading Part II: Asynchronous Events Chapter 8. Signals Section 8.1. Basic Signal Concepts Section 8.2. Generating Signals Section 8.3. Manipulating Signal Masks and Signal Sets Section 8.4. Catching and Ignoring Signals—sigaction Section 8.5. Waiting for Signals—pause, sigsuspend and sigwait Section 8.6. Handling Signals: Errors and Async-signal Safety Section 8.7. Program Control with siglongjmp and sigsetjmp Section 8.8. Programming with Asynchronous I/O Section 8.9. Exercise: Dumping Statistics Section 8.10. Exercise: Spooling a Slow Device Section 8.11. Additional Reading Chapter 9. Times and Timers Section 9.1. POSIX Times Section 9.2. Sleep Functions Section 9.3. POSIX:XSI Interval Timers Section 9.4. Realtime Signals Section 9.5. POSIX:TMR Interval Timers Section 9.6. Timer Drift, Overruns and Absolute Time Section 9.7. Additional Reading Chapter 10. Project: Virtual Timers Section 10.1. Project Overview Section 10.2. Simple Timers Section 10.3. Setting One of Five Single Timers Section 10.4. Using Multiple Timers Section 10.5. A Robust Implementation of Multiple Timers Section 10.6. POSIX:TMR Timer Implementation Section 10.7. mycron, a Small Cron Facility Section 10.8. Additional Reading Chapter 11. Project: Cracking Shells Section 11.1. Building a Simple Shell Section 11.2. Redirection Section 11.3. Pipelines Section 11.4. Signal Handling in the Foreground Section 11.5. Process Groups, Sessions and Controlling Terminals Section 11.6. Background Processes in ush Section 11.7. Job Control Section 11.8. Job Control for ush Section 11.9. Additional Reading Part III: Concurrency Chapter 12. POSIX Threads Section 12.1. A Motivating Problem: Monitoring File Descriptors Section 12.2. Use of Threads to Monitor Multiple File Descriptors Section 12.3. Thread Management Section 12.4. Thread Safety Section 12.5. User Threads versus Kernel Threads Section 12.6. Thread Attributes Section 12.7. Exercise: Parallel File Copy Section 12.8. Additional Reading Chapter 13. Thread Synchronization Section 13.1. POSIX Synchronization Functions Section 13.2. Mutex Locks Section 13.3. At-Most-Once and At-Least-Once-Execution Section 13.4. Condition Variables Section 13.5. Signal Handling and Threads Section 13.6. Readers and Writers Section 13.7. A strerror_r Implementation Section 13.8. Deadlocks and Other Pesky Problems Section 13.9. Exercise: Multiple Barriers Section 13.10. Additional Reading Chapter 14. Critical Sections and Semaphores Section 14.1. Dealing with Critical Sections Section 14.2. Semaphores Section 14.3. POSIX:SEM Unnamed Semaphores Section 14.4. POSIX:SEM Semaphore Operations Section 14.5. POSIX:SEM Named Semaphores Section 14.6. Exercise: License Manager Section 14.7. Additional Reading Chapter 15. POSIX IPC Section 15.1. POSIX:XSI Interprocess Communication Section 15.2. POSIX:XSI Semaphore Sets Section 15.3. POSIX:XSI Shared Memory Section 15.4. POSIX:XSI Message Queues Section 15.5. Exercise: POSIX Unnamed Semaphores Section 15.6. Exercise: POSIX Named Semaphores Section 15.7. Exercise: Implementing Pipes with Shared Memory Section 15.8. Exercise: Implementing Pipes with Message Queues Section 15.9. Additional Reading Chapter 16. Project: Producer Consumer Synchronization Section 16.1. The Producer-Consumer Problem Section 16.2. Bounded Buffer Protected by Mutex Locks Section 16.3. Buffer Implementation with Semaphores Section 16.4. Introduction to a Simple Producer-Consumer Problem Section 16.5. Bounded Buffer Implementation Using Condition Variables Section 16.6. Buffers with Done Conditions Section 16.7. Parallel File Copy Section 16.8. Threaded Print Server Section 16.9. Additional Reading Chapter 17. Project: The Not Too Parallel Virtual Machine Section 17.1. PVM History, Terminology, and Architecture Section 17.2. The Not Too Parallel Virtual Machine Section 17.3. NTPVM Project Overview Section 17.4. I/O and Testing of Dispatcher Section 17.5. Single Task with No Input Section 17.6. Sequential Tasks Section 17.7. Concurrent Tasks Section 17.8. Packet Communication, Broadcast and Barriers Section 17.9. Termination and Signals Section 17.10. Ordered Message Delivery Section 17.11. Additional Reading Part IV: Communication Chapter 18. Connection-Oriented Communication Section 18.1. The Client-Server Model Section 18.2. Communication Channels Section 18.3. Connection-Oriented Server Strategies Section 18.4. Universal Internet Communication Interface (UICI) Section 18.5. UICI Implementations of Different Server Strategies Section 18.6. UICI Clients Section 18.7. Socket Implementation of UICI Section 18.8. Host Names and IP Addresses Section 18.9. Thread-Safe UICI Section 18.10. Exercise: Ping Server Section 18.11. Exercise: Transmission of Audio Section 18.12. Additional Reading Chapter 19. Project: WWW Redirection Section 19.1. The World Wide Web Section 19.2. Uniform Resource Locators (URLs) Section 19.3. HTTP Primer Section 19.4. Web Communication Patterns Section 19.5. Pass-through Monitoring of Single Connections Section 19.6. Tunnel Server Implementation Section 19.7. Server Driver for Testing Section 19.8. HTTP Header Parsing Section 19.9. Simple Proxy Server Section 19.10. Proxy Monitor Section 19.11. Proxy Cache Section 19.12. Gateways as Portals Section 19.13. Gateway for Load Balancing Section 19.14. Postmortem Section 19.15. Additional Reading Chapter 20. Connectionless Communication and Multicast Section 20.1. Introduction to Connectionless Communication Section 20.2. Simplified Interface for Connectionless Communication Section 20.3. Simple-Request Protocols Section 20.4.

  1008
Recommended publications
  • Theendokernel: Fast, Secure
    The Endokernel: Fast, Secure, and Programmable Subprocess Virtualization Bumjin Im Fangfei Yang Chia-Che Tsai Michael LeMay Rice University Rice University Texas A&M University Intel Labs Anjo Vahldiek-Oberwagner Nathan Dautenhahn Intel Labs Rice University Abstract Intra-Process Sandbox Multi-Process Commodity applications contain more and more combina- ld/st tions of interacting components (user, application, library, and Process Process Trusted Unsafe system) and exhibit increasingly diverse tradeoffs between iso- Unsafe ld/st lation, performance, and programmability. We argue that the Unsafe challenge of future runtime isolation is best met by embracing syscall()ld/st the multi-principle nature of applications, rethinking process Trusted Trusted read/ architecture for fast and extensible intra-process isolation. We IPC IPC write present, the Endokernel, a new process model and security Operating System architecture that nests an extensible monitor into the standard process for building efficient least-authority abstractions. The Endokernel introduces a new virtual machine abstraction for Figure 1: Problem: intra-process is bypassable because do- representing subprocess authority, which is enforced by an main is opaque to OS, sandbox limits functionality, and inter- efficient self-isolating monitor that maps the abstraction to process is slow and costly to apply. Red indicates limitations. system level objects (processes, threads, files, and signals). We show how the Endokernel Architecture can be used to develop enforces subprocess access control to memory and CPU specialized separation abstractions using an exokernel-like state [10, 17, 24, 25, 75].Unfortunately, these approaches only organization to provide virtual privilege rings, which we use virtualize minimal parts of the CPU and neglect tying their to reorganize and secure NGINX.
    [Show full text]
  • PL/I List Processing • PL/I Language Lacked FaciliEs for TreaNg Linked Lists HAROLD LAWSON,JR
    The Birth of the Pointer Variable Based upon: Experiences and Reflec;ons of a Computer Pioneer Harold “Bud” Lawson FELLOW FELLOW and LIFE MEMBER IEEE COMPUTER SOCIETY CHARLES BABBAGE COMPUTER PIONEER FELLOW Overlapping Phases • Phase 1 (1959-1974) – Computer Industry • Phase 2 (1974-1996) - Computer-Based Systems • Phase 3 (1996-Present) – Complex Systems • Dedicated to all the talented colleagues that I have worked with during my career. • We have had fun and learned from each other. • InteresMng ReflecMons and Happenings are indicated in Red. Computer Industry (1959 to 1974) • Summer 1958 - US Census Bureau • 1959 Temple University (Introduc;on to IBM 650 (Drum Machine)) • 1959-61 Employed at Remington-Rand Univac • 1961-67 Employed at IBM • 1967-69 Part Time Consultant (Professor) • 1969-70 Employed at Standard Computer Corporaon • 1971-73 Consultant to Datasaab, Linköping • 1973-… Consultant .. Expert Witness.. Rear Admiral Dr. Grace Murray Hopper (December 9, 1906 – January 1, 1992) Minted the word “BUG” – During her Mme as Programmer of the MARK I Computer at Harvard Minted the word “COMPILER” with A-0 in 1951 Developed Math-MaMc and FlowmaMc and inspired the Development of COBOL Grace loved US Navy Service – The oldest acMve officer, reMrement at 80. From Grace I learned that it is important to queson the status-quo, to seek deeper meaning and explore alterna5ve ways of doing things. 1980 – Honarary Doctor The USS Linköpings Universitet Hopper Univac Compiler Technology of the 1950’s Grace Hopper’s Early Programming Languages Math-MaMc
    [Show full text]
  • Memory Layout and Access Chapter Four
    Memory Layout and Access Chapter Four Chapter One discussed the basic format for data in memory. Chapter Three covered how a computer system physically organizes that data. This chapter discusses how the 80x86 CPUs access data in memory. 4.0 Chapter Overview This chapter forms an important bridge between sections one and two (Machine Organization and Basic Assembly Language, respectively). From the point of view of machine organization, this chapter discusses memory addressing, memory organization, CPU addressing modes, and data representation in memory. From the assembly language programming point of view, this chapter discusses the 80x86 register sets, the 80x86 mem- ory addressing modes, and composite data types. This is a pivotal chapter. If you do not understand the material in this chapter, you will have difficulty understanding the chap- ters that follow. Therefore, you should study this chapter carefully before proceeding. This chapter begins by discussing the registers on the 80x86 processors. These proces- sors provide a set of general purpose registers, segment registers, and some special pur- pose registers. Certain members of the family provide additional registers, although typical application do not use them. After presenting the registers, this chapter describes memory organization and seg- mentation on the 80x86. Segmentation is a difficult concept to many beginning 80x86 assembly language programmers. Indeed, this text tends to avoid using segmented addressing throughout the introductory chapters. Nevertheless, segmentation is a power- ful concept that you must become comfortable with if you intend to write non-trivial 80x86 programs. 80x86 memory addressing modes are, perhaps, the most important topic in this chap- ter.
    [Show full text]
  • BUGS Code for Item Response Theory
    JSS Journal of Statistical Software August 2010, Volume 36, Code Snippet 1. http://www.jstatsoft.org/ BUGS Code for Item Response Theory S. McKay Curtis University of Washington Abstract I present BUGS code to fit common models from item response theory (IRT), such as the two parameter logistic model, three parameter logisitic model, graded response model, generalized partial credit model, testlet model, and generalized testlet models. I demonstrate how the code in this article can easily be extended to fit more complicated IRT models, when the data at hand require a more sophisticated approach. Specifically, I describe modifications to the BUGS code that accommodate longitudinal item response data. Keywords: education, psychometrics, latent variable model, measurement model, Bayesian inference, Markov chain Monte Carlo, longitudinal data. 1. Introduction In this paper, I present BUGS (Gilks, Thomas, and Spiegelhalter 1994) code to fit several models from item response theory (IRT). Several different software packages are available for fitting IRT models. These programs include packages from Scientific Software International (du Toit 2003), such as PARSCALE (Muraki and Bock 2005), BILOG-MG (Zimowski, Mu- raki, Mislevy, and Bock 2005), MULTILOG (Thissen, Chen, and Bock 2003), and TESTFACT (Wood, Wilson, Gibbons, Schilling, Muraki, and Bock 2003). The Comprehensive R Archive Network (CRAN) task view \Psychometric Models and Methods" (Mair and Hatzinger 2010) contains a description of many different R packages that can be used to fit IRT models in the R computing environment (R Development Core Team 2010). Among these R packages are ltm (Rizopoulos 2006) and gpcm (Johnson 2007), which contain several functions to fit IRT models using marginal maximum likelihood methods, and eRm (Mair and Hatzinger 2007), which contains functions to fit several variations of the Rasch model (Fischer and Molenaar 1995).
    [Show full text]
  • Systems Programming in C++ Practical Course
    Systems Programming in C++ Practical Course Summer Term 2019 Course Goals Learn to write good C++ • Basic syntax • Common idioms and best practices Learn to implement large systems with C++ • C++ standard library and Linux ecosystem • Tools and techniques (building, debugging, etc.) Learn to write high-performance code with C++ • Multithreading and synchronization • Performance pitfalls 1 Formal Prerequisites Knowledge equivalent to the lectures • Introduction to Informatics 1 (IN0001) • Fundamentals of Programming (IN0002) • Fundamentals of Algorithms and Data Structures (IN0007) Additional formal prerequisites (B.Sc. Informatics) • Introduction to Computer Architecture (IN0004) • Basic Principles: Operating Systems and System Software (IN0009) Additional formal prerequisites (B.Sc. Games Engineering) • Operating Systems and Hardware oriented Programming for Games (IN0034) 2 Practical Prerequisites Practical prerequisites • No previous experience with C or C++ required • Familiarity with another general-purpose programming language Operating System • Working Linux operating system (e.g. Ubuntu) • Basic experience with Linux (in particular with shell) • You are free to use your favorite OS, we only support Linux 3 Lecture & Tutorial • Lecture: Tuesday, 14:00 – 16:00, MI 02.11.018 • Tutorial: Friday, 10:00 – 12:00, MI 02.11.018 • Discuss assignments and any questions • First two tutorials are additional lectures • Everything will be in English • Attendance is mandatory • Announcements on the website 4 Assignments • Brief non-coding quizzes
    [Show full text]
  • 1.Operating Systems Overview
    OPERATING SYSTEMS OVERVIEW Contents O.S.Functions The Evolution of O.S. Characteristics of O.S. Basic hardware elements 1 Contents O.S.Components System calls O.S.Structure USER 1 USER 2 USER 3 USER n compiler text interpreter database editor system operating system computer hardware 2 Programming system components compilers loader linker comand interpreter (shell) … O.S. purposes to make a computer more convenient and easier to use to allow more efficient operations of the whole computer system 3 To simplify the program development The O.S. masks the details of the hardware from the programmer and provides the programmer with a convenient interface for using system resources (system calls) To simplify the program development Definition of an extended (virtual) machine 4 VIRTUAL MACHINE ES: DISK CONTROLLER commands: read, write, head motion, ecc… parameters: sector address, number of sectors for each track, ecc… state and error conditions 5 Hardware resource allocation Access to system resources must be controlled and conflicts for resource contention resolved Hardware resource allocation Any user should be provided with required resources, by following suitable policies 6 The details for the management of hardware resources must be hidden to users System calls provide the interface between the application programs and the O.S. 7 THE EVOLUTION OF O.S. Serial processing No O.S. Control by console Scheduling Setup time 8 Simple batch systems Monitor Resident in main memory Control of the program execution “batch” solution
    [Show full text]
  • A Quick Reference to C Programming Language
    A Quick Reference to C Programming Language Structure of a C Program #include(stdio.h) /* include IO library */ #include... /* include other files */ #define.. /* define constants */ /* Declare global variables*/) (variable type)(variable list); /* Define program functions */ (type returned)(function name)(parameter list) (declaration of parameter types) { (declaration of local variables); (body of function code); } /* Define main function*/ main ((optional argc and argv arguments)) (optional declaration parameters) { (declaration of local variables); (body of main function code); } Comments Format: /*(body of comment) */ Example: /*This is a comment in C*/ Constant Declarations Format: #define(constant name)(constant value) Example: #define MAXIMUM 1000 Type Definitions Format: typedef(datatype)(symbolic name); Example: typedef int KILOGRAMS; Variables Declarations: Format: (variable type)(name 1)(name 2),...; Example: int firstnum, secondnum; char alpha; int firstarray[10]; int doublearray[2][5]; char firststring[1O]; Initializing: Format: (variable type)(name)=(value); Example: int firstnum=5; Assignments: Format: (name)=(value); Example: firstnum=5; Alpha='a'; Unions Declarations: Format: union(tag) {(type)(member name); (type)(member name); ... }(variable name); Example: union demotagname {int a; float b; }demovarname; Assignment: Format: (tag).(member name)=(value); demovarname.a=1; demovarname.b=4.6; Structures Declarations: Format: struct(tag) {(type)(variable); (type)(variable); ... }(variable list); Example: struct student {int
    [Show full text]
  • Lecture 2: Introduction to C Programming Language [email protected]
    CSCI-UA 201 Joanna Klukowska Lecture 2: Introduction to C Programming Language [email protected] Lecture 2: Introduction to C Programming Language Notes include some materials provided by Andrew Case, Jinyang Li, Mohamed Zahran, and the textbooks. Reading materials Chapters 1-6 in The C Programming Language, by B.W. Kernighan and Dennis M. Ritchie Section 1.2 and Aside on page 4 in Computer Systems, A Programmer’s Perspective by R.E. Bryant and D.R. O’Hallaron Contents 1 Intro to C and Unix/Linux 3 1.1 Why C?............................................................3 1.2 C vs. Java...........................................................3 1.3 Code Development Process (Not Only in C).........................................4 1.4 Basic Unix Commands....................................................4 2 First C Program and Stages of Compilation 6 2.1 Writing and running hello world in C.............................................6 2.2 Hello world line by line....................................................7 2.3 What really happens when we compile a program?.....................................8 3 Basics of C 9 3.1 Data types (primitive types)..................................................9 3.2 Using printf to print different data types.........................................9 3.3 Control flow.......................................................... 10 3.4 Functions........................................................... 11 3.5 Variable scope........................................................ 12 3.6 Header files.........................................................
    [Show full text]
  • A Tutorial Introduction to the Language B
    A TUTORIAL INTRODUCTION TO THE LANGUAGE B B. W. Kernighan Bell Laboratories Murray Hill, New Jersey 1. Introduction B is a new computer language designed and implemented at Murray Hill. It runs and is actively supported and documented on the H6070 TSS system at Murray Hill. B is particularly suited for non-numeric computations, typified by system programming. These usually involve many complex logical decisions, computations on integers and fields of words, especially charac- ters and bit strings, and no floating point. B programs for such operations are substantially easier to write and understand than GMAP programs. The generated code is quite good. Implementation of simple TSS subsystems is an especially good use for B. B is reminiscent of BCPL [2] , for those who can remember. The original design and implementation are the work of K. L. Thompson and D. M. Ritchie; their original 6070 version has been substantially improved by S. C. Johnson, who also wrote the runtime library. This memo is a tutorial to make learning B as painless as possible. Most of the features of the language are mentioned in passing, but only the most important are stressed. Users who would like the full story should consult A User’s Reference to B on MH-TSS, by S. C. Johnson [1], which should be read for details any- way. We will assume that the user is familiar with the mysteries of TSS, such as creating files, text editing, and the like, and has programmed in some language before. Throughout, the symbolism (->n) implies that a topic will be expanded upon in section n of this manual.
    [Show full text]
  • Kednos PL/I for Openvms Systems User Manual
    ) Kednos PL/I for OpenVMS Systems User Manual Order Number: AA-H951E-TM November 2003 This manual provides an overview of the PL/I programming language. It explains programming with Kednos PL/I on OpenVMS VAX Systems and OpenVMS Alpha Systems. It also describes the operation of the Kednos PL/I compilers and the features of the operating systems that are important to the PL/I programmer. Revision/Update Information: This revised manual supersedes the PL/I User’s Manual for VAX VMS, Order Number AA-H951D-TL. Operating System and Version: For Kednos PL/I for OpenVMS VAX: OpenVMS VAX Version 5.5 or higher For Kednos PL/I for OpenVMS Alpha: OpenVMS Alpha Version 6.2 or higher Software Version: Kednos PL/I Version 3.8 for OpenVMS VAX Kednos PL/I Version 4.4 for OpenVMS Alpha Published by: Kednos Corporation, Pebble Beach, CA, www.Kednos.com First Printing, August 1980 Revised, November 1983 Updated, April 1985 Revised, April 1987 Revised, January 1992 Revised, May 1992 Revised, November 1993 Revised, April 1995 Revised, October 1995 Revised, November 2003 Kednos Corporation makes no representations that the use of its products in the manner described in this publication will not infringe on existing or future patent rights, nor do the descriptions contained in this publication imply the granting of licenses to make, use, or sell equipment or software in accordance with the description. Possession, use, or copying of the software described in this publication is authorized only pursuant to a valid written license from Kednos Corporation or an anthorized sublicensor.
    [Show full text]
  • Command $Line; Done
    http://xkcd.com/208/ >0 TGCAGGTATATCTATTAGCAGGTTTAATTTTGCCTGCACTTGGTTGGGTACATTATTTTAAGTGTATTTGACAAG >1 TGCAGGTTGTTGTTACTCAGGTCCAGTTCTCTGAGACTGGAGGACTGGGAGCTGAGAACTGAGGACAGAGCTTCA >2 TGCAGGGCCGGTCCAAGGCTGCATGAGGCCTGGGGCAGAATCTGACCTAGGGGCCCCTCTTGCTGCTAAAACCAT >3 TGCAGGATCTGCTGCACCATTAACCAGACAGAAATGGCAGTTTTATACAAGTTATTATTCTAATTCAATAGCTGA >4 TGCAGGGGTCAAATACAGCTGTCAAAGCCAGACTTTGAGCACTGCTAGCTGGCTGCAACACCTGCACTTAACCTC cat seqs.fa PIPE grep ACGT TGCAGGTATATCTATTAGCAGGTTTAATTTTGCCTGCACTTGGTTGGGTACATTATTTTAAGTGTATTTGACAAG >1 TGCAGGTTGTTGTTACTCAGGTCCAGTTCTCTGAGACTGGAGGACTGGGAGCTGAGAACTGAGGACAGAGCTTCA >2 TGCAGGGCCGGTCCAAGGCTGCATGAGGCCTGGGGCAGAATCTGACCTAGGGGCCCCTCTTGCTGCTAAAACCAT >3 TGCAGGATCTGCTGCACCATTAACCAGACAGAAATGGCAGTTTTATACAAGTTATTATTCTAATTCAATAGCTGA >4 TGCAGGGGTCAAATACAGCTGTCAAAGCCAGACTTTGAGCACTGCTAGCTGGCTGCAACACCTGCACTTAACCTC cat seqs.fa Does PIPE “>0” grep ACGT contain “ACGT”? Yes? No? Output NULL >1 TGCAGGTTGTTGTTACTCAGGTCCAGTTCTCTGAGACTGGAGGACTGGGAGCTGAGAACTGAGGACAGAGCTTCA >2 TGCAGGGCCGGTCCAAGGCTGCATGAGGCCTGGGGCAGAATCTGACCTAGGGGCCCCTCTTGCTGCTAAAACCAT >3 TGCAGGATCTGCTGCACCATTAACCAGACAGAAATGGCAGTTTTATACAAGTTATTATTCTAATTCAATAGCTGA >4 TGCAGGGGTCAAATACAGCTGTCAAAGCCAGACTTTGAGCACTGCTAGCTGGCTGCAACACCTGCACTTAACCTC cat seqs.fa Does PIPE “TGCAGGTATATCTATTAGCAGGTTTAATTTTGCCTGCACTTG...G” grep ACGT contain “ACGT”? Yes? No? Output NULL TGCAGGTTGTTGTTACTCAGGTCCAGTTCTCTGAGACTGGAGGACTGGGAGCTGAGAACTGAGGACAGAGCTTCA >2 TGCAGGGCCGGTCCAAGGCTGCATGAGGCCTGGGGCAGAATCTGACCTAGGGGCCCCTCTTGCTGCTAAAACCAT >3 TGCAGGATCTGCTGCACCATTAACCAGACAGAAATGGCAGTTTTATACAAGTTATTATTCTAATTCAATAGCTGA
    [Show full text]
  • Strengthening Diversification Defenses by Means of a Non-Readable Code
    1 Strengthening diversification defenses by means of a non-readable code segment Sebastian Österlund Department of Computer Science Vrije Universiteit, Amsterdam, Netherlands Supervised By: H. Bos & C. Giuffrida Abstract—In this paper we present a new defense against Just- hardware segmentation, this approach should theoretically have In-Time return-oriented-programming attacks. By making pro- no run-time performance overhead for Intel x86 architecture, gram code non-readable, the assembly of Just-In-Time gadgets by once it has been set up. Both position dependent executables scanning the memory is effectively blocked. Using segmentation and position independent executables are covered. Furthermore on Intel x86 hardware, the implementation of execute-only code an approach to implement a similar defense on x86_64 using can be achieved. We discuss two different ways of implementing the new MPX [7] instructions is presented. The defense such a defense for 32-bit Intel architecture: one for position dependent executables, and one for position independent executa- mechanism we present in this paper is of interest, mainly, bles. The first implementation works by splitting the address- for use in security of network connected applications (such space into two mirrored segments. The second implementation as servers or web-browsers), since these applications are often creates an execute-only memory-section at the top of the address- the main targets of remote code execution exploits. space, making it possible to still use the whole address-space. By relying on hardware segmentation the run-time performance II. RETURN-ORIENTED-PROGRAMMING ATTACKS overhead of these defenses is minimal. Remote code execution by means of buffer overflows has Keywords—ROP, segmentation, XnR, buffer overflow, memory been a problem for a long time.
    [Show full text]