NO STARCH PRESS
"the finest in geek entertainment"™
Home  | Catalog  | Blog  | Media  | Buy  | About  | Cart


book main | contents | reviews | updates

Page 31:
In function attach(): remove the self.run()

Page 31:
In function "open_process" the parameters need to be flipped so that it reads like this: "kernel32.OpenProcess( PROCESS_ALL_ACCESS, False, pid)

Page 37:
In function enumerate_threads(): the following two lines need to be indented BACK to be in line with the "while success:" line

kernel32.CloseHandle(snapshot)
return thread_list

Page 37:
The declaration "def get_thread_context( self, thread_id ):" needs to be changed to "def get_thread_context( self,thread_id=None, h_thread=None)"

Page 42:
In function get_debug_event() the line that reads: "self.context = self.get_thread_context(self.h_thread)" needs to be changed to "self.context = self.get_thread_context(h_thread=self.h_thread)"

Page 42:
In function get_debug_event(): all the lines from "if exception == EXCEPTION_ACCESS_VIOLATION:" to "print "Single Stepping"" need to be indented IN so they are inside the "if debug_event.dwDebugEventCode == EXCEPTION_DEBUG_EVENT:"

Page 42:
In function get_debug_event(): all instances of "ec" variable should be changed to "exception"

Page 42:
The function declaration "def exception_handler_breakpoint()" needs to include the "self" parameter, like so: "def exception_handler_breakpoint(self)"

Page 44:
The function bp_set(), the line "self.breakpoints[address] = (address,original_byte) needs to be changed to "self.breakpoints[address] = (original_byte)

Page 48:
In function bp_set_hw() the lines starting at "if available == 0:" and ending at "kernel32.SetThreadContext( h_thread, byref(context))" need to be indented IN so that they are inside the preceding "for thread_id in self.enumerate_threads():" loop


book main | contents | reviews | updates



Copyright 2010 by No Starch Press