forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update Crashpad to 4794225f22583a08732cb9ad4356106013a220f3
a4f3761de2de Switch to Gerrit for code review 2e448328500f Remove CC_LIST from codereview.settings 4794225f2258 Adding an API to read module annotations in snapshot.gyp BUG= Review URL: https://codereview.chromium.org/1597353004 Cr-Commit-Position: refs/heads/master@{#370053}
- Loading branch information
Showing
14 changed files
with
280 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
53 changes: 53 additions & 0 deletions
53
third_party/crashpad/crashpad/snapshot/api/module_annotations_win.cc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
// Copyright 2016 The Crashpad Authors. All rights reserved. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
#include "snapshot/api/module_annotations_win.h" | ||
|
||
#include "snapshot/win/pe_image_annotations_reader.h" | ||
#include "snapshot/win/pe_image_reader.h" | ||
#include "snapshot/win/process_reader_win.h" | ||
#include "util/win/get_module_information.h" | ||
|
||
namespace crashpad { | ||
|
||
bool ReadModuleAnnotations(HANDLE process, | ||
HMODULE module, | ||
std::map<std::string, std::string>* annotations) { | ||
ProcessReaderWin process_reader; | ||
if (!process_reader.Initialize(process, ProcessSuspensionState::kRunning)) | ||
return false; | ||
|
||
MODULEINFO module_info; | ||
if (!CrashpadGetModuleInformation( | ||
process, module, &module_info, sizeof(module_info))) { | ||
PLOG(ERROR) << "CrashpadGetModuleInformation"; | ||
return false; | ||
} | ||
|
||
PEImageReader image_reader; | ||
if (!image_reader.Initialize( | ||
&process_reader, | ||
reinterpret_cast<crashpad::WinVMAddress>(module_info.lpBaseOfDll), | ||
module_info.SizeOfImage, | ||
"")) | ||
return false; | ||
|
||
PEImageAnnotationsReader annotations_reader( | ||
&process_reader, &image_reader, L""); | ||
|
||
*annotations = annotations_reader.SimpleMap(); | ||
return true; | ||
} | ||
|
||
} // namespace crashpad |
42 changes: 42 additions & 0 deletions
42
third_party/crashpad/crashpad/snapshot/api/module_annotations_win.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
// Copyright 2016 The Crashpad Authors. All rights reserved. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
#ifndef CRASHPAD_SNAPSHOT_API_MODULE_ANNOTATIONS_WIN_H_ | ||
#define CRASHPAD_SNAPSHOT_API_MODULE_ANNOTATIONS_WIN_H_ | ||
|
||
#include <windows.h> | ||
|
||
#include <map> | ||
#include <string> | ||
|
||
namespace crashpad { | ||
|
||
//! \brief Reads the module annotations from another process. | ||
//! | ||
//! \param[in] process The handle to the process that hosts the \a module. | ||
//! Requires PROCESS_QUERY_INFORMATION and PROCESS_VM_READ accesses. | ||
//! \param[in] module The handle to the module from which the \a annotations | ||
//! will be read. This module should be loaded in the target process. | ||
//! \param[out] annotations The map that will be filled with the annotations. | ||
//! Remains unchanged if the function returns 'false'. | ||
//! | ||
//! \return `true` if the annotations could be read succesfully, even if the | ||
//! module doesn't contain any annotations. | ||
bool ReadModuleAnnotations(HANDLE process, | ||
HMODULE module, | ||
std::map<std::string, std::string>* annotations); | ||
|
||
} // namespace crashpad | ||
|
||
#endif // CRASHPAD_SNAPSHOT_API_MODULE_ANNOTATIONS_WIN_H_ |
83 changes: 83 additions & 0 deletions
83
third_party/crashpad/crashpad/snapshot/api/module_annotations_win_test.cc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
// Copyright 2016 The Crashpad Authors. All rights reserved. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
#include "snapshot/api/module_annotations_win.h" | ||
|
||
#include "client/crashpad_info.h" | ||
#include "gtest/gtest.h" | ||
#include "test/win/win_multiprocess.h" | ||
#include "util/file/file_io.h" | ||
|
||
namespace crashpad { | ||
namespace test { | ||
namespace { | ||
|
||
class ModuleAnnotationsMultiprocessTest final : public WinMultiprocess { | ||
private: | ||
void WinMultiprocessParent() override { | ||
// Read the child executable module. | ||
HMODULE module = nullptr; | ||
CheckedReadFile(ReadPipeHandle(), &module, sizeof(module)); | ||
|
||
// Reopen the child process with necessary access. | ||
HANDLE process_handle = | ||
OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, | ||
FALSE, | ||
GetProcessId(ChildProcess())); | ||
EXPECT_TRUE(process_handle); | ||
|
||
// Read the module annotations in the child process and verify them. | ||
std::map<std::string, std::string> annotations; | ||
ASSERT_TRUE(ReadModuleAnnotations(process_handle, module, &annotations)); | ||
|
||
EXPECT_GE(annotations.size(), 3u); | ||
EXPECT_EQ("value", annotations["#APITEST# key"]); | ||
EXPECT_EQ("y", annotations["#APITEST# x"]); | ||
EXPECT_EQ("", annotations["#APITEST# empty_value"]); | ||
|
||
// Signal the child process to terminate. | ||
char c = ' '; | ||
CheckedWriteFile(WritePipeHandle(), &c, sizeof(c)); | ||
} | ||
|
||
void WinMultiprocessChild() override { | ||
// Set some test annotations. | ||
crashpad::CrashpadInfo* crashpad_info = | ||
crashpad::CrashpadInfo::GetCrashpadInfo(); | ||
|
||
crashpad::SimpleStringDictionary* simple_annotations = | ||
new crashpad::SimpleStringDictionary(); | ||
simple_annotations->SetKeyValue("#APITEST# key", "value"); | ||
simple_annotations->SetKeyValue("#APITEST# x", "y"); | ||
simple_annotations->SetKeyValue("#APITEST# empty_value", ""); | ||
|
||
crashpad_info->set_simple_annotations(simple_annotations); | ||
|
||
// Send the executable module. | ||
HMODULE module = GetModuleHandle(nullptr); | ||
CheckedWriteFile(WritePipeHandle(), &module, sizeof(module)); | ||
|
||
// Wait until a signal from the parent process to terminate. | ||
char c; | ||
CheckedReadFile(ReadPipeHandle(), &c, sizeof(c)); | ||
} | ||
}; | ||
|
||
TEST(ModuleAnnotationsWin, ReadAnnotations) { | ||
WinMultiprocess::Run<ModuleAnnotationsMultiprocessTest>(); | ||
} | ||
|
||
} // namespace | ||
} // namespace test | ||
} // namespace crashpad |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
30 changes: 30 additions & 0 deletions
30
third_party/crashpad/crashpad/util/win/get_module_information.cc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
// Copyright 2016 The Crashpad Authors. All rights reserved. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
#include "util/win/get_module_information.h" | ||
|
||
#include "util/win/get_function.h" | ||
|
||
namespace crashpad { | ||
|
||
BOOL CrashpadGetModuleInformation(HANDLE process, | ||
HMODULE module, | ||
MODULEINFO* module_info, | ||
DWORD cb) { | ||
static const auto get_module_information = | ||
GET_FUNCTION_REQUIRED(L"psapi.dll", GetModuleInformation); | ||
return get_module_information(process, module, module_info, cb); | ||
} | ||
|
||
} // namespace crashpad |
33 changes: 33 additions & 0 deletions
33
third_party/crashpad/crashpad/util/win/get_module_information.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
// Copyright 2016 The Crashpad Authors. All rights reserved. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
#ifndef CRASHPAD_UTIL_WIN_GET_MODULE_INFORMATION_H_ | ||
#define CRASHPAD_UTIL_WIN_GET_MODULE_INFORMATION_H_ | ||
|
||
#include <windows.h> | ||
|
||
#define PSAPI_VERSION 1 | ||
#include <psapi.h> | ||
|
||
namespace crashpad { | ||
|
||
//! \brief Proxy function for `GetModuleInformation()`. | ||
BOOL CrashpadGetModuleInformation(HANDLE process, | ||
HMODULE module, | ||
MODULEINFO* module_info, | ||
DWORD cb); | ||
|
||
} // namespace crashpad | ||
|
||
#endif // CRASHPAD_UTIL_WIN_GET_MODULE_INFORMATION_H_ |