Index: experimental/windows_debugger/debugger/base/debug_utils.cpp |
diff --git a/experimental/windows_debugger/debugger/base/debug_utils.cpp b/experimental/windows_debugger/debugger/base/debug_utils.cpp |
deleted file mode 100644 |
index 775a5bda2be5960b69b790d666b0fb32cc84fcb7..0000000000000000000000000000000000000000 |
--- a/experimental/windows_debugger/debugger/base/debug_utils.cpp |
+++ /dev/null |
@@ -1,139 +0,0 @@ |
-#include "debugger/base/debug_utils.h" |
- |
-namespace { |
-HMODULE sm_LoadNTDLLFunctions(); |
-typedef NTSTATUS (NTAPI *pfnNtQueryInformationProcess)( |
- IN HANDLE ProcessHandle, |
- IN PROCESSINFOCLASS ProcessInformationClass, |
- OUT PVOID ProcessInformation, |
- IN ULONG ProcessInformationLength, |
- OUT PULONG ReturnLength OPTIONAL |
- ); |
-pfnNtQueryInformationProcess gNtQueryInformationProcess = 0; |
-} |
- |
-namespace debug { |
-bool Utils::GetProcessCmdLine(HANDLE ProcessHandle, std::string* cmd_line) { |
- if (!gNtQueryInformationProcess) |
- sm_LoadNTDLLFunctions(); |
- |
- if (gNtQueryInformationProcess) { |
- PROCESS_BASIC_INFORMATION pbi; |
- memset(&pbi, 0, sizeof(pbi)); |
- ULONG ReturnLength = 0; |
- NTSTATUS st = (*gNtQueryInformationProcess)(ProcessHandle, ProcessBasicInformation, &pbi, sizeof(pbi), &ReturnLength); |
- |
- PEB* peb_addr = (PEB*)pbi.PebBaseAddress; |
- PEB peb; |
- memset(&peb, 0, sizeof(peb)); |
- |
- SIZE_T sz = 0; |
- if (!::ReadProcessMemory(ProcessHandle, peb_addr, &peb, sizeof(peb), &sz)) |
- return false; |
- |
-#ifdef _WIN64 |
- RTL_USER_PROCESS_PARAMETERS* proc_params_addr = peb.ProcessParameters; |
- RTL_USER_PROCESS_PARAMETERS proc_params; |
- memset(&proc_params, 0, sizeof(proc_params)); |
- if (!::ReadProcessMemory(ProcessHandle, proc_params_addr, &proc_params, sizeof(proc_params), &sz)) |
- return false; |
- |
- *cmd_line = ReadUNICODE_STRING(ProcessHandle, proc_params.CommandLine); |
- return true; |
-#endif |
- } |
- return false; |
-} |
- |
-std::string Utils::ReadUNICODE_STRING(HANDLE ProcessHandle, const UNICODE_STRING& str) { |
- std::string result; |
- if (str.Length > 0) { |
- size_t len_in_bytes = 2 * (str.Length + 1); |
- wchar_t* w_str = (wchar_t*)malloc(len_in_bytes); |
- char* a_str = (char*)malloc(str.Length + 1); |
- if ((NULL != w_str) && (NULL != a_str)) { |
- SIZE_T sz = 0; |
- if (::ReadProcessMemory(ProcessHandle, str.Buffer, w_str, len_in_bytes, &sz)) { |
- |
- ::WideCharToMultiByte(CP_ACP, 0, w_str, -1, a_str, str.Length, 0, 0); |
- a_str[str.Length] = 0; |
- result = a_str; |
- } |
- free(w_str); |
- free(a_str); |
- } |
- } |
- return result; |
-} |
- |
-bool Utils::ReadUnucodeStr(HANDLE ProcessHandle, const void* addr_addr, std::string* str) { |
- void* addr = 0; |
- SIZE_T sz = 0; |
- ::ReadProcessMemory(ProcessHandle, addr_addr, &addr, sizeof(addr), &sz); |
- if (sz == 0) |
- return false; |
- |
- char utmp[4096]; |
- ::ReadProcessMemory(ProcessHandle, addr, &utmp, sizeof(utmp), &sz); |
- if (sz == 0) |
- return false; |
- |
- char* a_str = (char*)malloc(sz + 1); |
- a_str[0] = 0; |
- ::WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)utmp, -1, a_str, sz/2, 0, 0); |
- |
- *str = a_str; |
- delete a_str; |
- return true; |
-} |
- |
-int Utils::GetProcessorWordSizeInBits(HANDLE h) { |
- BOOL is_wow = FALSE; |
- if (!::IsWow64Process(h, &is_wow)) |
- return 0; |
- if (is_wow) |
- return 32; |
-#ifdef _WIN64 |
- return 64; |
-#else |
- return 32; |
-#endif |
- return 0; |
-} |
- |
-bool Utils::GetProcessName(int pid, std::string* name) { |
- HANDLE h_snapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); |
- if (INVALID_HANDLE_VALUE == h_snapshot) |
- return false; |
- |
- PROCESSENTRY32 pe = { 0 }; |
- pe.dwSize = sizeof(PROCESSENTRY32); |
- |
- bool found = false; |
- if (::Process32First(h_snapshot, &pe)) { |
- do { |
- if (pe.th32ProcessID == pid) { |
- *name = pe.szExeFile; |
- found = true; |
- } |
- } while (::Process32Next(h_snapshot, &pe)); |
- } |
- ::CloseHandle(h_snapshot); |
- return found; |
-} |
-} // namespace debug |
- |
-namespace { |
-HMODULE sm_LoadNTDLLFunctions() { |
- HMODULE hNtDll = LoadLibrary("ntdll.dll"); |
- if(hNtDll == NULL) return NULL; |
- |
- gNtQueryInformationProcess = (pfnNtQueryInformationProcess)GetProcAddress(hNtDll, |
- "NtQueryInformationProcess"); |
- if(gNtQueryInformationProcess == NULL) { |
- FreeLibrary(hNtDll); |
- return NULL; |
- } |
- return hNtDll; |
-} |
-} // namespace |