J'ai écrit une solution qui impliquait OpenProcess, EnumProcessModules, GetModuleInformation et GetModuleBaseName, mais apparemment, EnumProcessModules et GetModuleBaseName n'existent pas dans Windows CE! Quelle alternative y a-t-il?WinCE: Comment puis-je déterminer le module qui contient une adresse de code?
3
A
Répondre
5
J'ai trouvé un moyen de le faire avec CreateToolhelp32Snapshot, Module32First, Module32Next, Process32First et Process32Next. Vous devez d'abord obtenir une liste de modules, puis parcourir la liste des modules pour trouver l'adresse souhaitée.
#include <Tlhelp32.h>
struct MyModuleInfo
{
BYTE* Base;
HMODULE Handle;
DWORD Size;
enum { MaxNameLen = 36 };
TCHAR Name[MaxNameLen];
};
bool GetModuleList(vector<MyModuleInfo>& moduleList)
{
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS | TH32CS_SNAPMODULE | TH32CS_GETALLMODS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE)
return false;
MODULEENTRY32 moduleInfo;
moduleInfo.dwSize = sizeof(moduleInfo);
if (Module32First(hSnapshot, &moduleInfo)) do {
MyModuleInfo myInfo;
myInfo.Handle = moduleInfo.hModule;
myInfo.Base = moduleInfo.modBaseAddr;
myInfo.Size = moduleInfo.modBaseSize;
memcpy(myInfo.Name, moduleInfo.szModule, min(sizeof(myInfo.Name), sizeof(moduleInfo.szModule)));
myInfo.Name[myInfo.MaxNameLen-1] = '\0';
moduleList.push_back(myInfo);
} while (Module32Next(hSnapshot, &moduleInfo));
// The module list obtained above only contains DLLs! To get the EXE files
// also, we must call Process32First and Process32Next in a loop.
PROCESSENTRY32 processInfo;
processInfo.dwSize = sizeof(processInfo);
if (Process32First(hSnapshot, &processInfo)) do {
MyModuleInfo myInfo;
myInfo.Handle = NULL; // No handle given
myInfo.Base = (BYTE*)processInfo.th32MemoryBase;
myInfo.Size = 0x800000; // No size provided! Allow max 8 MB
memcpy(myInfo.Name, processInfo.szExeFile, min(sizeof(myInfo.Name), sizeof(processInfo.szExeFile)));
myInfo.Name[myInfo.MaxNameLen-1] = '\0';
moduleList.push_back(myInfo);
} while(Process32Next(hSnapshot, &processInfo));
// Debug output
for (int i = 0; i < (int)moduleList.size(); i++) {
MyModuleInfo& m = moduleList[i];
TRACE(_T("%-30s: 0x%08x - 0x%08x\n"), m.Name, (DWORD)m.Base, (DWORD)m.Base + m.Size);
}
CloseToolhelp32Snapshot(hSnapshot);
return true;
}
const MyModuleInfo* GetModuleForAddress(vector<MyModuleInfo>& moduleList, void* address)
{
for (int m = 0; m < (int)moduleList.size(); m++) {
const MyModuleInfo& mInfo = moduleList[m];
if (address >= mInfo.Base && address < mInfo.Base + mInfo.Size)
return &mInfo;
}
return NULL;
}
Questions connexes
- 1. nom de la classe qui contient le code de méthode
- 2. Quel paquet Haskell contient le module
- 3. Comment obtenir le handle de module de mon propre code?
- 4. Comment déterminer si une chaîne contient une sous-chaîne spécifique
- 5. Comment trouver le composant C# qui contient une classe particulière
- 6. Comment déterminer si une adresse IP appartient à un pays
- 7. Déterminer si le module Magento est activé
- 8. Comment déterminer le sous-module SHA-1 avec gitweb?
- 9. Comment déterminer si une chaîne contient des métacaractères regex? (C#)
- 10. WinCE erreur Cabwiz: "contient inf Dirids, qui ne sont pas pris en charge"
- 11. C++: Déterminer si une variable ne contient pas de données
- 12. Variable de chaîne Javascript qui contient du code PHP
- 13. Windbg + IDA: calculer une adresse dans un module
- 14. Comment déterminer le module d'un flotteur dans Ada 95
- 15. Déterminer si l'adresse IP est une adresse IP cellulaire
- 16. jquery cacher une div qui contient flash sans le réinitialiser
- 17. McAfee supprime le code du module VBA
- 18. Déterminer l'état de MySQL avec le module DBI de Perl
- 19. Comment déterminer si une cellule de feuille de calcul contient une date ou un nombre réel?
- 20. Comment déterminer le système d'exploitation Android via le code
- 21. Request.QueryString [] qui contient '+'
- 22. comment attraper le bouton d'alimentation sur wince?
- 23. Déterminer si un mois contient des entrées
- 24. Comment obtenir une adresse IP?
- 25. Comment déclarer une variable qui contient une sous-classe d'une classe qui implémente une interface?
- 26. CreateThread WinCE
- 27. JavaScript,/jQuery déterminer si l'URL contient une mini chaîne
- 28. Comment puis-je déterminer à quelle société appartient une adresse IP?
- 29. Eviter Cette collection contient déjà une adresse avec le schéma http
- 30. Comment envoyer une adresse multiple avec MSbuild