[Win32] Remotely execute functions of a D program
Denis Shelomovskij
verylonglogin.reg at gmail.com
Sat Sep 15 06:03:49 PDT 2012
15.09.2012 16:03, Jacob Carlborg пишет:
> On 2012-09-14 20:53, alex wrote:
>
>> The primary injection routine and how it works is not the problem - I
>> can successfully insert a MSVC++ Dll without any problems into a D
>> program. (I've used this https://github.com/jeffora/extemory library btw
>> - it's for c# :-))
>> Anyway, on a DLL built with dmc or dmd 1/2, the main program immediately
>> crashes or unloads the dll when returning false in the DllMain()
>>
>> So how to insert a D DLL into a D program?
>
> I don't know the status on Windows but in general D dynamic libraries
> don't properly work. The problems are TLS, exception handing tables and
> module infos. There might be other problems as well.
>
TLS is the problem on Windows 5.x (XP, Server 2003), not 6.x. D DLL will
use incomplete ugly hacks to fix it and will be unable to unload because
of hacks incompleteness. By the way I have created a complete hack
version to solve TLS problems in XP forever for all programs
independently of its source availability that injects itself into
running process, fixes everything and injects itself to all it's
children, etc. Sorry for such a long story about my just another project
nobody needs.
Lets return to the toppic.
The common practice of DLL-s injection is creating a new thread in
remote process and calling LoadLibrary from there but it is incorrect
because:
* it wastes resources (requires a copy of TLS local variables, calls of
module thread local constructors (for D) and all loading DLL-s DllMains
to attach new thread (and then to detach of course))
* injecting DLL's DllMain will be called not in main thread but the DLL
may expect to be in main one
* for D DLL it will just fail because of Digital Mars C runtime library
(honestly I'm not sure here but everything looks like it is so)
Again, Digital Mars C runtime library is the problem for everything in D
language including DLL-s.
--
Денис В. Шеломовский
Denis V. Shelomovskij
More information about the Digitalmars-d
mailing list