J'ai 2 structures de données à la fois dans mon injecteur et dll:C++ passer un lambda à partir d'une structure de données
struct SubData_t
{
int SubTest;
};
struct DataHolder_t
{
int Test;
SubData_t SubData;
};
Voici comment j'attribuer les valeurs de la structure de données:
DataHolder_t *DataHolder = new DataHolder_t();
DataHolder->Test = 123;
DataHolder->SubData.SubTest = 456;
int ResponseCode = Inject(4321, "test.dll", DataHolder);
Et c'est une fonction LoadLibrary personnalisée qui transmet les données à l'exportation dll:
int Inject(DWORD ProcessId, char *DLLFile, DataHolder_t *Data)
{
// ...
LoadRemoteLibraryR(hProcess, lpBuffer, dwLength, NULL, 0xd13f5171 /* dllexport EntryPoint hash */, (LPVOID)Data, (DWORD)(sizeof(struct DataHolder_t) + 1));
// ...
}
Puis-je obtenir les données dans l'exportation dll et assignez e Les valeurs de e de lpUserdata à la structure de données:
DLLEXPORT BOOL EntryPoint(LPVOID lpUserdata, DWORD nUserdataLen)
{
DataHolder_t *DataHolder = (struct DataHolder_t *)lpUserdata;
char buffer[100];
sprintf(buffer, "%d | %d", DataHolder->Test, DataHolder->SubData.SubTest);
MessageBox(NULL, buffer, "Test", MB_OK);
return TRUE;
}
Cependant, je suis nouveau lambdas et ne peut pas comprendre comment (s'il est même possible) pour passer lambda (fonctions) de la même manière à l'exportation dll. Ou existe-t-il un autre moyen de transmettre les fonctions/la logique à l'exportation dll, afin qu'elles puissent être appelées à partir du processus cible auquel la DLL a été injectée?
Merci pour la réponse. Voulez-vous dire quelque chose comme ça par hasard? http://stackoverflow.com/questions/23962019/how-to-initialize-stdfunction-with-a-member-function –
Vous êtes sur la bonne voie. Les réponses à cette autre question montrent plusieurs façons de le faire, que vous pouvez adapter à votre propre cas. –
Bon à savoir, 'std :: bind' semble intéressant dans cette question particulière. Je vais essayer de chercher plus et tripoter autour. Merci pour une réponse rapide à nouveau! –