| 90 | } |
| 91 | |
| 92 | BOOLEAN |
| 93 | WINAPI |
| 94 | GetSymbol( |
| 95 | IN ULONG64 ImageBase |
| 96 | ) |
| 97 | { |
| 98 | PIMAGE_DEBUG_DIRECTORY DebugDirectory = NULL; |
| 99 | ULONG DirectorySize = 0; |
| 100 | PDBINFO PDB = { 0 }; |
| 101 | |
| 102 | CHAR PDBGUID[64] = { 0 }; |
| 103 | CHAR SymURL[128] = { 0 }; |
| 104 | CHAR SymPath[128] = { 0 }; |
| 105 | |
| 106 | FILE* File; |
| 107 | |
| 108 | if (ImageBase) |
| 109 | { |
| 110 | DebugDirectory = (PIMAGE_DEBUG_DIRECTORY)ImageDirectoryEntryToData( |
| 111 | (PVOID)ImageBase, |
| 112 | FALSE, |
| 113 | IMAGE_DIRECTORY_ENTRY_DEBUG, |
| 114 | &DirectorySize |
| 115 | ); |
| 116 | |
| 117 | RtlCopyMemory(&PDB, (PCHAR)ImageBase + DebugDirectory->PointerToRawData, sizeof(PDB)); |
| 118 | |
| 119 | sprintf_s( |
| 120 | PDBGUID, 64, "%08X%04X%04X%02X%02X%02X%02X%02X%02X%02X%02X%X", |
| 121 | PDB.UID.Data1, PDB.UID.Data2, PDB.UID.Data3, |
| 122 | PDB.UID.Data4[0], PDB.UID.Data4[1], PDB.UID.Data4[2], |
| 123 | PDB.UID.Data4[3], PDB.UID.Data4[4], PDB.UID.Data4[5], |
| 124 | PDB.UID.Data4[6], PDB.UID.Data4[7], PDB.Age |
| 125 | ); |
| 126 | |
| 127 | sprintf_s( |
| 128 | SymURL, 128, "%s/%s/%s/%s", |
| 129 | "/download/symbols", |
| 130 | PDB.PDBFileName, PDBGUID, PDB.PDBFileName |
| 131 | ); |
| 132 | |
| 133 | sprintf_s( |
| 134 | SymPath, 128, "%s%s", |
| 135 | "D:\\", PDB.PDBFileName |
| 136 | ); |
| 137 | |
| 138 | /*File = fopen(SymPath, "wb+"); |
| 139 | if (File) { |
| 140 | fclose(File); |
| 141 | return TRUE; |
| 142 | }*/ |
| 143 | if (DownloadSymbol(SymURL, SymPath)) { |
| 144 | return TRUE; |
| 145 | } |
| 146 | } |
| 147 | return FALSE; |
| 148 | } |
| 149 |
no test coverage detected