Path: blob/main/components/ee/agent-smith/cmd/signature-new.go
2500 views
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.1// Licensed under the GNU Affero General Public License (AGPL).2// See License.AGPL.txt in the project root for license information.34package cmd56import (7"encoding/json"8"fmt"9"log"10"os"11"strconv"1213"github.com/gitpod-io/gitpod/agent-smith/pkg/classifier"14"github.com/spf13/cobra"15)1617// signatureNewCmd represents the newSignature command18var signatureNewCmd = &cobra.Command{19Use: "new <name>",20Short: "produces a signature JSON",21Args: cobra.ExactArgs(1),22Run: func(cmd *cobra.Command, args []string) {23ss, err := strconv.ParseInt(cmd.Flags().Lookup("slice-start").Value.String(), 10, 64)24if err != nil {25log.Fatal(err)26}27se, err := strconv.ParseInt(cmd.Flags().Lookup("slice-end").Value.String(), 10, 64)28if err != nil {29log.Fatal(err)30}3132fn := cmd.Flags().Lookup("filename").Value.String()33var fns []string34if fn != "" {35fns = []string{fn}36}3738kinds := map[string]classifier.ObjectKind{39"elf-symbols": classifier.ObjectELFSymbols,40"elf-rodata": classifier.ObjectELFRodata,41"expensive-any": classifier.ObjectAny,42}43kindv := cmd.Flags().Lookup("kind").Value.String()44kind, ok := kinds[kindv]45if !ok {46fmt.Fprintf(os.Stderr, "unknown kind: %s\n", kindv)47fmt.Fprintf(os.Stderr, "valid choices are (--kind):\n")48for k := range kinds {49fmt.Fprintf(os.Stderr, "\t%s\n", k)50}51os.Exit(1)52}5354sig := classifier.Signature{55Name: args[0],56Kind: kind,57Pattern: []byte(cmd.Flags().Lookup("pattern").Value.String()),58Regexp: cmd.Flags().Lookup("regexp").Value.String() == "true",59Slice: classifier.Slice{60Start: ss,61End: se,62},63Filename: fns,64Domain: classifier.DomainProcess,65}66err = sig.Validate()67if err != nil {68log.Fatal(err)69}70out, err := json.Marshal(sig)71if err != nil {72log.Fatal(err)73}7475fmt.Println(string(out))76},77}7879func init() {80signatureCmd.AddCommand(signatureNewCmd)8182signatureNewCmd.Flags().BoolP("regexp", "r", false, "Make this a regexp signature")83signatureNewCmd.Flags().StringP("pattern", "p", "", "The pattern of this signature")84signatureNewCmd.Flags().StringP("kind", "k", "", "The kind of this signature (either empty string for any or ELF)")85signatureNewCmd.Flags().StringP("filename", "f", "", "The filename this signature can apply to")86signatureNewCmd.Flags().Int("slice-start", 0, "Start of the signature slice")87signatureNewCmd.Flags().Int("slice-end", 0, "End of the signature slice")88}899091