agent works
This commit is contained in:
parent
65bb0fd0b4
commit
28c2237b77
8 changed files with 70 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
/out/
|
||||||
|
/agent/agent.jar
|
|
@ -4,6 +4,7 @@
|
||||||
<modules>
|
<modules>
|
||||||
<module fileurl="file://$PROJECT_DIR$/agent/agent.iml" filepath="$PROJECT_DIR$/agent/agent.iml" />
|
<module fileurl="file://$PROJECT_DIR$/agent/agent.iml" filepath="$PROJECT_DIR$/agent/agent.iml" />
|
||||||
<module fileurl="file://$PROJECT_DIR$/application/application.iml" filepath="$PROJECT_DIR$/application/application.iml" />
|
<module fileurl="file://$PROJECT_DIR$/application/application.iml" filepath="$PROJECT_DIR$/application/application.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/lab-6-maggicl.iml" filepath="$PROJECT_DIR$/lab-6-maggicl.iml" />
|
||||||
<module fileurl="file://$PROJECT_DIR$/profiler/profiler.iml" filepath="$PROJECT_DIR$/profiler/profiler.iml" />
|
<module fileurl="file://$PROJECT_DIR$/profiler/profiler.iml" filepath="$PROJECT_DIR$/profiler/profiler.iml" />
|
||||||
</modules>
|
</modules>
|
||||||
</component>
|
</component>
|
||||||
|
|
16
README.md
Normal file
16
README.md
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
# Agent
|
||||||
|
|
||||||
|
### Compile the agent as JAR
|
||||||
|
|
||||||
|
```shell
|
||||||
|
cd agent/src
|
||||||
|
find . -name '*.java' -print -exec javac -d ../../out/production/agent \{\} \;
|
||||||
|
cd ..
|
||||||
|
jar cfm agent.jar manifest.txt -C ../out/production/agent .
|
||||||
|
```
|
||||||
|
|
||||||
|
### Run application with agent
|
||||||
|
|
||||||
|
```shell
|
||||||
|
java -javaagent:agent/agent.jar=hello -cp out/production/application ch.usi.inf.sp.dbi.Application
|
||||||
|
```
|
2
agent/manifest.txt
Normal file
2
agent/manifest.txt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
Manifest-Version: 1.0
|
||||||
|
Premain-Class: ch.usi.inf.sp.dbi.agent.Agent
|
10
agent/src/ch/usi/inf/sp/dbi/agent/Agent.java
Normal file
10
agent/src/ch/usi/inf/sp/dbi/agent/Agent.java
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
package ch.usi.inf.sp.dbi.agent;
|
||||||
|
|
||||||
|
import java.lang.instrument.Instrumentation;
|
||||||
|
|
||||||
|
public class Agent {
|
||||||
|
public static void premain(String agentArgs, Instrumentation inst) {
|
||||||
|
System.out.println("Agent starting (arguments: '" + agentArgs + "')");
|
||||||
|
inst.addTransformer(new ClassTransformer());
|
||||||
|
}
|
||||||
|
}
|
17
agent/src/ch/usi/inf/sp/dbi/agent/ClassTransformer.java
Normal file
17
agent/src/ch/usi/inf/sp/dbi/agent/ClassTransformer.java
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
package ch.usi.inf.sp.dbi.agent;
|
||||||
|
|
||||||
|
import java.lang.instrument.ClassFileTransformer;
|
||||||
|
import java.lang.instrument.IllegalClassFormatException;
|
||||||
|
import java.security.ProtectionDomain;
|
||||||
|
|
||||||
|
public class ClassTransformer implements ClassFileTransformer {
|
||||||
|
@Override
|
||||||
|
public byte[] transform(ClassLoader loader,
|
||||||
|
String className,
|
||||||
|
Class<?> classBeingRedefined,
|
||||||
|
ProtectionDomain protectionDomain,
|
||||||
|
byte[] classfileBuffer) throws IllegalClassFormatException {
|
||||||
|
System.out.println("About to transform class <" + loader + ", " + className + ">");
|
||||||
|
return classfileBuffer; // no changes
|
||||||
|
}
|
||||||
|
}
|
11
application/src/ch/usi/inf/sp/dbi/Application.java
Normal file
11
application/src/ch/usi/inf/sp/dbi/Application.java
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
package ch.usi.inf.sp.dbi;
|
||||||
|
|
||||||
|
public class Application {
|
||||||
|
public static void main(String... args) {
|
||||||
|
sayHi();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sayHi() {
|
||||||
|
System.out.println("Hello!");
|
||||||
|
}
|
||||||
|
}
|
11
lab-6-maggicl.iml
Normal file
11
lab-6-maggicl.iml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="JAVA_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
Reference in a new issue