Skip to content

Commit 272a3da

Browse files
authored
Merge pull request #882 from dark-lbp/fix-socket_type-confuse
Fix socket type confuse
2 parents d8acd23 + 0978eea commit 272a3da

File tree

4 files changed

+380
-15
lines changed

4 files changed

+380
-15
lines changed

qiling/os/posix/const.py

+215-9
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,16 @@
1717
# File Open Limits
1818
NR_OPEN = 1024
1919

20+
SOCK_TYPE_MASK = 0x0f
21+
2022
linux_socket_types = {
2123
'SOCK_STREAM' : 0x1,
2224
'SOCK_DGRAM' : 0x2,
2325
'SOCK_RAW' : 0x3,
2426
'SOCK_RDM' : 0x4,
2527
'SOCK_SEQPACKET' : 0x5,
28+
'SOCK_DCCP' : 0x6,
2629
'SOCK_PACKET' : 0xa,
27-
'SOCK_NONBLOCK' : 0x800,
28-
'SOCK_CLOEXEC' : 0x80000,
2930
}
3031

3132

@@ -44,6 +45,103 @@
4445
'AF_MAX' : 0xc,
4546
}
4647

48+
# https://github.com/torvalds/linux/blob/master/include/uapi/linux/in.h
49+
linux_socket_level = {
50+
'IPPROTO_IP' : 0x0000,
51+
'SOL_SOCKET' : 0x0001,
52+
'IPPROTO_TCP' : 0x0006,
53+
'IPPROTO_UDP' : 0x0011,
54+
'IPPROTO_IPV6' : 0x0029,
55+
'IPPROTO_RAW' : 0x00ff,
56+
}
57+
58+
59+
linux_socket_options = {
60+
"SO_DEBUG" : 0x0001,
61+
"SO_REUSEADDR" : 0x0002,
62+
"SO_KEEPALIVE" : 0x0009,
63+
"SO_DONTROUTE" : 0x0005,
64+
"SO_BROADCAST" : 0x0006,
65+
"SO_LINGER" : 0x000d,
66+
"SO_OOBINLINE" : 0x000a,
67+
"SO_SNDBUF" : 0x0007,
68+
"SO_RCVBUF" : 0x0008,
69+
"SO_SNDLOWAT" : 0x0013,
70+
"SO_RCVLOWAT" : 0x0012,
71+
"SO_SNDTIMEO" : 0x0015,
72+
"SO_RCVTIMEO" : 0x0014,
73+
}
74+
75+
# https://man7.org/linux/man-pages/man7/ip.7.html
76+
# https://github.com/torvalds/linux/blob/master/include/uapi/linux/in.h
77+
linux_socket_ip_options = {
78+
"IP_TOS" : 0x0001,
79+
"IP_TTL" : 0x0002,
80+
"IP_HDRINCL" : 0x0003,
81+
"IP_OPTIONS" : 0x0004,
82+
"IP_ROUTER_ALERT" : 0x0005,
83+
"IP_RECVOPTS" : 0x0006,
84+
"IP_RETOPTS" : 0x0007,
85+
"IP_PKTINFO" : 0x0008,
86+
"IP_MTU_DISCOVER" : 0x000a,
87+
"IP_RECVERR" : 0x000b,
88+
"IP_RECVTTL" : 0x000c,
89+
"IP_RECVTOS" : 0x000d,
90+
"IP_MTU" : 0x000e,
91+
"IP_FREEBIND" : 0x000f,
92+
"IP_PASSSEC" : 0x0012,
93+
"IP_TRANSPARENT" : 0x0013,
94+
"IP_RECVORIGDSTADDR" : 0x0014,
95+
"IP_NODEFRAG" : 0x0016,
96+
"IP_BIND_ADDRESS_NO_PORT" : 0x0018,
97+
"IP_MULTICAST_IF" : 0x0020,
98+
"IP_MULTICAST_TTL" : 0x0021,
99+
"IP_MULTICAST_LOOP" : 0x0022,
100+
"IP_ADD_MEMBERSHIP" : 0x0023,
101+
"IP_DROP_MEMBERSHIP" : 0x0024,
102+
"IP_UNBLOCK_SOURCE" : 0x0025,
103+
"IP_BLOCK_SOURCE" : 0x0026,
104+
"IP_ADD_SOURCE_MEMBERSHIP" : 0x0027,
105+
"IP_DROP_SOURCE_MEMBERSHIP" : 0x0028,
106+
"IP_MSFILTER" : 0x0029,
107+
"IP_MULTICAST_ALL" : 0x0031,
108+
}
109+
110+
111+
macos_socket_ip_options = {
112+
"IP_TOS" : 0x0003,
113+
"IP_TTL" : 0x0004,
114+
"IP_HDRINCL" : 0x0002,
115+
"IP_OPTIONS" : 0x0001,
116+
# "IP_ROUTER_ALERT" : 0x0005,
117+
"IP_RECVOPTS" : 0x0005,
118+
"IP_RETOPTS" : 0x0008,
119+
# "IP_PKTINFO" : 0x0008,
120+
# "IP_MTU_DISCOVER" : 0x000a,
121+
# "IP_RECVERR" : 0x000b,
122+
# "IP_RECVTTL" : 0x000c,
123+
# "IP_RECVTOS" : 0x000d,
124+
# "IP_MTU" : 0x000e,
125+
# "IP_FREEBIND" : 0x000f,
126+
# "IP_PASSSEC" : 0x0012,
127+
# "IP_TRANSPARENT" : 0x0013,
128+
# "IP_RECVORIGDSTADDR" : 0x0014,
129+
# "IP_NODEFRAG" : 0x0016,
130+
# "IP_BIND_ADDRESS_NO_PORT" : 0x0018,
131+
"IP_MULTICAST_IF" : 0x0009,
132+
"IP_MULTICAST_TTL" : 0x000a,
133+
"IP_MULTICAST_LOOP" : 0x000b,
134+
"IP_ADD_MEMBERSHIP" : 0x000c,
135+
"IP_DROP_MEMBERSHIP" : 0x000d,
136+
# "IP_UNBLOCK_SOURCE" : 0x0025,
137+
# "IP_BLOCK_SOURCE" : 0x0026,
138+
# "IP_ADD_SOURCE_MEMBERSHIP" : 0x0027,
139+
# "IP_DROP_SOURCE_MEMBERSHIP" : 0x0028,
140+
# "IP_MSFILTER" : 0x0029,
141+
# "IP_MULTICAST_ALL" : 0x0031,
142+
}
143+
144+
47145
macos_socket_domain = {
48146
'AF_UNSPEC' : 0x0,
49147
'AF_LOCAL' : 0x1,
@@ -63,16 +161,15 @@
63161
}
64162

65163

164+
# https://gfiber.googlesource.com/toolchains/mindspeed/+/refs/heads/newkernel_dev/arm-unknown-linux-gnueabi/sysroot/usr/include/bits/socket.h
66165
arm_socket_types = {
67-
'SOCK_DGRAM' : 0x1,
68-
'SOCK_STREAM' : 0x2,
166+
'SOCK_STREAM' : 0x1,
167+
'SOCK_DGRAM' : 0x2,
69168
'SOCK_RAW' : 0x3,
70169
'SOCK_RDM' : 0x4,
71170
'SOCK_SEQPACKET' : 0x5,
72171
'SOCK_DCCP' : 0x6,
73172
'SOCK_PACKET' : 0xa,
74-
'SOCK_NONBLOCK' : 0x800,
75-
'SOCK_CLOEXEC' : 0x80000,
76173
}
77174

78175

@@ -128,16 +225,42 @@
128225
}
129226

130227

228+
# https://gfiber.googlesource.com/toolchains/mindspeed/+/refs/heads/newkernel_dev/arm-unknown-linux-gnueabi/sysroot/usr/include/asm/socket.h
229+
arm_socket_level = {
230+
'IPPROTO_IP' : 0x0000,
231+
'SOL_SOCKET' : 0x0001,
232+
'IPPROTO_TCP' : 0x0006,
233+
'IPPROTO_UDP' : 0x0011,
234+
'IPPROTO_IPV6' : 0x0029,
235+
'IPPROTO_RAW' : 0x00ff,
236+
}
237+
238+
# https://gfiber.googlesource.com/toolchains/mindspeed/+/refs/heads/newkernel_dev/arm-unknown-linux-gnueabi/sysroot/usr/include/asm/socket.h
239+
arm_socket_options = {
240+
"SO_DEBUG" : 0x0001,
241+
"SO_REUSEADDR" : 0x0002,
242+
"SO_KEEPALIVE" : 0x0009,
243+
"SO_DONTROUTE" : 0x0005,
244+
"SO_BROADCAST" : 0x0006,
245+
"SO_LINGER" : 0x000d,
246+
"SO_OOBINLINE" : 0x000a,
247+
"SO_SNDBUF" : 0x0007,
248+
"SO_RCVBUF" : 0x0008,
249+
"SO_SNDLOWAT" : 0x0013,
250+
"SO_RCVLOWAT" : 0x0012,
251+
"SO_SNDTIMEO" : 0x0015,
252+
"SO_RCVTIMEO" : 0x0014,
253+
}
254+
255+
131256
mips_socket_types = {
132-
'SOCK_DGRAM' : 0x1,
133257
'SOCK_STREAM' : 0x2,
258+
'SOCK_DGRAM' : 0x1,
134259
'SOCK_RAW' : 0x3,
135260
'SOCK_RDM' : 0x4,
136261
'SOCK_SEQPACKET' : 0x5,
137262
'SOCK_DCCP' : 0x6,
138263
'SOCK_PACKET' : 0xa,
139-
'SOCK_CLOEXEC' : 0x80000,
140-
'SOCK_NONBLOCK' : 0x80,
141264
}
142265

143266

@@ -192,6 +315,89 @@
192315
'AF_MAX' : 0x2c,
193316
}
194317

318+
# https://docs.huihoo.com/doxygen/linux/kernel/3.7/arch_2mips_2include_2uapi_2asm_2socket_8h_source.html
319+
# https://android-review.linaro.org/plugins/gitiles/platform/prebuilts/gcc/darwin-x86/mips/mipsel-linux-android-4.4.3/+/78060bd30f50c43c7442f32e7740efcdb87ba587/sysroot/usr/include/linux/in.h
320+
mips_socket_level = {
321+
'SOL_SOCKET' : 0xffff,
322+
'IPPROTO_IP' : 0x0000,
323+
'IPPROTO_TCP' : 0x0006,
324+
'IPPROTO_UDP' : 0x0011,
325+
'IPPROTO_IPV6' : 0x0029,
326+
'IPPROTO_RAW' : 0x00ff,
327+
}
328+
329+
# https://docs.huihoo.com/doxygen/linux/kernel/3.7/arch_2mips_2include_2uapi_2asm_2socket_8h_source.html
330+
# https://github.com/torvalds/linux/blob/master/arch/mips/include/uapi/asm/socket.h
331+
mips_socket_options = {
332+
"SO_DEBUG" : 0x0001,
333+
"SO_REUSEADDR" : 0x0004,
334+
"SO_KEEPALIVE" : 0x0008,
335+
"SO_DONTROUTE" : 0x0010,
336+
"SO_BROADCAST" : 0x0020,
337+
"SO_LINGER" : 0x0080,
338+
"SO_OOBINLINE" : 0x0100,
339+
"SO_SNDBUF" : 0x1001,
340+
"SO_RCVBUF" : 0x1002,
341+
"SO_SNDLOWAT" : 0x1003,
342+
"SO_RCVLOWAT" : 0x1004,
343+
"SO_SNDTIMEO_OLD" : 0x1005,
344+
"SO_RCVTIMEO_OLD" : 0x1006,
345+
"SO_TIMESTAMP_OLD" : 0x001d,
346+
# "SO_TIMESTAMPNS_OLD" : 0x0023,
347+
# "SO_TIMESTAMPING_OLD" : 0x0025,
348+
"SO_TIMESTAMP_NEW" : 0x003f,
349+
"SO_TIMESTAMPNS_NEW" : 0x0040,
350+
"SO_TIMESTAMPING_NEW" : 0x0041,
351+
"SO_RCVTIMEO_NEW" : 0x0042,
352+
"SO_SNDTIMEO_NEW" : 0x0043,
353+
}
354+
355+
356+
mips_socket_ip_options = {
357+
"IP_TOS" : 0x0001,
358+
"IP_TTL" : 0x0002,
359+
"IP_HDRINCL" : 0x0003,
360+
"IP_OPTIONS" : 0x0004,
361+
"IP_ROUTER_ALERT" : 0x0005,
362+
"IP_RECVOPTS" : 0x0006,
363+
"IP_RETOPTS" : 0x0007,
364+
"IP_PKTINFO" : 0x0008,
365+
"IP_MTU_DISCOVER" : 0x000a,
366+
"IP_RECVERR" : 0x000b,
367+
"IP_RECVTTL" : 0x000c,
368+
"IP_RECVTOS" : 0x000d,
369+
"IP_MTU" : 0x000e,
370+
"IP_FREEBIND" : 0x000f,
371+
"IP_PASSSEC" : 0x0012,
372+
"IP_TRANSPARENT" : 0x0013,
373+
"IP_RECVORIGDSTADDR" : 0x0014,
374+
"IP_NODEFRAG" : 0x0016,
375+
"IP_BIND_ADDRESS_NO_PORT" : 0x0018,
376+
"IP_MULTICAST_IF" : 0x0020,
377+
"IP_MULTICAST_TTL" : 0x0021,
378+
"IP_MULTICAST_LOOP" : 0x0022,
379+
"IP_ADD_MEMBERSHIP" : 0x0023,
380+
"IP_DROP_MEMBERSHIP" : 0x0024,
381+
"IP_UNBLOCK_SOURCE" : 0x0025,
382+
"IP_BLOCK_SOURCE" : 0x0026,
383+
"IP_ADD_SOURCE_MEMBERSHIP" : 0x0027,
384+
"IP_DROP_SOURCE_MEMBERSHIP" : 0x0028,
385+
"IP_MSFILTER" : 0x0029,
386+
"IP_MULTICAST_ALL" : 0x0031,
387+
"SO_SNDTIMEO_OLD" : 0x1005,
388+
"SO_RCVTIMEO_OLD" : 0x1006,
389+
"SO_TIMESTAMP_OLD" : 0x001d,
390+
# "SO_TIMESTAMPNS_OLD" : 0x0023,
391+
# "SO_TIMESTAMPING_OLD" : 0x0025,
392+
"SO_TIMESTAMP_NEW" : 0x003f,
393+
"SO_TIMESTAMPNS_NEW" : 0x0040,
394+
"SO_TIMESTAMPING_NEW" : 0x0041,
395+
"SO_RCVTIMEO_NEW" : 0x0042,
396+
"SO_SNDTIMEO_NEW" : 0x0043,
397+
398+
}
399+
400+
195401
mac_open_flags = {
196402
"O_RDONLY" : 0x0000,
197403
"O_WRONLY" : 0x0001,

qiling/os/posix/const_mapping.py

+46-3
Original file line numberDiff line numberDiff line change
@@ -285,8 +285,9 @@ def socket_type_mapping(t, arch):
285285
QL_ARCH.MIPS: mips_socket_types,
286286
QL_OS.MACOS: linux_socket_types,
287287
}.get(arch)
288-
289-
return _constant_mapping(t, socket_type_map)
288+
# https://code.woboq.org/linux/linux/net/socket.c.html#1363
289+
t &= SOCK_TYPE_MASK
290+
return _constant_mapping(t, socket_type_map, single_mapping=True)
290291

291292

292293
def socket_domain_mapping(p, arch):
@@ -297,7 +298,49 @@ def socket_domain_mapping(p, arch):
297298
QL_ARCH.ARM_THUMB: arm_socket_domain,
298299
QL_ARCH.ARM64: arm_socket_domain,
299300
QL_ARCH.MIPS: mips_socket_domain,
300-
QL_OS.MACOS: "macos_socket_domain",
301+
QL_OS.MACOS: macos_socket_domain,
301302
}.get(arch)
302303

303304
return _constant_mapping(p, socket_domain_map, single_mapping=True)
305+
306+
307+
def socket_level_mapping(t, arch):
308+
socket_level_map = {
309+
QL_ARCH.X86: linux_socket_level,
310+
QL_ARCH.X8664: linux_socket_level,
311+
QL_ARCH.ARM: arm_socket_level,
312+
QL_ARCH.ARM_THUMB: arm_socket_level,
313+
QL_ARCH.ARM64: arm_socket_level,
314+
QL_ARCH.MIPS: mips_socket_level,
315+
QL_OS.MACOS: linux_socket_level,
316+
}.get(arch)
317+
318+
return _constant_mapping(t, socket_level_map, single_mapping=True)
319+
320+
321+
def socket_ip_option_mapping(t, arch):
322+
socket_option_map = {
323+
QL_ARCH.X86: linux_socket_ip_options,
324+
QL_ARCH.X8664: linux_socket_ip_options,
325+
QL_ARCH.ARM: linux_socket_ip_options,
326+
QL_ARCH.ARM_THUMB: linux_socket_ip_options,
327+
QL_ARCH.ARM64: linux_socket_ip_options,
328+
QL_ARCH.MIPS: mips_socket_ip_options,
329+
QL_OS.MACOS: macos_socket_ip_options,
330+
}.get(arch)
331+
332+
return _constant_mapping(t, socket_option_map, single_mapping=True)
333+
334+
335+
def socket_option_mapping(t, arch):
336+
socket_option_map = {
337+
QL_ARCH.X86: linux_socket_options,
338+
QL_ARCH.X8664: linux_socket_options,
339+
QL_ARCH.ARM: arm_socket_options,
340+
QL_ARCH.ARM_THUMB: arm_socket_options,
341+
QL_ARCH.ARM64: arm_socket_options,
342+
QL_ARCH.MIPS: mips_socket_options,
343+
QL_OS.MACOS: linux_socket_options,
344+
}.get(arch)
345+
346+
return _constant_mapping(t, socket_option_map, single_mapping=True)

0 commit comments

Comments
 (0)