Added libdisasm to the repository. This library is no longer under development so there
is no reason not to keep it locally. Implemented a basic disassembler which can be used
to scan bytecode for interesting conditions. This should be pretty easy to add to for
things other than exploitability if there is a desire. This also adds several tests to
the windows exploitability ranking code to take advantage of the disassembler for x86
code.

BUG=None
TEST=DisassemblerX86Test.*

Review URL: http://breakpad.appspot.com/203001

git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@705 4c0a9323-5329-0410-9bdc-e9ce6186880e
diff --git a/Makefile.am b/Makefile.am
index 0703d78..ce2c18b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -49,6 +49,7 @@
 
 
 ## Libraries
+noinst_LTLIBRARIES = src/third_party/libdisasm/libdisasm.la
 lib_LTLIBRARIES = src/libbreakpad.la
 
 if LINUX_HOST
@@ -100,6 +101,8 @@
 	src/processor/cfi_frame_info.h \
 	src/processor/contained_range_map-inl.h \
 	src/processor/contained_range_map.h \
+	src/processor/disassembler_x86.h \
+	src/processor/disassembler_x86.cc \
 	src/processor/exploitability.cc \
 	src/processor/exploitability_win.h \
 	src/processor/exploitability_win.cc \
@@ -143,6 +146,37 @@
 	src/processor/udp_network.cc \
 	src/processor/udp_network.h
 
+src_libbreakpad_la_LDFLAGS = -W1,-static
+
+src_libbreakpad_la_LIBADD = src/third_party/libdisasm/libdisasm.la
+
+src_third_party_libdisasm_libdisasm_la_SOURCES = \
+	src/third_party/libdisasm/ia32_implicit.c \
+	src/third_party/libdisasm/ia32_implicit.h \
+	src/third_party/libdisasm/ia32_insn.c \
+	src/third_party/libdisasm/ia32_insn.h \
+	src/third_party/libdisasm/ia32_invariant.c \
+	src/third_party/libdisasm/ia32_invariant.h \
+	src/third_party/libdisasm/ia32_modrm.c \
+	src/third_party/libdisasm/ia32_modrm.h \
+	src/third_party/libdisasm/ia32_opcode_tables.c \
+	src/third_party/libdisasm/ia32_opcode_tables.h \
+	src/third_party/libdisasm/ia32_operand.c \
+	src/third_party/libdisasm/ia32_operand.h \
+	src/third_party/libdisasm/ia32_reg.c \
+	src/third_party/libdisasm/ia32_reg.h \
+	src/third_party/libdisasm/ia32_settings.c \
+	src/third_party/libdisasm/ia32_settings.h \
+	src/third_party/libdisasm/libdis.h \
+	src/third_party/libdisasm/qword.h \
+	src/third_party/libdisasm/x86_disasm.c \
+	src/third_party/libdisasm/x86_format.c \
+	src/third_party/libdisasm/x86_imm.c \
+	src/third_party/libdisasm/x86_imm.h \
+	src/third_party/libdisasm/x86_insn.c \
+	src/third_party/libdisasm/x86_misc.c \
+	src/third_party/libdisasm/x86_operand_list.c \
+ 	src/third_party/libdisasm/x86_operand_list.h
 
 ## Programs
 bin_PROGRAMS = \
@@ -163,6 +197,8 @@
 	src/processor/basic_source_line_resolver_unittest \
 	src/processor/cfi_frame_info_unittest \
 	src/processor/contained_range_map_unittest \
+	src/processor/disassembler_x86_unittest \
+	src/processor/exploitability_unittest \
 	src/processor/minidump_processor_unittest \
 	src/processor/minidump_unittest \
 	src/processor/network_source_line_resolver_unittest \
@@ -296,6 +332,54 @@
 	src/processor/logging.lo \
 	src/processor/pathname_stripper.lo
 
+src_processor_exploitability_unittest_SOURCES = \
+	src/processor/exploitability_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/gtest/src/gtest_main.cc \
+	src/testing/src/gmock-all.cc
+src_processor_exploitability_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/testing/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest \
+	-I$(top_srcdir)/src/testing
+src_processor_exploitability_unittest_LDADD = \
+	src/processor/minidump_processor.lo \
+	src/processor/process_state.lo \
+	src/processor/disassembler_x86.lo \
+	src/processor/exploitability.lo \
+	src/processor/exploitability_win.lo \
+	src/processor/basic_code_modules.lo \
+	src/processor/basic_source_line_resolver.lo \
+	src/processor/call_stack.lo \
+	src/processor/cfi_frame_info.lo \
+	src/processor/logging.lo \
+	src/processor/minidump.lo \
+	src/processor/pathname_stripper.lo \
+	src/processor/stackwalker.lo \
+	src/processor/stackwalker_amd64.lo \
+	src/processor/stackwalker_arm.lo \
+	src/processor/stackwalker_ppc.lo \
+	src/processor/stackwalker_sparc.lo \
+	src/processor/stackwalker_x86.lo \
+	src/processor/tokenize.lo \
+	src/third_party/libdisasm/libdisasm.la
+
+src_processor_disassembler_x86_unittest_SOURCES = \
+	src/processor/disassembler_x86_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/gtest/src/gtest_main.cc \
+	src/testing/src/gmock-all.cc
+src_processor_disassembler_x86_unittest_CPPFLAGS = \
+	-I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/testing/include \
+	-I$(top_srcdir)/src/testing/gtest/include \
+	-I$(top_srcdir)/src/testing/gtest \
+	-I$(top_srcdir)/src/testing
+src_processor_disassembler_x86_unittest_LDADD = \
+	src/processor/disassembler_x86.lo \
+ 	src/third_party/libdisasm/libdisasm.la
+
 src_processor_minidump_processor_unittest_SOURCES = \
 	src/processor/minidump_processor_unittest.cc \
 	src/testing/gtest/src/gtest-all.cc \
@@ -311,6 +395,7 @@
 	src/processor/basic_source_line_resolver.lo \
 	src/processor/call_stack.lo \
 	src/processor/cfi_frame_info.lo \
+	src/processor/disassembler_x86.lo \
 	src/processor/exploitability.lo \
 	src/processor/exploitability_win.lo \
 	src/processor/logging.lo \
@@ -324,7 +409,8 @@
 	src/processor/stackwalker_ppc.lo \
 	src/processor/stackwalker_sparc.lo \
 	src/processor/stackwalker_x86.lo \
-	src/processor/tokenize.lo
+	src/processor/tokenize.lo \
+	src/third_party/libdisasm/libdisasm.la
 
 src_processor_minidump_unittest_SOURCES = \
 	src/common/test_assembler.cc \
@@ -381,6 +467,7 @@
 	src/processor/binarystream.lo \
 	src/processor/call_stack.lo \
 	src/processor/cfi_frame_info.lo \
+	src/processor/disassembler_x86.lo \
 	src/processor/exploitability.lo \
 	src/processor/exploitability_win.lo \
 	src/processor/logging.lo \
@@ -398,7 +485,8 @@
 	src/processor/stackwalker_sparc.lo \
 	src/processor/stackwalker_x86.lo \
 	src/processor/tokenize.lo \
-	src/processor/udp_network.lo
+	src/processor/udp_network.lo \
+	src/third_party/libdisasm/libdisasm.la
 
 src_processor_network_source_line_server_unittest_SOURCES = \
 	src/processor/network_source_line_server_unittest.cc \
@@ -455,6 +543,7 @@
 	src/processor/basic_code_modules.lo \
 	src/processor/basic_source_line_resolver.lo \
 	src/processor/call_stack.lo \
+	src/processor/disassembler_x86.lo \
 	src/processor/exploitability.lo \
 	src/processor/exploitability_win.lo \
 	src/processor/logging.lo \
@@ -563,6 +652,7 @@
 	src/processor/binarystream.lo \
 	src/processor/call_stack.lo \
 	src/processor/cfi_frame_info.lo \
+	src/processor/disassembler_x86.lo \
 	src/processor/exploitability.lo \
 	src/processor/exploitability_win.lo \
 	src/processor/logging.lo \
@@ -579,7 +669,8 @@
 	src/processor/stackwalker_sparc.lo \
 	src/processor/stackwalker_x86.lo \
 	src/processor/tokenize.lo \
-	src/processor/udp_network.lo
+	src/processor/udp_network.lo \
+	src/third_party/libdisasm/libdisasm.la
 
 src_processor_source_daemon_SOURCES = \
 	src/processor/source_daemon.cc