Index: courgette/rel32_finder_x64_unittest.cc |
diff --git a/courgette/rel32_finder_win32_x86_unittest.cc b/courgette/rel32_finder_x64_unittest.cc |
similarity index 79% |
copy from courgette/rel32_finder_win32_x86_unittest.cc |
copy to courgette/rel32_finder_x64_unittest.cc |
index 496f0b94bb249bb837bad08f0ca3bcbc9e4a8272..83122e648579608d786f72cde28b6677f84ad063 100644 |
--- a/courgette/rel32_finder_win32_x86_unittest.cc |
+++ b/courgette/rel32_finder_x64_unittest.cc |
@@ -1,8 +1,8 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "courgette/rel32_finder_win32_x86.h" |
+#include "courgette/rel32_finder_x64.h" |
#include <stddef.h> |
#include <stdint.h> |
@@ -20,10 +20,10 @@ namespace courgette { |
namespace { |
-// Helper class to load and execute a Rel32FinderWin32X86 test case. |
-class Rel32FinderWin32X86TestCase { |
+// Helper class to load and execute a Rel32FinderX64 test case. |
huangs
2016/05/26 18:34:34
There's a lot of duplicate code with rel32_finder_
etiennep
2016/05/26 20:50:10
Done.
|
+class Rel32FinderX64TestCase { |
public: |
- Rel32FinderWin32X86TestCase(const std::string& test_data) |
+ Rel32FinderX64TestCase(const std::string& test_data) |
: text_start_rva_(0), |
text_end_rva_(0), |
relocs_start_rva_(0), |
@@ -33,10 +33,11 @@ class Rel32FinderWin32X86TestCase { |
} |
void RunTestBasic(std::string name) { |
- Rel32FinderWin32X86_Basic finder(relocs_start_rva_, relocs_end_rva_); |
+ Rel32FinderX64 finder(relocs_start_rva_, relocs_end_rva_); |
ASSERT_FALSE(text_data_.empty()); |
finder.Find(&text_data_[0], &text_data_[0] + text_data_.size(), |
- text_start_rva_, text_end_rva_, abs32_locations_); |
+ text_start_rva_, text_end_rva_, image_end_rva_, |
+ abs32_locations_); |
std::vector<RVA> rel32_locations; |
finder.SwapRel32Locations(&rel32_locations); |
EXPECT_EQ(expected_rel32_locations_, rel32_locations) |
@@ -83,7 +84,7 @@ class Rel32FinderWin32X86TestCase { |
} |
// Initializes the test case by parsing the multi-line string |test_data| |
- // to extract Rel32FinderWin32X86 parameters, and read expected values. |
+ // to extract Rel32FinderX64 parameters, and read expected values. |
void LoadTestFromString(const std::string& test_data) { |
// The first lines (ignoring empty ones) specify RVA bounds. |
std::istringstream iss(test_data); |
@@ -98,19 +99,22 @@ class Rel32FinderWin32X86TestCase { |
// formatted in "DUMPBIN /DISASM" style, i.e., |
// "00401003: E8 00 00 00 00 call 00401008" |
// ^ ^ ^ ^ ^ ^ |
- // We extract up to 6 bytes per line. The remaining are ignored. |
+ // We extract up to 7 bytes per line. The remaining are ignored. |
huangs
2016/05/26 18:34:34
Keep it at 6; you can wrap instruction to next lin
etiennep
2016/05/26 20:50:10
Done.
|
const int kBytesBegin = 12; |
- const int kBytesEnd = 17; |
+ const int kBytesEnd = 22; |
ReadNonEmptyLine(iss, &line); |
ASSERT_EQ("Program:", line); |
while (ReadNonEmptyLine(iss, &line) && line != "Abs32:") { |
std::string toks = line.substr(kBytesBegin, kBytesEnd); |
- uint32_t vals[6]; |
- int num_read = sscanf(toks.c_str(), "%X %X %X %X %X %X", &vals[0], |
- &vals[1], &vals[2], &vals[3], &vals[4], &vals[5]); |
+ uint32_t vals[7]; |
+ int num_read = |
+ sscanf(toks.c_str(), "%X %X %X %X %X %X %X", &vals[0], &vals[1], |
+ &vals[2], &vals[3], &vals[4], &vals[5], &vals[6]); |
+ |
for (int i = 0; i < num_read; ++i) |
text_data_.push_back(static_cast<uint8_t>(vals[i] & 0xFF)); |
} |
+ |
ASSERT_FALSE(text_data_.empty()); |
// The Abs32 section specifies hex RVAs, one per line. |
@@ -131,19 +135,18 @@ class Rel32FinderWin32X86TestCase { |
} |
}; |
-class Rel32FinderWin32X86Test : public BaseTest { |
+class Rel32FinderX64Test : public BaseTest { |
public: |
void RunTest(const char* test_case_file) { |
- Rel32FinderWin32X86TestCase test_case(FileContents(test_case_file)); |
+ Rel32FinderX64TestCase test_case(FileContents(test_case_file)); |
test_case.RunTestBasic(test_case_file); |
} |
}; |
-TEST_F(Rel32FinderWin32X86Test, TestBasic) { |
- RunTest("rel32_win32_x86_01.txt"); |
- RunTest("rel32_win32_x86_02.txt"); |
- RunTest("rel32_win32_x86_03.txt"); |
- RunTest("rel32_win32_x86_04.txt"); |
+TEST_F(Rel32FinderX64Test, TestBasic) { |
+ RunTest("rel32_x64_01.txt"); |
+ RunTest("rel32_x64_02.txt"); |
+ RunTest("rel32_x64_03.txt"); |
} |
} // namespace |