go-offsets-tracker

module
v0.1.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 24, 2024 License: Apache-2.0

README

Go offsets tracker

This tool allows generating a JSON description of the byte offsets of a set of field structs, for each version or Go or third-party library.

It is useful to inspect some known fields in executable files that do not embed Debug information.

This is a standalone, modified version of the Open Telemetry offsets tracker tool, and both are licensed under Apache Software License 2.0.

How to install

go install github.com/grafana/go-offsets-tracker/cmd/go-offsets-tracker@latest

How to generate offsets

Specify the library/struct/field that you want to track, for a version range in an input JSON file. Check examples/input_file.json to understand the schema:

go-offsets-tracker -i examples/input_file.json examples/offsets.json

If the output file (examples/offsets.json) in the above example) already exists, the program will reuse these known offsets as a cache, to not have to retrieve the information again from the internet.

If you need to regenerate completely the output file, remove it or use an output file that does not exist.

How to read offsets from a program

Use offsets.Open or offsets.Read to load an (offsets.Track).

Use the Find method of the offsets.Track to get the offsets, given the struct, field and version names:

package main

import (
	"log"

	"github.com/grafana/go-offsets-tracker/pkg/offsets"
)

func main() {
	track, err := offsets.Open("./examples/offsets.json")
	if err != nil {
		log.Fatal("opening file", err)
	}
	structName := "google.golang.org/grpc/internal/transport.Stream"
	fieldName := "method"
	version := "1.16.7"
	off, ok := track.Find(structName, fieldName, version)
	if !ok {
		log.Fatal("offsets not found!", structName, fieldName, version)
	}
	log.Printf("offset for %s.%s (%s): %d", structName, fieldName, version, off)
}

Output:

offset for google.golang.org/grpc/internal/transport.Stream.method (1.16.7): 64

Directories

Path Synopsis
cmd
pkg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL