DLL Injection

js.mdnq js_adddot+mdng at gmail.com
Sat Dec 1 04:29:50 PST 2012


On Saturday, 1 December 2012 at 11:24:51 UTC, s0beit wrote:
> Alright, at the end of my long search I have finally concluded 
> that this is some sort of threading problem.
>
> Any D module loaded in a new thread, from a C/++ application 
> will crash. The solution, I believe, in this case might be to 
> hijack the program's "main" thread and execute your LoadLibrary 
> call there.
>
> When you call LoadLibrary on a D module from a C++ 
> application's "main" function, everything is fine. When you 
> call it with a newly created thread (CreateThread or 
> CreateRemoteThread) it will crash universally. I have not found 
> a remedy to this issue, but the method to inject your module by 
> hijacking the thread might work. It's an older method of 
> injection since before CreateThread APIs came along, but the 
> basic idea is that you get the handle to the program's primary 
> thread, get the context and force the Eip to your destination 
> which calls LoadLibrary. Then you JMP back to the old Eip.
>
> I'll post here if I have any success with it, I am currently 
> too busy to test my theory.

Would it be possible for you to write wrapper in C that hooks 
into the process then that wrapper loads up your D code? Since 
you are saying you can do this in C, and C should be able to 
interface well with D, it seems like it should work.





More information about the Digitalmars-d-learn mailing list