Index: src/processor/exploitability_unittest.cc |
diff --git a/src/processor/exploitability_unittest.cc b/src/processor/exploitability_unittest.cc |
index ec845bf025b6b6165764b4912f91512ecb082a76..502edcc79504a48193d08402570eae65700294ce 100644 |
--- a/src/processor/exploitability_unittest.cc |
+++ b/src/processor/exploitability_unittest.cc |
@@ -47,9 +47,10 @@ namespace google_breakpad { |
class ExploitabilityLinuxTest : public ExploitabilityLinux { |
public: |
+ using ExploitabilityLinux::CalculateAddress; |
using ExploitabilityLinux::DisassembleBytes; |
+ using ExploitabilityLinux::GetObjdumpInstructionLine; |
using ExploitabilityLinux::TokenizeObjdumpInstruction; |
- using ExploitabilityLinux::CalculateAddress; |
}; |
class ExploitabilityLinuxTestMinidumpContext : public MinidumpContext { |
@@ -200,6 +201,48 @@ TEST(ExploitabilityLinuxUtilsTest, DisassembleBytesTest) { |
ASSERT_EQ(line, " 0:\tc7 00 05 00 00 00 \tmov DWORD PTR [rax],0x5"); |
} |
+TEST(ExploitabilityLinuxUtilsTest, GetObjdumpInstructionLine) { |
+ string disassebly = |
+ "\n" |
+ "/tmp/breakpad_mem_region-raw_bytes-tMmMo0: file format binary\n" |
+ "// Trying to confuse the parser 0:\n" |
+ "\n" |
+ "Disassembly of section .data:\n" |
+ "\n" |
+ "0000000000000000 <.data>:\n" |
+ " 0:\tc7 00 01 00 00 00 \tmov DWORD PTR [rax],0x1\n" |
+ " 6:\t5d \tpop rbp\n" |
+ " 7:\tc3 \tret \n" |
+ " 8:\t55 \tpush rbp\n" |
+ " 9:\t48 89 e5 \tmov rbp,rsp\n" |
+ " c:\t53 \tpush rbx\n" |
+ " d:\t48 \trex.W\n" |
+ " e:\t81 \t.byte 0x81\n"; |
+ string line; |
+ EXPECT_TRUE(ExploitabilityLinuxTest::GetObjdumpInstructionLine( |
+ disassebly.c_str(), &line)); |
+ EXPECT_EQ(" 0:\tc7 00 01 00 00 00 \tmov DWORD PTR [rax],0x1", line); |
+ |
+ // There is no "0:" after "<.data>:". Expected to return false. |
+ disassebly = |
+ "\n" |
+ "/tmp/breakpad_mem_region-raw_bytes-tMmMo0: file format binary\n" |
+ "// Trying to confuse the parser 0:\n" |
+ "\n" |
+ "Disassembly of section .data:\n" |
+ "\n" |
+ " 0:\tc7 00 01 00 00 00 \tmov DWORD PTR [rax],0x1\n" |
+ " 6:\t5d \tpop rbp\n" |
+ " 7:\tc3 \tret \n" |
+ " 8:\t55 \tpush rbp\n" |
+ " 9:\t48 89 e5 \tmov rbp,rsp\n" |
+ " d:\t48 \trex.W\n" |
+ "0000000000000000 <.data>:\n" |
+ " c:\t53 \tpush rbx\n"; |
+ EXPECT_FALSE(ExploitabilityLinuxTest::GetObjdumpInstructionLine( |
+ disassebly.c_str(), &line)); |
+} |
+ |
TEST(ExploitabilityLinuxUtilsTest, TokenizeObjdumpInstructionTest) { |
ASSERT_FALSE(ExploitabilityLinuxTest::TokenizeObjdumpInstruction("", |
NULL, |