簡體   English   中英

將struct參數傳遞給CreateThread()而不接收char *變量

[英]Passing struct argument to CreateThread() and not receiving char* variable

我將dll反射性地注入另一個進程的內存中,並且顯然需要調用CreateThread()。 我正在使用loader_data結構將某些參數傳遞給要注入的dll。 我有一些需要傳遞的變量,例如一塊內存的大小等。所有這些變量都已成功傳遞到注入的dll,但是當將char *傳遞到我的結構中時,對於保留的注入的dll最終為空DllMain的參數。

loader_data_t *parameter = new loader_data_t();
... initialize variables.

lpRemoteLibraryBuffer3 = VirtualAllocEx(proc, NULL, sizeof(loader_data_t), MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);

WriteProcessMemory(proc, lpRemoteLibraryBuffer3, parameter, sizeof(loader_data_t), NULL);

這就是我為參數分配空間的方式。

typedef struct loader_data_t {
    char *chunk;
    int chunk_size;
    ULONG_PTR reloc_address;
};

這就是我要傳遞的結構。 我肯定正確地對其進行了初始化,已經檢查以確保所有設置都正確。 但是,當它傳遞給DllMain中的保留參數時,除char * chunk變量外,所有其他變量都是正確的。 我真的很困惑,請原諒可能含糊的標題。

假設您在初始化數據代碼中設置了“塊”,那么遠程地址空間中的指針將引用本地進程中的地址。

解決此問題的簡單方法是使塊成為數組(可能是結構的最后一個成員)並分配一個足以容納塊數據的塊。

更復雜的是在遠程進程中為塊的數據分配第二個塊,將數據復制到該塊,然后將該地址寫入本地實例的塊成員,然后再將本地結構寫入遠程進程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM