gpt4 book ai didi

c++ - 获取另一个进程中变量的地址

转载 作者:搜寻专家 更新时间:2023-10-31 02:21:25 28 4
gpt4 key购买 nike

我有一个相当直接的目标(它很简单,因为它只是一个测试),将 DLL 注入(inject) hello_world 以更改它打印的内容,但不修改 hello_world.exe 来提供帮助。目的是让我学习如何将与 hello_world 不同的源代码与更大的应用程序相似。

我有一个创建 hello_world.exe 进程的 test.exe,并使用远程线程加载 hello_world.exe 中的 dll 库。所以现在的问题是如何处理 dll...这是 dll 和 hello_world 的来源。我在 hello_world 中有一个 Sleep(1000),这样 dll 在它被打印之前有时间更改值......但除此之外,目标是更改“str”而不更改 hello_world 源中的任何内容,只是动态链接库。

动态链接库:

#include <cstdio>
#include <windows.h>

void main(){
//this should be where i somehow get the "str" pointer from hello_world and change it
}

BOOL DllMain(HINSTANCE hInst,DWORD reason,LPVOID lpvReserved){
switch(reason){
case DLL_PROCESS_ATTACH:
main();
break;
case DLL_PROCESS_DETACH:

break;
}
return TRUE;
}

Hello World :

#include <cstdio>
#include <windows.h>

char str[] = "Hello, world";

int main(){
Sleep(1000);
printf("%s\n",str);

return 0;
}

感谢所有回复的人。

最佳答案

幸运的是你不能那样做......即使Win32 DLLs are mapped into the address space of the calling process

  char str[] = "Hello, world";

将被编译器标记为由加载程序加载到只读 内存区域,然后“即使”如果您设法获得指向字符串的指针,它也不会帮助您更改其内容。

关于c++ - 获取另一个进程中变量的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31455200/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com