"This book is a must for anyone attempting to examine the iPhone. The level of forensic detail is excellent. If only all guides to forensics were written with this clarity!" -Andrew Sheldon, Director of Evidence Talks, computer forensics experts With iPhone use increasing in business networks, IT and security professionals face a serious challenge: these devices store an enormous amount of information. If your staff conducts business with an iPhone, you need to know how to recover, analyze, and securely destroy sensitive data. iPhone Forensics supplies the knowledge necessary to conduct complete and highly specialized forensic analysis of the iPhone, iPhone 3G, and iPod Touch. This book helps you:
Determine what type of data is stored on the device
Break v1.x and v2.x passcode-protected iPhones to gain access to the device
Build a custom recovery toolkit for the iPhone
Interrupt iPhone 3G's "secure wipe" process
Conduct data recovery of a v1.x and v2.x iPhone user disk partition, and preserve and recover the entire raw user disk partition
Recover deleted voicemail, images, email, and other personal data, using data carving techniques
Recover geotagged metadata from camera photos
Discover Google map lookups, typing cache, and other data stored on the live file system
Extract contact information from the iPhone's database
Use different recovery strategies based on case needs
And more. iPhone Forensics includes techniques used by more than 200 law enforcement agencies worldwide, and is a must-have for any corporate compliance and disaster recovery plan.
This document is about the first component of the development environment—the programming
language and its runtime environment. It fully describes the Objective-C language, and provides a
foundation for learning about the second component, the Mac OS X Objective-C application
frameworks—collectively known as Cocoa. You can start to learnmore about Cocoa by reading Getting
Started with Cocoa. The twomain development tools you use are Xcode and Interface Builder, described
in Xcode User Guide and Interface Builder respectively.
The Objective-C language is a simple computer language designed to enable sophisticated
object-oriented programming. Objective-C is defined as a small but powerful set of extensions to the
standard ANSI C language. Its additions to C are mostly based on Smalltalk, one of the first
object-oriented programming languages. Objective-C is designed to give C full object-oriented
programming capabilities, and to do so in a simple and straightforward way.
For those who have never used object-oriented programming to create applications before, this
document is also designed to help you become familiar with object-oriented development. It spells
out some of the implications of object-oriented design and gives you a flavor of what writing an
object-oriented program is really like
THE C PROGRAMMING LANGUAGE WAS pioneered by Dennis Ritchie at AT&T Bell
Laboratories in the early 1970s. It was not until the late 1970s, however, that this pro-
gramming language began to gain widespread popularity and support.This was because
until that time C compilers were not readily available for commercial use outside of Bell
Laboratories. Initially, C’s growth in popularity was also spurred on in part by the equal,
if not faster, growth in popularity of the Unix operating system.This operating system,
which was also developed at Bell Laboratories, had C as its “standard” programming lan-
guage. In fact, well over 90% of the operating system itself was written in the C lan-
guage!
The enormous success of the IBM PC and its look-alikes soon made MS-DOS the
most popular environment for the C language.As C grew in popularity across different
operating systems, more and more vendors hopped on the bandwagon and started mar-
keting their own C compilers. For the most part, their version of the C language was
based on an appendix found in the first C programming text—The C Programming
Language—by Brian Kernighan and Dennis Ritchie. Unfortunately, this appendix did not
provide a complete and unambiguous definition of C, meaning that vendors were left to
interpret some aspects of the language on their own.
In the early 1980s, a need was seen to standardize the definition of the C language.
The American National Standards Institute (ANSI) is the organization that handles such
things, so in 1983 an ANSI C committee (called X3J11) was formed to standardize C. In
1989, the committee’s work was ratified, and in 1990, the first official ANSI standard def-
inition of C was published.
Because C is used around the world, the International Standard Organization (ISO)
soon got involved.They adopted the standard, where it was called ISO/IEC 9899:1990.
Since that time, additional changes have been made to the C language.The most recent
standard was adopted in 1999. It is known as ANSI C99, or ISO/IEC 9899:1999. It is
this version of the language upon which this book is based.
C is a “higher-level language,” yet it provides capabilities that enable the user to “get
in close” with the hardware and deal with the computer on a much lower level.This is
01 0672326663 CH01 6/10/04 2:04 PM Page 12 Chapter 1 Introduction
because, although C is a general-purpose structured programming language, it was origi-
nally designed with systems programming applications in mind and, as such, provides the
user with an enormous amount of power and flexibility.
This book proposes to teach you how to program in C. It assumes no previous expo-
sure to the language and was designed to appeal to novice and experienced programmers
alike. If you have previous programming experience, you will find that C has a unique
way of doing things that probably differs from other languages you have used.
Every feature of the C language is treated in this text.As each new feature is present-
ed, a small complete program example is usually provided to illustrate the feature.This
reflects the overriding philosophy that has been used in writing this book: to teach by
example. Just as a picture is worth a thousand words, so is a properly chosen program
example. If you have access to a computer facility that supports the C programming lan-
guage, you are strongly encouraged to download and run each program presented in this
book and to compare the results obtained on your system to those shown in the text. By
doing so, not only will you learn the language and its syntax, but you will also become
familiar with the process of typing in, compiling, and running C programs.
You will find that program readability has been stressed throughout the book.This is
because I strongly believe that programs should be written so that they can be easily
read—either by the author or by somebody else.Through experience and common
sense, you will find that such programs are almost always easier to write, debug, and
modify. Furthermore, developing programs that are readable is a natural result of a true
adherence to a structured programming discipline.
Because this book was written as a tutorial, the material covered in each chapter is
based on previously presented material.Therefore, maximum benefit will be derived
from this book by reading each chapter in succession, and you are highly discouraged
from “skipping around.”You should also work through the exercises that are presented at
the end of each chapter before proceeding on to the next chapter.
Chapter 2,“Some Fundamentals,” which covers some fundamental terminology about
higher-level programming languages and the process of compiling programs, has been
included to ensure that you understand the language used throughout the remainder of
the text. From Chapter 3,“Compiling and Running Your First Program,” on, you will be
slowly introduced to the C language. By the time Chapter 16,“Input and Output
Operations in C,” rolls around, all the essential features of the language will have been
covered. Chapter 16 goes into more depth about I/O operations in C. Chapter 17,
“Miscellaneous and Advanced Features,” includes those features of the language that are
of a more advanced or esoteric nature.
Chapter 18,“Debugging Programs,” shows how you can use the C preprocessor to
help debug your programs. It also introduces you to interactive debugging.The popular
debugger gdb was chosen to illustrate this debugging technique.
Over the last decade, the programming world has been abuzz with the notion of
object-oriented programming, or OOP for short. C is not an OOP language; however,
several other programming languages that are based on C are OOP languages. Chapter
19,“Object-Oriented Programming,” gives a brief introduction to OOP and some of its
01 0672326663 CH01 6/10/04 2:04 PM Page 23 Introduction
terminology. It also gives a brief overview of three OOP languages that are based on C,
namely C++, C#, and Objective-C.
Appendix A,“C Language Summary,” provides a complete summary of the language
and is provided for reference purposes.
Appendix B,“The Standard C Library,” provides a summary of many of the standard
library routines that you will find on all systems that support C.
Appendix C,“Compiling Programs with gcc,” summarizes many of the commonly
used options when compiling programs with GNU’s C compiler gcc.
In Appendix D,“Common Programming Mistakes,” you’ll find a list of common pro-
gramming mistakes.
Finally,Appendix E,“Resources,” provides a list of resources you can turn to for more
information about the C language and to further your studies.
Answers to the quizzes at the end of chapters can be found at www.kochan-wood.com.
This book makes no assumptions about a particular computer system or operating
system on which the C language is implemented.The text makes brief mention of how
to compile and execute programs using the popular GNU C compiler gcc.
I want to thank the following people for their help in the preparation of various ver-
sions of this text: Douglas McCormick, Jim Scharf, Henry Tabickman, Dick Fritz, Steve
Levy,Tony Ianinno, and Ken Brown. I also want to thank Henry Mullish of New York
University for teaching me so much about writing and for getting me started in the
publishing business.
An earlier edition of this book was also dedicated to the memory of Maureen
Connelly, a former production editor at Hayden Book Company, the publishers of the
first edition of this book
Object-oriented programming, like most interesting new developments, builds
on some old ideas, extends them, and puts them together in novel ways. The
result is many-faceted and a clear step forward for the art of programming. An
object-oriented approach makes programs more intuitive to design, faster to
develop, more amenable to modifications, and easier to understand. It leads not
only to new ways of constructing programs, but also to new ways of conceiving
the programming task.
Nevertheless, object-oriented programming presents some formidable
obstacles to those who would like to understand what it’s all about or begin
trying it out. It introduces a new way of doing things that may seem strange at
first, and it comes with an extensive terminology that can take some getting
used to. The terminology will help in the end, but it’s not always easy to learn.
Moreover, there are as yet few full-fledged object-oriented development
environments available to try out. It can be difficult to get started.
That’s where this book comes in. It’s designed to help you become familiar with
object-oriented programming and get over the hurdle its terminology presents.
It spells out some of the implications of object-oriented design and tries to give
you a flavor of what writing an object-oriented program is really like. It fully
documents the Objective-C language, an object-oriented programming
language based on standard C, and introduces the most extensive object-
oriented development environment currently available—OPENSTEP.
w
Hello
elcome to Learn Objective- C on the Mac! This book is designed to teach you
the basics of the Objective- C language. Objective- C is a superset of C and
is the language used by many (if not most) applications that have a true
Mac OS X look and feel.
This book teaches you the Objective- C language and introduces you to its
companion, Apple’s Cocoa toolkit. Cocoa is written in Objective- C and contains
all the elements of the Mac OS X user interface, plus a whole lot more. Once
you learn Objective- C in this book, you’ll be ready to dive into Cocoa with
a full- blown project or another book such as Learn Cocoa on the Mac or Begin-
ning iPhone Development, both by Dave Mark and Jeff LaMarche (Apress 2009).
In this chapter, we’ll let you know the basic information you need before you get
started with this book. We’ll also serve up a bit of history about Objective- C and
give you a thumbnail sketch of what’s to come in future chapters.
Certain technologies bring out everyone's hidden geek, and the iPhone did so instantly upon its release. Thousands of programmers want to provide applications on the iPhone, and this book shows you how to achieve the spectacular effects that made the device an immediate hit. You'll learn how to use an open, community-developed toolkit that has been widely downloaded and used. Author Jonathan Zdziarski, the developer of the first fully functional application using the open iPhone toolkit, now explains in clear language how to create applications using Objective-C and the iPhone API, which in some ways resembles Apple's desktop API and in some ways strikes new ground. iPhone Open Application Development covers:
The Objective-C Pocket Reference is a quick guide to the Objective-C programming language and some of its fundamental support libraries. This reference takes the form of brief explanations interspersed with examples and definitions. If you are experienced with Objective-C, this handbook will supply the definitions and examples you most often need to jog your memory. If you are coming to Objective-C from C++ or Java and prefer to jump right in and write code, this book will give you enough explanation to use the language's features appropriately.