Remplacer GetProcAddress [Résolu]

Signaler
Messages postés
76
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
22 décembre 2012
-
Messages postés
76
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
22 décembre 2012
-
Bonjour,

Sauriez vous s'il existe un équivalent à GetProcAddress ?

Merci

7 réponses

Messages postés
76
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
22 décembre 2012

Merci rt15
j'ai trouvé se que je cherchais je poste si sa intéresse quelqu'un

LPVOID _stdcall _getprocaddress(HMODULE hmod, PCHAR func)
{
PIMAGE_DOS_HEADER dos_header;
PIMAGE_NT_HEADERS nt_headers;
PIMAGE_EXPORT_DIRECTORY exports;
PDWORD functions;
PSHORT ords;
PDWORD names;

if (!IsBadReadPtr(hmod, sizeof(IMAGE_DOS_HEADER)))
{
dos_header = (PIMAGE_DOS_HEADER)hmod;
if (dos_header->e_magic == IMAGE_DOS_SIGNATURE)
{
nt_headers = (PIMAGE_NT_HEADERS)((PCHAR)hmod + dos_header->e_lfanew);
if (!IsBadReadPtr(nt_headers, sizeof(IMAGE_NT_HEADERS)))
{
if (nt_headers->Signature == IMAGE_NT_SIGNATURE)
{
exports = (PIMAGE_EXPORT_DIRECTORY)((PCHAR)hmod + nt_headers->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
if (!IsBadReadPtr(exports, sizeof(IMAGE_EXPORT_DIRECTORY)))
{
functions = (PDWORD)((PCHAR)hmod + exports->AddressOfFunctions);
ords = (PSHORT)((PCHAR)hmod + exports->AddressOfNameOrdinals);
if ((DWORD)func & 0xFFFF0000)
{
names = (PDWORD)((PCHAR)hmod + exports->AddressOfNames);
while (!IsBadReadPtr(names, sizeof(DWORD)))
{
if (strcmp((PCHAR)hmod + *names, func) == 0)
{
if (!IsBadReadPtr(&functions[*ords], sizeof(DWORD)))
{
return (PCHAR)hmod + functions[*ords];
}
}
names++;
ords++;
}
} else {
if (!IsBadReadPtr(&functions[(SHORT)func], sizeof(DWORD)))
{
return (PCHAR)hmod + functions[(DWORD)func];
}
}
}
}
}
}
}
return NULL;
}
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Pourquoi veux-tu un équivalent de cette fonction ?

C++ (@++)<!--
Messages postés
76
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
22 décembre 2012

Par curiosité
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Je ne vois pas l'utilité d'en trouver un équivalent. Je n'en connais, de toute façon, pas mais même si il en existe un, je suis convaincus que, à moins de faire une fonction soi-même qui fouille à même le binaire, l'appel à cette fonction équivalente débouche sur un GetProcAddress.

C++ (@++)<!--
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
Salut,

Par ici, il y a des fonctions avancées de manipulation d'image (Au sens exécutable).

Sinon, GetProcAdress doit se baser sur la table d'export, donc ce n'est pas trop dur à recoder. La doc sur le format des exécutables est téléchargeable ici.
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
Bah voilou, il va chercher dans la table d'export.

Par contre je connaissais pas IsBadReadPtr. Mais cette fonction à l'air bien nulle si on se réfèrre à sa doc (Lire le commentaire à la fin).

Et là, elle est utilisée un peu abusivement...

A ta place je les ferais tous sauter. Si ça plante sans, c'est qu'une vérif qui aurait pu être faîte ne l'est pas.
Messages postés
76
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
22 décembre 2012

Oui je pense que tu as raison rt15 je vais voir sans l'utilisation de IsBadReadPtr