Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(22)

Side by Side Diff: base/win/pe_image_unittest.cc

Issue 1370843003: Remove warning pragmas in pe_image.cc (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: use ScopedNativeLibrary Created 4 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/win/pe_image_test.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // This file contains unit tests for PEImage. 5 // This file contains unit tests for PEImage.
6 #include <algorithm> 6 #include <algorithm>
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/files/file_path.h" 9 #include "base/files/file_path.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
11 #include "base/scoped_native_library.h"
11 #include "base/win/pe_image.h" 12 #include "base/win/pe_image.h"
12 #include "build/build_config.h" 13 #include "build/build_config.h"
13 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
14 15
15 namespace base { 16 namespace base {
16 namespace win { 17 namespace win {
17 18
18 namespace { 19 namespace {
19 20
20 // Just counts the number of invocations. 21 // Just counts the number of invocations.
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 base::FilePath pe_image_test_path; 96 base::FilePath pe_image_test_path;
96 ASSERT_TRUE(PathService::Get(DIR_TEST_DATA, &pe_image_test_path)); 97 ASSERT_TRUE(PathService::Get(DIR_TEST_DATA, &pe_image_test_path));
97 pe_image_test_path = pe_image_test_path.Append(FILE_PATH_LITERAL("pe_image")); 98 pe_image_test_path = pe_image_test_path.Append(FILE_PATH_LITERAL("pe_image"));
98 99
99 #if defined(ARCH_CPU_64_BITS) 100 #if defined(ARCH_CPU_64_BITS)
100 pe_image_test_path = 101 pe_image_test_path =
101 pe_image_test_path.Append(FILE_PATH_LITERAL("pe_image_test_64.dll")); 102 pe_image_test_path.Append(FILE_PATH_LITERAL("pe_image_test_64.dll"));
102 const int sections = 6; 103 const int sections = 6;
103 const int imports_dlls = 2; 104 const int imports_dlls = 2;
104 const int delay_dlls = 2; 105 const int delay_dlls = 2;
105 const int exports = 2; 106 const int exports = 3;
106 const int imports = 69; 107 const int imports = 70;
107 const int delay_imports = 2; 108 const int delay_imports = 2;
108 const int relocs = 632; 109 const int relocs = 976;
109 #else 110 #else
110 pe_image_test_path = 111 pe_image_test_path =
111 pe_image_test_path.Append(FILE_PATH_LITERAL("pe_image_test_32.dll")); 112 pe_image_test_path.Append(FILE_PATH_LITERAL("pe_image_test_32.dll"));
112 const int sections = 5; 113 const int sections = 5;
113 const int imports_dlls = 2; 114 const int imports_dlls = 2;
114 const int delay_dlls = 2; 115 const int delay_dlls = 2;
115 const int exports = 2; 116 const int exports = 3;
116 const int imports = 66; 117 const int imports = 66;
117 const int delay_imports = 2; 118 const int delay_imports = 2;
118 const int relocs = 1586; 119 const int relocs = 2114;
119 #endif 120 #endif
120 121
121 HMODULE module = LoadLibrary(pe_image_test_path.value().c_str()); 122 ScopedNativeLibrary module(pe_image_test_path);
122 ASSERT_TRUE(NULL != module); 123 ASSERT_TRUE(module.is_valid());
123 124
124 PEImage pe(module); 125 PEImage pe(module.get());
125 int count = 0; 126 int count = 0;
126 EXPECT_TRUE(pe.VerifyMagic()); 127 EXPECT_TRUE(pe.VerifyMagic());
127 128
128 pe.EnumSections(SectionsCallback, &count); 129 pe.EnumSections(SectionsCallback, &count);
129 EXPECT_EQ(sections, count); 130 EXPECT_EQ(sections, count);
130 131
131 count = 0; 132 count = 0;
132 pe.EnumImportChunks(ImportChunksCallback, &count); 133 pe.EnumImportChunks(ImportChunksCallback, &count);
133 EXPECT_EQ(imports_dlls, count); 134 EXPECT_EQ(imports_dlls, count);
134 135
135 count = 0; 136 count = 0;
136 pe.EnumDelayImportChunks(DelayImportChunksCallback, &count); 137 pe.EnumDelayImportChunks(DelayImportChunksCallback, &count);
137 EXPECT_EQ(delay_dlls, count); 138 EXPECT_EQ(delay_dlls, count);
138 139
139 count = 0; 140 count = 0;
140 pe.EnumExports(ExportsCallback, &count); 141 pe.EnumExports(ExportsCallback, &count);
141 EXPECT_EQ(exports, count); 142 EXPECT_EQ(exports, count);
142 143
143 count = 0; 144 count = 0;
144 pe.EnumAllImports(ImportsCallback, &count); 145 pe.EnumAllImports(ImportsCallback, &count);
145 EXPECT_EQ(imports, count); 146 EXPECT_EQ(imports, count);
146 147
147 count = 0; 148 count = 0;
148 pe.EnumAllDelayImports(ImportsCallback, &count); 149 pe.EnumAllDelayImports(ImportsCallback, &count);
149 EXPECT_EQ(delay_imports, count); 150 EXPECT_EQ(delay_imports, count);
150 151
151 count = 0; 152 count = 0;
152 pe.EnumRelocs(RelocsCallback, &count); 153 pe.EnumRelocs(RelocsCallback, &count);
153 EXPECT_EQ(relocs, count); 154 EXPECT_EQ(relocs, count);
154
155 FreeLibrary(module);
156 } 155 }
157 156
158 // Tests that we can locate an specific exported symbol, by name and by ordinal. 157 // Tests that we can locate an specific exported symbol, by name and by ordinal.
159 TEST(PEImageTest, RetrievesExports) { 158 TEST(PEImageTest, RetrievesExports) {
160 HMODULE module = LoadLibrary(L"advapi32.dll"); 159 ScopedNativeLibrary module(FilePath(L"advapi32.dll"));
161 ASSERT_TRUE(NULL != module); 160 ASSERT_TRUE(module.is_valid());
162 161
163 PEImage pe(module); 162 PEImage pe(module.get());
164 WORD ordinal; 163 WORD ordinal;
165 164
166 EXPECT_TRUE(pe.GetProcOrdinal("RegEnumKeyExW", &ordinal)); 165 EXPECT_TRUE(pe.GetProcOrdinal("RegEnumKeyExW", &ordinal));
167 166
168 FARPROC address1 = pe.GetProcAddress("RegEnumKeyExW"); 167 FARPROC address1 = pe.GetProcAddress("RegEnumKeyExW");
169 FARPROC address2 = pe.GetProcAddress(reinterpret_cast<char*>(ordinal)); 168 FARPROC address2 = pe.GetProcAddress(reinterpret_cast<char*>(ordinal));
170 EXPECT_TRUE(address1 != NULL); 169 EXPECT_TRUE(address1 != NULL);
171 EXPECT_TRUE(address2 != NULL); 170 EXPECT_TRUE(address2 != NULL);
172 EXPECT_TRUE(address1 == address2); 171 EXPECT_TRUE(address1 == address2);
172 }
173 173
174 FreeLibrary(module); 174 // Tests that we can locate a forwarded export.
175 TEST(PEImageTest, ForwardedExport) {
176 base::FilePath pe_image_test_path;
177 ASSERT_TRUE(PathService::Get(DIR_TEST_DATA, &pe_image_test_path));
178 pe_image_test_path = pe_image_test_path.Append(FILE_PATH_LITERAL("pe_image"));
179
180 #if defined(ARCH_CPU_64_BITS)
181 pe_image_test_path =
182 pe_image_test_path.Append(FILE_PATH_LITERAL("pe_image_test_64.dll"));
183 #else
184 pe_image_test_path =
185 pe_image_test_path.Append(FILE_PATH_LITERAL("pe_image_test_32.dll"));
186 #endif
187
188 ScopedNativeLibrary module(pe_image_test_path);
189
190 ASSERT_TRUE(module.is_valid());
191
192 PEImage pe(module.get());
193
194 FARPROC addr = pe.GetProcAddress("FwdExport");
195 EXPECT_EQ(FARPROC(-1), addr);
196
197 PDWORD export_entry = pe.GetExportEntry("FwdExport");
198 EXPECT_NE(nullptr, export_entry);
199 PVOID fwd_addr = pe.RVAToAddr(*export_entry);
200 const char expected_fwd[] = "KERNEL32.CreateFileA";
201 EXPECT_STREQ(expected_fwd, reinterpret_cast<char*>(fwd_addr));
175 } 202 }
176 203
177 // Test that we can get debug id out of a module. 204 // Test that we can get debug id out of a module.
178 TEST(PEImageTest, GetDebugId) { 205 TEST(PEImageTest, GetDebugId) {
179 HMODULE module = LoadLibrary(L"advapi32.dll"); 206 ScopedNativeLibrary module(FilePath(L"advapi32.dll"));
180 ASSERT_TRUE(NULL != module); 207 ASSERT_TRUE(module.is_valid());
181 208
182 PEImage pe(module); 209 PEImage pe(module.get());
183 GUID guid = {0}; 210 GUID guid = {0};
184 DWORD age = 0; 211 DWORD age = 0;
185 EXPECT_TRUE(pe.GetDebugId(&guid, &age)); 212 EXPECT_TRUE(pe.GetDebugId(&guid, &age));
186 213
187 GUID empty_guid = {0}; 214 GUID empty_guid = {0};
188 EXPECT_TRUE(!IsEqualGUID(empty_guid, guid)); 215 EXPECT_TRUE(!IsEqualGUID(empty_guid, guid));
189 EXPECT_NE(0U, age); 216 EXPECT_NE(0U, age);
190 FreeLibrary(module);
191 } 217 }
192 218
193 } // namespace win 219 } // namespace win
194 } // namespace base 220 } // namespace base
OLDNEW
« no previous file with comments | « base/win/pe_image_test.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698