Remplacer GetProcAddress

Résolu
jb212121 Messages postés 76 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 22 décembre 2012 - 6 sept. 2008 à 10:05
jb212121 Messages postés 76 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 22 décembre 2012 - 10 sept. 2008 à 08:53
Bonjour,

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

Merci

7 réponses

jb212121 Messages postés 76 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 22 décembre 2012
9 sept. 2008 à 15:52
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;
}
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
6 sept. 2008 à 16:12
Pourquoi veux-tu un équivalent de cette fonction ?

C++ (@++)<!--
0
jb212121 Messages postés 76 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 22 décembre 2012
6 sept. 2008 à 16:39
Par curiosité
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
7 sept. 2008 à 16:22
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++ (@++)<!--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
9 sept. 2008 à 14:30
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.
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
9 sept. 2008 à 18:17
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.
0
jb212121 Messages postés 76 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 22 décembre 2012
10 sept. 2008 à 08:53
Oui je pense que tu as raison rt15 je vais voir sans l'utilisation de IsBadReadPtr
0
Rejoignez-nous