Hé les gars, j'essaie de comprendre comment appeler une fonction sans qu'elle soit exportée. Ok, donc j'ai un fichier exe avec "add" défini en lui, Cet exe est une application console win32 et charge une DLL. La DLL vise également à utiliser la fonction d'ajout du fichier exe (sans les exportations)C - Appel de fonctions depuis un processus externe sans fonctions exportées
Voici mon fichier d'application principal de la console win32:
#include <windows.h>
#include <stdio.h>
#pragma auto_inline (off)
int add (int a, int b)
{
printf("Adding some ints\n");
return a + b;
}
int main ()
{
HMODULE module = NULL;
if ((module = LoadLibrary(L"hook.dll")) == NULL)
{
printf("Could not load library: %ld\n", GetLastError());
return 0;
}
add(3, 5);
FreeLibrary(module);
return 0;
}
Voici le code pour hook.dll:
#include <windows.h>
#include <stdio.h>
#include <detours.h>
static int (*add) (int a, int b) = (int (*)(int a, int b)) 0x401000;
int Detoured_add (int a, int b)
{
return add(a, b);
}
BOOL WINAPI DllMain (HINSTANCE hDll, DWORD reason, LPVOID reserved)
{
if (reason == DLL_PROCESS_ATTACH)
{
DetourTransactionBegin();
DetourAttach((PVOID*) &add, Detoured_add);
DetourTransactionCommit();
}
else if (reason == DLL_PROCESS_DETACH)
{
DetourTransactionBegin();
DetourDetach((PVOID*) &add, Detoured_add);
DetourTransactionCommit();
}
return TRUE;
}
Je démonte ma demande de console win32 pour trouver l'adresse de la fonction add
.text:00401000 ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
.text:00401000
.text:00401000
.text:00401000 sub_401000 proc near ; CODE XREF: sub_401020:loc_40104Bp
.text:00401000 push offset aAddingSomeInts ; "Adding some ints\n"
.text:00401005 call ds:printf
.text:0040100B add esp, 4
.text:0040100E mov eax, 8
.text:00401013 retn
.text:00401013 sub_401000 endp
Le problème est lorsque j'appelle LoadLibrary, il renvoie 998 qui je crois est violation d'accès au code d'erreur. Je suppose que cela a du sens cependant que cette zone de mémoire est probablement protégée.
Des conseils?
(De plus, le désassembleur j'est la version gratuite Ida Pro, et la bibliothèque est fournie par des détours Microsoft.)
Je ne connais pas grand chose à Detours et je ne suis pas sûr qu'il puisse être utilisé de cette façon. Mais êtes-vous sûr que l'adresse de add() sera 0x401000 lors de l'exécution? Le module ne peut-il pas être déplacé ou quelque chose? –
Bon, je ne suis pas trop sûr de l'adresse, puisque je suis nouveau dans ce genre de choses. – Tr41n
Je vais continuer à travailler sur ceci et rapporter mes résultats. – Tr41n