go build -o agent.so -buildmode=c-shared main.go
No dependencies required
cat - > agent.py <<EOF
#!/usr/bin/env python3
from ctypes import *
lib = cdll.LoadLibrary("./agent.so")
lib.Init()
EOF
HOOP_TOKEN=x-agt-7f17... python3 agent.py
{"level":"info","timestamp":"2023-06-09T12:42:11-03:00","logger":"agent/main.go:30","msg":"version=unknown, platform=darwin/arm64, mode=local, grpc_server=127.0.0.1:8010, tls=false - starting agent"}
{"level":"info","timestamp":"2023-06-09T12:42:11-03:00","logger":"agent/agent.go:158","msg":"connected with success to 127.0.0.1:8010, tls=false"}
Depends of ffi
module
gem install ffi
cat - > agent.rb <<EOF
require 'ffi'
module Agent
extend FFI::Library
ffi_lib './agent.so'
attach_function :Init, [], :void
end
Agent.Init()
EOF
HOOP_TOKEN=x-agt-7f17... ruby agent.rb
{"level":"info","timestamp":"2023-06-09T13:37:12-03:00","logger":"agent/main.go:30","msg":"version=unknown, platform=darwin/arm64, mode=local, grpc_server=127.0.0.1:8010, tls=false - starting agent"}
{"level":"info","timestamp":"2023-06-09T13:37:12-03:00","logger":"agent/agent.go:158","msg":"connected with success to 127.0.0.1:8010, tls=false"}
Depends of ffi-napi
modules
npm install ffi-napi
# macos only!
cp agent.so agent.so.dylib
cat - > agent.js <<EOF
var ffi = require('ffi-napi');
var hoop = ffi.Library('./agent.so', {
'Init': [ 'void', [] ]
});
console.log("starting agent from node")
hoop.Init()
EOF
HOOP_TOKEN=x-agt-7f17... node agent.js
starting agent from node
{"level":"info","timestamp":"2023-06-09T14:02:11-03:00","logger":"agent/main.go:30","msg":"version=unknown, platform=darwin/arm64, mode=local, grpc_server=127.0.0.1:8010, tls=false - starting agent"}
{"level":"info","timestamp":"2023-06-09T14:02:11-03:00","logger":"agent/agent.go:158","msg":"connected with success to 127.0.0.1:8010, tls=false"}
Requires JNA
nix-shell -p zulu
cat - > Agent.java <<EOF
import com.sun.jna.*;
import java.util.*;
import java.lang.Long;
public class Agent {
public interface Hoop extends Library {
public void Init();
}
static public void main(String argv[]) {
Hoop hoop = (Hoop) Native.loadLibrary(
"./agent.so", Hoop.class);
System.out.println("starting agent from java 11");
hoop.Init();
}
}
EOF
mkdir -p $HOME/.hoop/lib && cp agent.so $HOME/.hoop/lib/agent.so.dylib
curl -s -L https://repo1.maven.org/maven2/net/java/dev/jna/jna/5.13.0/jna-5.13.0.jar > jna-5.13.0.jar
JNA_JAR=$PWD/jna-5.13.0.jar
javac -cp $JNA_JAR Agent.java
DYLD_LIBRARY_PATH=$HOME/.hoop/lib LD_LIBRARY_PATH=$HOME/.hoop/lib HOOP_TOKEN=x-agt-7f17... java -cp ".:$JNA_JAR" Agent
starting agent from java 11
{"level":"info","timestamp":"2023-06-09T14:37:14-03:00","logger":"agent/main.go:30","msg":"version=unknown, platform=darwin/arm64, mode=local, grpc_server=127.0.0.1:8010, tls=false - starting agent"}
{"level":"info","timestamp":"2023-06-09T14:37:14-03:00","logger":"agent/agent.go:158","msg":"connected with success to 127.0.0.1:8010, tls=false"}