Skip to content

Commit d5221d8

Browse files
committed
feat(helpers): add argument parser for socketcall
1 parent b235fb5 commit d5221d8

File tree

1 file changed

+100
-2
lines changed

1 file changed

+100
-2
lines changed

helpers/argumentParsers.go

+100-2
Original file line numberDiff line numberDiff line change
@@ -996,6 +996,104 @@ func ParsePtraceRequestArgument(rawValue uint64) (PtraceRequestArgument, error)
996996
return 0, fmt.Errorf("not a valid ptrace request value: %d", rawValue)
997997
}
998998

999+
type SocketcallCallArgument uint64
1000+
1001+
const (
1002+
SYS_SOCKET SocketcallCallArgument = iota + 1
1003+
SYS_BIND
1004+
SYS_CONNECT
1005+
SYS_LISTEN
1006+
SYS_ACCEPT
1007+
SYS_GETSOCKNAME
1008+
SYS_GETPEERNAME
1009+
SYS_SOCKETPAIR
1010+
SYS_SEND
1011+
SYS_RECV
1012+
SYS_SENDTO
1013+
SYS_RECVFROM
1014+
SYS_SHUTDOWN
1015+
SYS_SETSOCKOPT
1016+
SYS_GETSOCKOPT
1017+
SYS_SENDMSG
1018+
SYS_RECVMSG
1019+
SYS_ACCEPT4
1020+
SYS_RECVMMSG
1021+
SYS_SENDMMSG
1022+
)
1023+
1024+
func (s SocketcallCallArgument) Value() uint64 {
1025+
return uint64(s)
1026+
}
1027+
1028+
var socketcallCallStringMap = map[SocketcallCallArgument]string{
1029+
SYS_SOCKET: "SYS_SOCKET",
1030+
SYS_BIND: "SYS_BIND",
1031+
SYS_CONNECT: "SYS_CONNECT",
1032+
SYS_LISTEN: "SYS_LISTEN",
1033+
SYS_ACCEPT: "SYS_ACCEPT",
1034+
SYS_GETSOCKNAME: "SYS_GETSOCKNAME",
1035+
SYS_GETPEERNAME: "SYS_GETPEERNAME",
1036+
SYS_SOCKETPAIR: "SYS_SOCKETPAIR",
1037+
SYS_SEND: "SYS_SEND",
1038+
SYS_RECV: "SYS_RECV",
1039+
SYS_SENDTO: "SYS_SENDTO",
1040+
SYS_RECVFROM: "SYS_RECVFROM",
1041+
SYS_SHUTDOWN: "SYS_SHUTDOWN",
1042+
SYS_SETSOCKOPT: "SYS_SETSOCKOPT",
1043+
SYS_GETSOCKOPT: "SYS_GETSOCKOPT",
1044+
SYS_SENDMSG: "SYS_SENDMSG",
1045+
SYS_RECVMSG: "SYS_RECVMSG",
1046+
SYS_ACCEPT4: "SYS_ACCEPT4",
1047+
SYS_RECVMMSG: "SYS_RECVMMSG",
1048+
SYS_SENDMMSG: "SYS_SENDMMSG",
1049+
}
1050+
1051+
func (s SocketcallCallArgument) String() string {
1052+
var res string
1053+
1054+
if sdName, ok := socketcallCallStringMap[s]; ok {
1055+
res = sdName
1056+
} else {
1057+
res = strconv.Itoa(int(s))
1058+
}
1059+
1060+
return res
1061+
}
1062+
1063+
var socketcallCallMap = map[uint64]SocketcallCallArgument{
1064+
SYS_SOCKET.Value(): SYS_SOCKET,
1065+
SYS_BIND.Value(): SYS_BIND,
1066+
SYS_CONNECT.Value(): SYS_CONNECT,
1067+
SYS_LISTEN.Value(): SYS_LISTEN,
1068+
SYS_ACCEPT.Value(): SYS_ACCEPT,
1069+
SYS_GETSOCKNAME.Value(): SYS_GETSOCKNAME,
1070+
SYS_GETPEERNAME.Value(): SYS_GETPEERNAME,
1071+
SYS_SOCKETPAIR.Value(): SYS_SOCKETPAIR,
1072+
SYS_SEND.Value(): SYS_SEND,
1073+
SYS_RECV.Value(): SYS_RECV,
1074+
SYS_SENDTO.Value(): SYS_SENDTO,
1075+
SYS_RECVFROM.Value(): SYS_RECVFROM,
1076+
SYS_SHUTDOWN.Value(): SYS_SHUTDOWN,
1077+
SYS_SETSOCKOPT.Value(): SYS_SETSOCKOPT,
1078+
SYS_GETSOCKOPT.Value(): SYS_GETSOCKOPT,
1079+
SYS_SENDMSG.Value(): SYS_SENDMSG,
1080+
SYS_RECVMSG.Value(): SYS_RECVMSG,
1081+
SYS_ACCEPT4.Value(): SYS_ACCEPT4,
1082+
SYS_RECVMMSG.Value(): SYS_RECVMMSG,
1083+
SYS_SENDMMSG.Value(): SYS_SENDMMSG,
1084+
}
1085+
1086+
// ParseSocketcallCall parses the `call` argument of the `socketcall` syscall
1087+
// http://man7.org/linux/man-pages/man2/socketcall.2.html
1088+
// https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/net.h
1089+
func ParseSocketcallCall(rawValue uint64) (SocketcallCallArgument, error) {
1090+
if v, ok := socketcallCallMap[rawValue]; ok {
1091+
return v, nil
1092+
}
1093+
1094+
return 0, fmt.Errorf("not a valid socketcall call value: %d", rawValue)
1095+
}
1096+
9991097
type SocketDomainArgument uint64
10001098

10011099
const (
@@ -1096,8 +1194,6 @@ var socketDomainStringMap = map[SocketDomainArgument]string{
10961194
AF_XDP: "AF_XDP",
10971195
}
10981196

1099-
// String parses the `domain` bitmask argument of the `socket` syscall
1100-
// http://man7.org/linux/man-pages/man2/socket.2.html
11011197
func (s SocketDomainArgument) String() string {
11021198
var res string
11031199

@@ -1158,6 +1254,8 @@ var socketDomainMap = map[uint64]SocketDomainArgument{
11581254
AF_XDP.Value(): AF_XDP,
11591255
}
11601256

1257+
// ParseSocketDomainArgument parses the `domain` bitmask argument of the `socket` syscall
1258+
// http://man7.org/linux/man-pages/man2/socket.2.html
11611259
func ParseSocketDomainArgument(rawValue uint64) (SocketDomainArgument, error) {
11621260
v, ok := socketDomainMap[rawValue]
11631261
if !ok {

0 commit comments

Comments
 (0)