#ReflectiveAccessByInstrumentationAgents

Peter Levart peter.levart at gmail.com
Fri May 6 14:34:49 UTC 2016


Hi,


On 05/06/2016 10:07 AM, Andrew Dinn wrote:
>> >Have you looked at injecting code in the victim module that invokes
>> >Module addExports to export the packages to the Byteman modules (modules
>> >plural because it sounds like the code is split between the unnamed
>> >module of the app class loader and the unnamed modulie of the boot loader).
> Not yet but I will do. n.b. for all practical purposes there is only one
> Byteman module although which one it is depends upon whether the agent
> jar is hoisted into the bootstrap or remains in the system loader. In
> the former case the code is split but only in that the Main class gets
> left in the system loader  while all others sit in bootstrap. Since Main
> merely acts as a trampoline it does not require any special module linkage.
> regards,
>
>
> Andrew Dinn

So if Main agent class is always loaded by bootstrap loader / unnamed 
module, what about an API point in Instrumentation like:

void addModuleExportsToBootstrapUnnamed(Module module, String pn);

This would only allow adding exports from arbitrary module / package to 
bootstrap unnamed module, which would contain (part of) agent. This part 
of agent could also contain trampolines with regulated access from 
instrumented / tested classes. Every call to such exposed code would 
have to be done by invocation through Byteman layer then which could 
regulate access by any means including but not limited to exporting the 
Byteman code package to selected set of modules.

Such limited addExports API would not allow to break encapsulation in 
arbitrary ways.

Regards, Peter



More information about the jigsaw-dev mailing list