How we did it:
For any feedback, any questions, any notes or just for chat - feel free to follow us on social networks
Chris Anley, John Heasman, Felix Lindner, Gerardo Richarte
This much-anticipated revision, written by the ultimate group of top security experts in the world, features 40 percent new content on how to find security holes in any operating system or application New material addresses the many new exploitation techniques that have been discovered since the first edition, including attacking "unbreakable" software packages such as McAfee's Entercept, Mac OS X, XP, Office 2003, and Vista Also features the first-ever published information on exploiting Cisco's IOS, with content that has never before been explored The companion Web site features downloadable code files
This essential resource for software developers highlights the weak points in "well-protected" software, shows how crackers break common protection schemes, and how to defend against crackers. Includes in-depth discussions of anti-debugging and anti-disassembling. The CD-ROM contains compression and encoding software, debuggers and anti-debugging tricks, practical protection demonstrations, and extended examples from the book.
Imperfect C++ C++, although a marvelous language, isn't perfect. Matthew Wilson has been working with it for over a decade, and during that time he has found inherent limitations that require skillful workarounds. In this book, he doesn't just tell you what's wrong with C++, but offers practical techniques and tools for writing code that's more robust, flexible, efficient, and maintainable. He shows you how to tame C++'s complexity, cut through its vast array of paradigms, take back control over your code--and get far better results. If you're a long-time C++ developer, this book will help you see your programming challenges in new ways--and illuminate powerful techniques you may never have tried. If you're newer to C++, you'll learn principles that will make you more effective in all of your projects. Along the way, you'll learn how to: Overcome deficiencies in C++'s type system Enforce software design through constraints, contracts, and assertions Handle behavior ignored by the standard-- including issues related to dynamic libraries, static objects, and threading Achieve binary compatibility between dynamically loading components Understand the costs and disadvantages of implicit conversions--and the alternatives Increase compatibility with diverse compilers, libraries, and operating environments Help your compiler detect more errors and work more effectively Understand the aspects of style that impact reliability Apply the Resource Acquisition Is Initialization mechanism to a wide variety of problem domains Manage the sometimes arcane relationship between arrays and pointers Use template programming to improve flexibility and robustness Extend C++: including fast string concatenation, a true NULL-pointer, flexible memory buffers, Properties, multidimensional arrays, and Ranges The CD-ROM contains a valuable variety of C++ compilers, libraries, test programs, tools, and utilities, as well as the author's related journal articles. New and updated imperfections, along with software libraries and example code are available online at http: //imperfectcplusplus.com. (c) Copyright Pearson Education. All rights reserved.
Jonathan B. Rosenberg
A total guide to debuggers: what they do, how they work, and how to use them to produce better programs "Debuggers are the magnifying glass, the microscope, the logic analyzer, the profiler, and the browser with which a program can be examined."-Jonathan B. Rosenberg Debuggers are an indispensable tool in the development process. In fact, during the course of the average software project, more hours are spent debugging software than in compiling code. Yet, not many programmers really know how to constructively interpret the results they get back from debuggers. And even fewer know what makes these complex suites of algorithms and data structures tick. Now in this extremely accessible guide, Jonathan B. Rosenberg demystifies debuggers for programmers and shows them how to make better use of debuggers in their next projects. Taking a hands-on, problem-solving approach to a complex subject, Rosenberg explains how debuggers work and why programmers use them. Most importantly, he provides practical discussions of debugger algorithms and procedures for their use, accompanied by many practical examples. The author also discusses a wide variety of systems applications, from Microsoft's Win32 debug API to a large parallel architecture. Visit our Web site at: http://www.wiley.com/compbooks/
Many Linux and Unix developers are familiar with the GNU debugger (GBD), the invaluable open source tool for testing, fixing, and retesting software. And since GDB can be ported to Windows, Microsoft developers and others who use this platform can also take advantage of this amazing free software that allows you to see exactly what's going on inside of a program as it's executing. This new pocket guide gives you a convenient quick reference for using the debugger with several different programming languages, including C, C++, Java, Fortran and Assembly. The GNU debugger is the most useful tool during the testing phase of the software development cycle because it helps you catch bugs in the act. You can see what a program was doing at the moment it crashed, and then readily pinpoint and correct problem code. With the GDB Pocket Reference on hand, the process is quick and painless. The book covers the essentials of using GBD is a testing environment, including how to specify a target for debugging and how to make a program stop on specified conditions. This handy guide also provides details on using the debugger to examine the stack, source files and data to find the cause of program failure-and then explains ways to use GBD to make quick changes to the program for further testing and debugging. The ability to spot a bug in real time with GDB can save you hours of frustration, and having a quick way to refer to GBD's essential functions is key to making the process work. Once you get your hands on the GDB Pocket Reference, you'll never let go!
Today, embedded systems programming is a more valuable discipline than ever, driven by entirely new fields such as wearable technology and the "Internet of Things." Now, for the first time, there's a complete guide to bare-metal embedded system programming using the Android Emulator virtual environment. Embedded systems expert Roger Ye teaches all the skills you need to program directly to hardware: gaining performance and efficiency benefits you can't achieve any other way. Since this hands-on guide utilizes the widely accessible Android Emulator, you can now learn bare-metal programming without access to the hardware itself. Ye guides you through setting up your complete development environment, and then builds your skills through several realistic projects. First, you'll construct a complete bootloader: one of the most common and useful embedded systems programming projects. Ye covers implementing U-Boot from start to finish: loading the first instruction on your target hardware platform, programming in assembly language for the ARM processor, programming in the higher level C language, adding C library support, adding hardware support, and more. As you master the workflow of an embedded systems project, you'll gain essential skills for diverse tasks ranging from error handling to integrating hardware interfaces. Then, you'll deepen your knowledge through additional real-world projects: serial ports, NAND flash devices, real time clocks, interrupt controllers, and more. These projects show how to decouple hardware interface handling tasks from other tasks associated with the software framework or OS support. They also give you deep insights into the internals of the Android emulator: insights that can help you use it far more effectively in embedded development.