通过 dll 注入在主线程中执行代码
Executing code in main thread via dll injection
>我需要将dll注入进程的主线程(否则我的进程会崩溃( 我将如何做到这一点?我的dll显然是C++,我的注入方法虽然使用C#和CreateRemoteThread。 我尝试使用 std::thread(func(,但这不起作用(当然它可能不会,因为它很可能会创建一个新线程( 我不知道这对我的DLL还是我的注入器来说是问题,所以所有的帮助和尝试都是值得赞赏的。
您的DllMain
将在每个线程的上下文中运行...找出哪个是主线程。
由于在保持加载程序锁时无法执行太多操作,因此请创建具有线程相关性的回调(例如使用SetTimer
(,并从该回调执行所有工作。
您可以创建暂停的目标进程并使用 CreateRemoteThread(( 进行注入,但请注意以下限制:
- 应将远程线程的线程主例程复制到目标进程的地址空间。
- 此代码不能包含任何外部引用(例如 CRTL 或直接 WinApi 调用(。我通常会将此代码限制为加载 DLL 并从中执行函数,或者依靠 DllMain 来完成您需要的工作。为了调用 LoadLibrary 和 GetProcAddress 方法,我获取它们的地址并将包含此信息的结构复制到目标进程,并将远程结构的地址作为 CreateRemoteThread(( 中线程主例程的参数传递。您可以使用 VirtualAllocEx(( 在远程进程中分配内存,
- 在这种情况下,远程线程将在主线程之前执行,包括进程和一些Win32/64初始化。因此,在这种情况下,并非每个 Win32 API 都可以安全调用。
您可以在此处阅读更多内容:http://blogs.microsoft.co.il/pavely/2017/03/14/injecting-a-dll-without-a-remote-thread/
相关文章:
- 需要将此代码更改为执行代码
- 当前不会命中断点。没有调试器目标代码类型的可执行代码与此文件关联
- 单步执行代码时重复上一行
- 如何使用介子在C++中执行代码覆盖?
- Visual Studio 2017,C++,在单步执行代码时指向错误的行
- 在 R 中执行C++代码
- 通过 dll 注入在主线程中执行代码
- 无法在 c++ 中循环后执行代码
- 执行C 代码时快速频繁的文件访问
- 执行 C++ 代码后出错
- 一个人如何从代表函数的字符串中执行运行时执行C 代码
- 是否可以在程序崩溃后执行代码?
- 第一次在 Linux 上执行 c++ 代码的时间非常慢
- 计算 JSON 中的条目数并相应地执行代码
- 将在 CATCH 块之后执行代码
- 分析执行C++代码的每一行所花费的确切时间
- 我在执行代码时不断得到"Bus Error"?
- c while()..执行代码行的条件
- 从并行线程在主 Maya 线程上执行代码
- 在调用GNUPLOT之后,如何继续执行C 代码