smallworld-re 1.0.3__py3-none-any.whl → 2.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (306) hide show
  1. smallworld/analyses/__init__.py +8 -0
  2. smallworld/analyses/analysis.py +8 -67
  3. smallworld/analyses/code_coverage.py +1 -2
  4. smallworld/analyses/colorizer.py +301 -534
  5. smallworld/analyses/colorizer_def_use.py +217 -0
  6. smallworld/analyses/colorizer_summary.py +173 -83
  7. smallworld/analyses/field_detection/field_analysis.py +7 -8
  8. smallworld/analyses/field_detection/hints.py +1 -1
  9. smallworld/analyses/field_detection/malloc.py +2 -2
  10. smallworld/analyses/trace_execution.py +160 -0
  11. smallworld/analyses/trace_execution_types.py +42 -0
  12. smallworld/analyses/unstable/angr/divergence.py +1 -2
  13. smallworld/analyses/unstable/angr/model.py +5 -6
  14. smallworld/analyses/unstable/angr_nwbt.py +3 -4
  15. smallworld/analyses/unstable/code_coverage.py +2 -3
  16. smallworld/analyses/unstable/code_reachable.py +2 -3
  17. smallworld/analyses/unstable/control_flow_tracer.py +2 -3
  18. smallworld/analyses/unstable/pointer_finder.py +2 -3
  19. smallworld/analyses/unstable/utils/tui.py +71 -0
  20. smallworld/emulators/__init__.py +3 -1
  21. smallworld/emulators/angr/angr.py +30 -9
  22. smallworld/emulators/angr/machdefs/__init__.py +2 -0
  23. smallworld/emulators/angr/machdefs/aarch64.py +1 -1
  24. smallworld/emulators/angr/machdefs/amd64.py +0 -4
  25. smallworld/emulators/angr/machdefs/arm.py +0 -2
  26. smallworld/emulators/angr/machdefs/i386.py +0 -2
  27. smallworld/emulators/angr/machdefs/loongarch.py +340 -0
  28. smallworld/emulators/angr/machdefs/machdef.py +1 -8
  29. smallworld/emulators/angr/machdefs/mips.py +0 -2
  30. smallworld/emulators/angr/machdefs/mips64.py +0 -2
  31. smallworld/emulators/angr/machdefs/ppc.py +1 -2
  32. smallworld/emulators/angr/machdefs/riscv.py +8 -10
  33. smallworld/emulators/angr/machdefs/xtensa.py +7 -4
  34. smallworld/emulators/emulator.py +22 -0
  35. smallworld/emulators/ghidra/__init__.py +37 -0
  36. smallworld/emulators/ghidra/ghidra.py +513 -0
  37. smallworld/emulators/ghidra/machdefs/__init__.py +31 -0
  38. smallworld/emulators/ghidra/machdefs/aarch64.py +289 -0
  39. smallworld/emulators/ghidra/machdefs/amd64.py +185 -0
  40. smallworld/emulators/ghidra/machdefs/arm.py +370 -0
  41. smallworld/emulators/ghidra/machdefs/i386.py +109 -0
  42. smallworld/emulators/ghidra/machdefs/loongarch.py +162 -0
  43. smallworld/emulators/ghidra/machdefs/machdef.py +81 -0
  44. smallworld/emulators/ghidra/machdefs/mips.py +163 -0
  45. smallworld/emulators/ghidra/machdefs/mips64.py +186 -0
  46. smallworld/emulators/ghidra/machdefs/ppc.py +98 -0
  47. smallworld/emulators/ghidra/machdefs/riscv.py +208 -0
  48. smallworld/emulators/ghidra/machdefs/xtensa.py +21 -0
  49. smallworld/emulators/ghidra/typing.py +28 -0
  50. smallworld/emulators/hookable.py +18 -4
  51. smallworld/emulators/panda/machdefs/__init__.py +2 -2
  52. smallworld/emulators/panda/machdefs/aarch64.py +186 -11
  53. smallworld/emulators/panda/machdefs/amd64.py +103 -11
  54. smallworld/emulators/panda/machdefs/arm.py +216 -20
  55. smallworld/emulators/panda/machdefs/i386.py +30 -7
  56. smallworld/emulators/panda/machdefs/machdef.py +9 -16
  57. smallworld/emulators/panda/machdefs/mips.py +49 -5
  58. smallworld/emulators/panda/machdefs/mips64.py +57 -5
  59. smallworld/emulators/panda/machdefs/ppc.py +38 -13
  60. smallworld/emulators/panda/panda.py +146 -44
  61. smallworld/emulators/unicorn/__init__.py +2 -0
  62. smallworld/emulators/unicorn/machdefs/aarch64.py +253 -264
  63. smallworld/emulators/unicorn/machdefs/amd64.py +254 -259
  64. smallworld/emulators/unicorn/machdefs/arm.py +200 -212
  65. smallworld/emulators/unicorn/machdefs/i386.py +84 -90
  66. smallworld/emulators/unicorn/machdefs/machdef.py +2 -23
  67. smallworld/emulators/unicorn/machdefs/mips.py +127 -135
  68. smallworld/emulators/unicorn/unicorn.py +52 -13
  69. smallworld/helpers.py +4 -19
  70. smallworld/hinting/hinting.py +22 -192
  71. smallworld/hinting/hints.py +50 -18
  72. smallworld/instructions/bsid.py +8 -8
  73. smallworld/logging.py +4 -2
  74. smallworld/platforms/__init__.py +12 -0
  75. smallworld/platforms/defs/__init__.py +36 -0
  76. smallworld/platforms/defs/aarch64.py +450 -0
  77. smallworld/platforms/defs/amd64.py +463 -0
  78. smallworld/platforms/defs/arm.py +519 -0
  79. smallworld/platforms/defs/i386.py +258 -0
  80. smallworld/platforms/defs/loongarch.py +270 -0
  81. smallworld/platforms/defs/mips.py +321 -0
  82. smallworld/platforms/defs/mips64.py +313 -0
  83. smallworld/platforms/defs/platformdef.py +97 -0
  84. smallworld/platforms/defs/powerpc.py +259 -0
  85. smallworld/platforms/defs/riscv.py +257 -0
  86. smallworld/platforms/defs/xtensa.py +96 -0
  87. smallworld/{platforms.py → platforms/platforms.py} +3 -0
  88. smallworld/state/cpus/__init__.py +2 -0
  89. smallworld/state/cpus/aarch64.py +0 -9
  90. smallworld/state/cpus/amd64.py +6 -28
  91. smallworld/state/cpus/arm.py +0 -11
  92. smallworld/state/cpus/cpu.py +0 -11
  93. smallworld/state/cpus/i386.py +0 -7
  94. smallworld/state/cpus/loongarch.py +299 -0
  95. smallworld/state/cpus/mips.py +4 -47
  96. smallworld/state/cpus/mips64.py +18 -58
  97. smallworld/state/cpus/powerpc.py +2 -9
  98. smallworld/state/cpus/riscv.py +1 -11
  99. smallworld/state/cpus/xtensa.py +0 -5
  100. smallworld/state/memory/code.py +38 -2
  101. smallworld/state/memory/elf/__init__.py +5 -1
  102. smallworld/state/memory/elf/coredump/__init__.py +3 -0
  103. smallworld/state/memory/elf/coredump/coredump.py +46 -0
  104. smallworld/state/memory/elf/coredump/prstatus/__init__.py +27 -0
  105. smallworld/state/memory/elf/coredump/prstatus/aarch64.py +46 -0
  106. smallworld/state/memory/elf/coredump/prstatus/amd64.py +40 -0
  107. smallworld/state/memory/elf/coredump/prstatus/arm.py +53 -0
  108. smallworld/state/memory/elf/coredump/prstatus/i386.py +30 -0
  109. smallworld/state/memory/elf/coredump/prstatus/mips.py +55 -0
  110. smallworld/state/memory/elf/coredump/prstatus/mips64.py +57 -0
  111. smallworld/state/memory/elf/coredump/prstatus/ppc.py +82 -0
  112. smallworld/state/memory/elf/coredump/prstatus/prstatus.py +129 -0
  113. smallworld/state/memory/elf/elf.py +211 -57
  114. smallworld/state/memory/elf/register_state.py +36 -0
  115. smallworld/state/memory/elf/rela/__init__.py +2 -0
  116. smallworld/state/memory/elf/rela/aarch64.py +3 -1
  117. smallworld/state/memory/elf/rela/amd64.py +4 -2
  118. smallworld/state/memory/elf/rela/arm.py +4 -2
  119. smallworld/state/memory/elf/rela/i386.py +4 -2
  120. smallworld/state/memory/elf/rela/loongarch.py +32 -0
  121. smallworld/state/memory/elf/rela/mips.py +39 -18
  122. smallworld/state/memory/elf/rela/ppc.py +31 -14
  123. smallworld/state/memory/elf/structs.py +3 -0
  124. smallworld/state/memory/heap.py +2 -2
  125. smallworld/state/memory/memory.py +18 -0
  126. smallworld/state/memory/pe/__init__.py +3 -0
  127. smallworld/state/memory/pe/pe.py +361 -0
  128. smallworld/state/memory/pe/structs.py +60 -0
  129. smallworld/state/memory/stack/__init__.py +2 -0
  130. smallworld/state/memory/stack/loongarch.py +26 -0
  131. smallworld/state/models/__init__.py +29 -2
  132. smallworld/state/models/aarch64/__init__.py +1 -0
  133. smallworld/state/models/aarch64/systemv/__init__.py +6 -0
  134. smallworld/state/models/aarch64/systemv/c99/__init__.py +12 -0
  135. smallworld/state/models/aarch64/systemv/c99/signal.py +16 -0
  136. smallworld/state/models/aarch64/systemv/c99/stdio.py +265 -0
  137. smallworld/state/models/aarch64/systemv/c99/stdlib.py +169 -0
  138. smallworld/state/models/aarch64/systemv/c99/string.py +139 -0
  139. smallworld/state/models/aarch64/systemv/c99/time.py +61 -0
  140. smallworld/state/models/aarch64/systemv/posix/__init__.py +6 -0
  141. smallworld/state/models/aarch64/systemv/posix/libgen.py +16 -0
  142. smallworld/state/models/aarch64/systemv/posix/signal.py +157 -0
  143. smallworld/state/models/aarch64/systemv/systemv.py +80 -0
  144. smallworld/state/models/amd64/__init__.py +1 -0
  145. smallworld/state/models/amd64/systemv/__init__.py +6 -0
  146. smallworld/state/models/amd64/systemv/c99/__init__.py +12 -0
  147. smallworld/state/models/amd64/systemv/c99/signal.py +16 -0
  148. smallworld/state/models/amd64/systemv/c99/stdio.py +265 -0
  149. smallworld/state/models/amd64/systemv/c99/stdlib.py +169 -0
  150. smallworld/state/models/amd64/systemv/c99/string.py +139 -0
  151. smallworld/state/models/amd64/systemv/c99/time.py +61 -0
  152. smallworld/state/models/amd64/systemv/posix/__init__.py +6 -0
  153. smallworld/state/models/amd64/systemv/posix/libgen.py +16 -0
  154. smallworld/state/models/amd64/systemv/posix/signal.py +157 -0
  155. smallworld/state/models/amd64/systemv/systemv.py +78 -0
  156. smallworld/state/models/armel/__init__.py +1 -0
  157. smallworld/state/models/armel/systemv/__init__.py +6 -0
  158. smallworld/state/models/armel/systemv/c99/__init__.py +12 -0
  159. smallworld/state/models/armel/systemv/c99/signal.py +16 -0
  160. smallworld/state/models/armel/systemv/c99/stdio.py +265 -0
  161. smallworld/state/models/armel/systemv/c99/stdlib.py +169 -0
  162. smallworld/state/models/armel/systemv/c99/string.py +139 -0
  163. smallworld/state/models/armel/systemv/c99/time.py +61 -0
  164. smallworld/state/models/armel/systemv/posix/__init__.py +6 -0
  165. smallworld/state/models/armel/systemv/posix/libgen.py +16 -0
  166. smallworld/state/models/armel/systemv/posix/signal.py +157 -0
  167. smallworld/state/models/armel/systemv/systemv.py +82 -0
  168. smallworld/state/models/armhf/__init__.py +1 -0
  169. smallworld/state/models/armhf/systemv/__init__.py +6 -0
  170. smallworld/state/models/armhf/systemv/c99/__init__.py +12 -0
  171. smallworld/state/models/armhf/systemv/c99/signal.py +16 -0
  172. smallworld/state/models/armhf/systemv/c99/stdio.py +265 -0
  173. smallworld/state/models/armhf/systemv/c99/stdlib.py +169 -0
  174. smallworld/state/models/armhf/systemv/c99/string.py +139 -0
  175. smallworld/state/models/armhf/systemv/c99/time.py +61 -0
  176. smallworld/state/models/armhf/systemv/posix/__init__.py +6 -0
  177. smallworld/state/models/armhf/systemv/posix/libgen.py +16 -0
  178. smallworld/state/models/armhf/systemv/posix/signal.py +157 -0
  179. smallworld/state/models/armhf/systemv/systemv.py +77 -0
  180. smallworld/state/models/c99/__init__.py +12 -0
  181. smallworld/state/models/c99/fmt_print.py +915 -0
  182. smallworld/state/models/c99/fmt_scan.py +864 -0
  183. smallworld/state/models/c99/math.py +362 -0
  184. smallworld/state/models/c99/signal.py +71 -0
  185. smallworld/state/models/c99/stdio.py +1305 -0
  186. smallworld/state/models/c99/stdlib.py +595 -0
  187. smallworld/state/models/c99/string.py +674 -0
  188. smallworld/state/models/c99/time.py +340 -0
  189. smallworld/state/models/c99/utils.py +89 -0
  190. smallworld/state/models/cstd.py +759 -0
  191. smallworld/state/models/errno.py +581 -0
  192. smallworld/state/models/filedesc.py +515 -0
  193. smallworld/state/models/i386/__init__.py +1 -0
  194. smallworld/state/models/i386/systemv/__init__.py +6 -0
  195. smallworld/state/models/i386/systemv/c99/__init__.py +12 -0
  196. smallworld/state/models/i386/systemv/c99/signal.py +16 -0
  197. smallworld/state/models/i386/systemv/c99/stdio.py +265 -0
  198. smallworld/state/models/i386/systemv/c99/stdlib.py +169 -0
  199. smallworld/state/models/i386/systemv/c99/string.py +139 -0
  200. smallworld/state/models/i386/systemv/c99/time.py +61 -0
  201. smallworld/state/models/i386/systemv/posix/__init__.py +6 -0
  202. smallworld/state/models/i386/systemv/posix/libgen.py +16 -0
  203. smallworld/state/models/i386/systemv/posix/signal.py +157 -0
  204. smallworld/state/models/i386/systemv/systemv.py +71 -0
  205. smallworld/state/models/loongarch64/__init__.py +1 -0
  206. smallworld/state/models/loongarch64/systemv/__init__.py +6 -0
  207. smallworld/state/models/loongarch64/systemv/c99/__init__.py +12 -0
  208. smallworld/state/models/loongarch64/systemv/c99/signal.py +16 -0
  209. smallworld/state/models/loongarch64/systemv/c99/stdio.py +265 -0
  210. smallworld/state/models/loongarch64/systemv/c99/stdlib.py +169 -0
  211. smallworld/state/models/loongarch64/systemv/c99/string.py +139 -0
  212. smallworld/state/models/loongarch64/systemv/c99/time.py +61 -0
  213. smallworld/state/models/loongarch64/systemv/posix/__init__.py +6 -0
  214. smallworld/state/models/loongarch64/systemv/posix/libgen.py +16 -0
  215. smallworld/state/models/loongarch64/systemv/posix/signal.py +157 -0
  216. smallworld/state/models/loongarch64/systemv/systemv.py +83 -0
  217. smallworld/state/models/mips/__init__.py +1 -0
  218. smallworld/state/models/mips/systemv/__init__.py +6 -0
  219. smallworld/state/models/mips/systemv/c99/__init__.py +12 -0
  220. smallworld/state/models/mips/systemv/c99/signal.py +16 -0
  221. smallworld/state/models/mips/systemv/c99/stdio.py +265 -0
  222. smallworld/state/models/mips/systemv/c99/stdlib.py +169 -0
  223. smallworld/state/models/mips/systemv/c99/string.py +139 -0
  224. smallworld/state/models/mips/systemv/c99/time.py +61 -0
  225. smallworld/state/models/mips/systemv/posix/__init__.py +6 -0
  226. smallworld/state/models/mips/systemv/posix/libgen.py +16 -0
  227. smallworld/state/models/mips/systemv/posix/signal.py +157 -0
  228. smallworld/state/models/mips/systemv/systemv.py +78 -0
  229. smallworld/state/models/mips64/__init__.py +1 -0
  230. smallworld/state/models/mips64/systemv/__init__.py +6 -0
  231. smallworld/state/models/mips64/systemv/c99/__init__.py +12 -0
  232. smallworld/state/models/mips64/systemv/c99/signal.py +16 -0
  233. smallworld/state/models/mips64/systemv/c99/stdio.py +265 -0
  234. smallworld/state/models/mips64/systemv/c99/stdlib.py +169 -0
  235. smallworld/state/models/mips64/systemv/c99/string.py +139 -0
  236. smallworld/state/models/mips64/systemv/c99/time.py +61 -0
  237. smallworld/state/models/mips64/systemv/posix/__init__.py +6 -0
  238. smallworld/state/models/mips64/systemv/posix/libgen.py +16 -0
  239. smallworld/state/models/mips64/systemv/posix/signal.py +157 -0
  240. smallworld/state/models/mips64/systemv/systemv.py +98 -0
  241. smallworld/state/models/mips64el/__init__.py +1 -0
  242. smallworld/state/models/mips64el/systemv/__init__.py +6 -0
  243. smallworld/state/models/mips64el/systemv/c99/__init__.py +12 -0
  244. smallworld/state/models/mips64el/systemv/c99/signal.py +16 -0
  245. smallworld/state/models/mips64el/systemv/c99/stdio.py +265 -0
  246. smallworld/state/models/mips64el/systemv/c99/stdlib.py +169 -0
  247. smallworld/state/models/mips64el/systemv/c99/string.py +139 -0
  248. smallworld/state/models/mips64el/systemv/c99/time.py +61 -0
  249. smallworld/state/models/mips64el/systemv/posix/__init__.py +6 -0
  250. smallworld/state/models/mips64el/systemv/posix/libgen.py +16 -0
  251. smallworld/state/models/mips64el/systemv/posix/signal.py +157 -0
  252. smallworld/state/models/mips64el/systemv/systemv.py +96 -0
  253. smallworld/state/models/mipsel/__init__.py +1 -0
  254. smallworld/state/models/mipsel/systemv/__init__.py +6 -0
  255. smallworld/state/models/mipsel/systemv/c99/__init__.py +12 -0
  256. smallworld/state/models/mipsel/systemv/c99/signal.py +16 -0
  257. smallworld/state/models/mipsel/systemv/c99/stdio.py +265 -0
  258. smallworld/state/models/mipsel/systemv/c99/stdlib.py +169 -0
  259. smallworld/state/models/mipsel/systemv/c99/string.py +139 -0
  260. smallworld/state/models/mipsel/systemv/c99/time.py +61 -0
  261. smallworld/state/models/mipsel/systemv/posix/__init__.py +6 -0
  262. smallworld/state/models/mipsel/systemv/posix/libgen.py +16 -0
  263. smallworld/state/models/mipsel/systemv/posix/signal.py +157 -0
  264. smallworld/state/models/mipsel/systemv/systemv.py +78 -0
  265. smallworld/state/models/model.py +27 -2
  266. smallworld/state/models/posix/__init__.py +6 -0
  267. smallworld/state/models/posix/libgen.py +123 -0
  268. smallworld/state/models/posix/signal.py +690 -0
  269. smallworld/state/models/powerpc/__init__.py +1 -0
  270. smallworld/state/models/powerpc/systemv/__init__.py +6 -0
  271. smallworld/state/models/powerpc/systemv/c99/__init__.py +12 -0
  272. smallworld/state/models/powerpc/systemv/c99/signal.py +16 -0
  273. smallworld/state/models/powerpc/systemv/c99/stdio.py +265 -0
  274. smallworld/state/models/powerpc/systemv/c99/stdlib.py +169 -0
  275. smallworld/state/models/powerpc/systemv/c99/string.py +139 -0
  276. smallworld/state/models/powerpc/systemv/c99/time.py +61 -0
  277. smallworld/state/models/powerpc/systemv/posix/__init__.py +6 -0
  278. smallworld/state/models/powerpc/systemv/posix/libgen.py +16 -0
  279. smallworld/state/models/powerpc/systemv/posix/signal.py +157 -0
  280. smallworld/state/models/powerpc/systemv/systemv.py +93 -0
  281. smallworld/state/models/riscv64/__init__.py +1 -0
  282. smallworld/state/models/riscv64/systemv/__init__.py +6 -0
  283. smallworld/state/models/riscv64/systemv/c99/__init__.py +12 -0
  284. smallworld/state/models/riscv64/systemv/c99/signal.py +16 -0
  285. smallworld/state/models/riscv64/systemv/c99/stdio.py +265 -0
  286. smallworld/state/models/riscv64/systemv/c99/stdlib.py +169 -0
  287. smallworld/state/models/riscv64/systemv/c99/string.py +139 -0
  288. smallworld/state/models/riscv64/systemv/c99/time.py +61 -0
  289. smallworld/state/models/riscv64/systemv/posix/__init__.py +6 -0
  290. smallworld/state/models/riscv64/systemv/posix/libgen.py +16 -0
  291. smallworld/state/models/riscv64/systemv/posix/signal.py +157 -0
  292. smallworld/state/models/riscv64/systemv/systemv.py +85 -0
  293. smallworld/state/state.py +65 -24
  294. smallworld/state/unstable/elf.py +16 -31
  295. smallworld/utils.py +6 -1
  296. {smallworld_re-1.0.3.dist-info → smallworld_re-2.0.0.dist-info}/METADATA +74 -42
  297. smallworld_re-2.0.0.dist-info/RECORD +374 -0
  298. {smallworld_re-1.0.3.dist-info → smallworld_re-2.0.0.dist-info}/WHEEL +1 -1
  299. smallworld/state/models/x86/__init__.py +0 -2
  300. smallworld/state/models/x86/microsoftcdecl.py +0 -35
  301. smallworld/state/models/x86/systemv.py +0 -240
  302. smallworld_re-1.0.3.dist-info/RECORD +0 -166
  303. /smallworld/state/models/{posix.py → _posix.py} +0 -0
  304. {smallworld_re-1.0.3.dist-info → smallworld_re-2.0.0.dist-info}/entry_points.txt +0 -0
  305. {smallworld_re-1.0.3.dist-info → smallworld_re-2.0.0.dist-info}/licenses/LICENSE.txt +0 -0
  306. {smallworld_re-1.0.3.dist-info → smallworld_re-2.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,139 @@
1
+ from ....c99 import (
2
+ Memchr,
3
+ Memcmp,
4
+ Memcpy,
5
+ Memmove,
6
+ Memset,
7
+ Strcat,
8
+ Strchr,
9
+ Strcmp,
10
+ Strcoll,
11
+ Strcpy,
12
+ Strcspn,
13
+ Strerror,
14
+ Strlen,
15
+ Strncat,
16
+ Strncmp,
17
+ Strncpy,
18
+ Strpbrk,
19
+ Strrchr,
20
+ Strspn,
21
+ Strstr,
22
+ Strtok,
23
+ Strxfrm,
24
+ )
25
+ from ..systemv import AMD64SysVModel
26
+
27
+
28
+ class AMD64SysVMemcpy(Memcpy, AMD64SysVModel):
29
+ pass
30
+
31
+
32
+ class AMD64SysVMemmove(Memmove, AMD64SysVModel):
33
+ pass
34
+
35
+
36
+ class AMD64SysVStrcpy(Strcpy, AMD64SysVModel):
37
+ pass
38
+
39
+
40
+ class AMD64SysVStrncpy(Strncpy, AMD64SysVModel):
41
+ pass
42
+
43
+
44
+ class AMD64SysVStrcat(Strcat, AMD64SysVModel):
45
+ pass
46
+
47
+
48
+ class AMD64SysVStrncat(Strncat, AMD64SysVModel):
49
+ pass
50
+
51
+
52
+ class AMD64SysVMemcmp(Memcmp, AMD64SysVModel):
53
+ pass
54
+
55
+
56
+ class AMD64SysVStrncmp(Strncmp, AMD64SysVModel):
57
+ pass
58
+
59
+
60
+ class AMD64SysVStrcmp(Strcmp, AMD64SysVModel):
61
+ pass
62
+
63
+
64
+ class AMD64SysVStrcoll(Strcoll, AMD64SysVModel):
65
+ pass
66
+
67
+
68
+ class AMD64SysVStrxfrm(Strxfrm, AMD64SysVModel):
69
+ pass
70
+
71
+
72
+ class AMD64SysVMemchr(Memchr, AMD64SysVModel):
73
+ pass
74
+
75
+
76
+ class AMD64SysVStrchr(Strchr, AMD64SysVModel):
77
+ pass
78
+
79
+
80
+ class AMD64SysVStrcspn(Strcspn, AMD64SysVModel):
81
+ pass
82
+
83
+
84
+ class AMD64SysVStrpbrk(Strpbrk, AMD64SysVModel):
85
+ pass
86
+
87
+
88
+ class AMD64SysVStrrchr(Strrchr, AMD64SysVModel):
89
+ pass
90
+
91
+
92
+ class AMD64SysVStrspn(Strspn, AMD64SysVModel):
93
+ pass
94
+
95
+
96
+ class AMD64SysVStrstr(Strstr, AMD64SysVModel):
97
+ pass
98
+
99
+
100
+ class AMD64SysVStrtok(Strtok, AMD64SysVModel):
101
+ pass
102
+
103
+
104
+ class AMD64SysVMemset(Memset, AMD64SysVModel):
105
+ pass
106
+
107
+
108
+ class AMD64SysVStrerror(Strerror, AMD64SysVModel):
109
+ pass
110
+
111
+
112
+ class AMD64SysVStrlen(Strlen, AMD64SysVModel):
113
+ pass
114
+
115
+
116
+ __all__ = [
117
+ "AMD64SysVMemcpy",
118
+ "AMD64SysVMemmove",
119
+ "AMD64SysVStrcpy",
120
+ "AMD64SysVStrncpy",
121
+ "AMD64SysVStrcat",
122
+ "AMD64SysVStrncat",
123
+ "AMD64SysVMemcmp",
124
+ "AMD64SysVStrncmp",
125
+ "AMD64SysVStrcmp",
126
+ "AMD64SysVStrcoll",
127
+ "AMD64SysVStrxfrm",
128
+ "AMD64SysVMemchr",
129
+ "AMD64SysVStrchr",
130
+ "AMD64SysVStrcspn",
131
+ "AMD64SysVStrpbrk",
132
+ "AMD64SysVStrrchr",
133
+ "AMD64SysVStrspn",
134
+ "AMD64SysVStrstr",
135
+ "AMD64SysVStrtok",
136
+ "AMD64SysVMemset",
137
+ "AMD64SysVStrerror",
138
+ "AMD64SysVStrlen",
139
+ ]
@@ -0,0 +1,61 @@
1
+ from ....c99 import (
2
+ Asctime,
3
+ Clock,
4
+ Ctime,
5
+ Difftime,
6
+ Gmtime,
7
+ Localtime,
8
+ Mktime,
9
+ Strftime,
10
+ Time,
11
+ )
12
+ from ..systemv import AMD64SysVModel
13
+
14
+
15
+ class AMD64SysVTime(Time, AMD64SysVModel):
16
+ pass
17
+
18
+
19
+ class AMD64SysVLocaltime(Localtime, AMD64SysVModel):
20
+ pass
21
+
22
+
23
+ class AMD64SysVGmtime(Gmtime, AMD64SysVModel):
24
+ pass
25
+
26
+
27
+ class AMD64SysVCtime(Ctime, AMD64SysVModel):
28
+ pass
29
+
30
+
31
+ class AMD64SysVAsctime(Asctime, AMD64SysVModel):
32
+ pass
33
+
34
+
35
+ class AMD64SysVStrftime(Strftime, AMD64SysVModel):
36
+ pass
37
+
38
+
39
+ class AMD64SysVDifftime(Difftime, AMD64SysVModel):
40
+ pass
41
+
42
+
43
+ class AMD64SysVMktime(Mktime, AMD64SysVModel):
44
+ pass
45
+
46
+
47
+ class AMD64SysVClock(Clock, AMD64SysVModel):
48
+ pass
49
+
50
+
51
+ __all__ = [
52
+ "AMD64SysVTime",
53
+ "AMD64SysVLocaltime",
54
+ "AMD64SysVGmtime",
55
+ "AMD64SysVCtime",
56
+ "AMD64SysVAsctime",
57
+ "AMD64SysVStrftime",
58
+ "AMD64SysVDifftime",
59
+ "AMD64SysVMktime",
60
+ "AMD64SysVClock",
61
+ ]
@@ -0,0 +1,6 @@
1
+ from .libgen import * # noqa: F401, F403
2
+ from .libgen import __all__ as __libgen__
3
+ from .signal import * # noqa: F401, F403
4
+ from .signal import __all__ as __signal__
5
+
6
+ __all__ = __libgen__ + __signal__
@@ -0,0 +1,16 @@
1
+ from ....posix.libgen import Basename, Dirname
2
+ from ..systemv import AMD64SysVModel
3
+
4
+
5
+ class AMD64SysVBasename(Basename, AMD64SysVModel):
6
+ pass
7
+
8
+
9
+ class AMD64SysVDirname(Dirname, AMD64SysVModel):
10
+ pass
11
+
12
+
13
+ __all__ = [
14
+ "AMD64SysVBasename",
15
+ "AMD64SysVDirname",
16
+ ]
@@ -0,0 +1,157 @@
1
+ from ....posix.signal import (
2
+ BsdSignal,
3
+ Kill,
4
+ Killpg,
5
+ PthreadKill,
6
+ PthreadSigmask,
7
+ Sigaction,
8
+ Sigaddset,
9
+ Sigaltstack,
10
+ Sigdelset,
11
+ Sigemptyset,
12
+ Sigfillset,
13
+ Sighold,
14
+ Sigignore,
15
+ Siginterrupt,
16
+ Sigismember,
17
+ Sigpause,
18
+ Sigpending,
19
+ Sigprocmask,
20
+ Sigqueue,
21
+ Sigrelse,
22
+ Sigset,
23
+ Sigsuspend,
24
+ Sigtimedwait,
25
+ Sigwait,
26
+ Sigwaitinfo,
27
+ )
28
+ from ..systemv import AMD64SysVModel
29
+
30
+
31
+ class AMD64SysVBsdSignal(BsdSignal, AMD64SysVModel):
32
+ pass
33
+
34
+
35
+ class AMD64SysVKill(Kill, AMD64SysVModel):
36
+ pass
37
+
38
+
39
+ class AMD64SysVKillpg(Killpg, AMD64SysVModel):
40
+ pass
41
+
42
+
43
+ class AMD64SysVPthreadKill(PthreadKill, AMD64SysVModel):
44
+ pass
45
+
46
+
47
+ class AMD64SysVPthreadSigmask(PthreadSigmask, AMD64SysVModel):
48
+ pass
49
+
50
+
51
+ class AMD64SysVSigaction(Sigaction, AMD64SysVModel):
52
+ pass
53
+
54
+
55
+ class AMD64SysVSigaddset(Sigaddset, AMD64SysVModel):
56
+ pass
57
+
58
+
59
+ class AMD64SysVSigaltstack(Sigaltstack, AMD64SysVModel):
60
+ pass
61
+
62
+
63
+ class AMD64SysVSigdelset(Sigdelset, AMD64SysVModel):
64
+ pass
65
+
66
+
67
+ class AMD64SysVSigemptyset(Sigemptyset, AMD64SysVModel):
68
+ pass
69
+
70
+
71
+ class AMD64SysVSigfillset(Sigfillset, AMD64SysVModel):
72
+ pass
73
+
74
+
75
+ class AMD64SysVSighold(Sighold, AMD64SysVModel):
76
+ pass
77
+
78
+
79
+ class AMD64SysVSigignore(Sigignore, AMD64SysVModel):
80
+ pass
81
+
82
+
83
+ class AMD64SysVSiginterrupt(Siginterrupt, AMD64SysVModel):
84
+ pass
85
+
86
+
87
+ class AMD64SysVSigismember(Sigismember, AMD64SysVModel):
88
+ pass
89
+
90
+
91
+ class AMD64SysVSigpause(Sigpause, AMD64SysVModel):
92
+ pass
93
+
94
+
95
+ class AMD64SysVSigpending(Sigpending, AMD64SysVModel):
96
+ pass
97
+
98
+
99
+ class AMD64SysVSigprocmask(Sigprocmask, AMD64SysVModel):
100
+ pass
101
+
102
+
103
+ class AMD64SysVSigqueue(Sigqueue, AMD64SysVModel):
104
+ pass
105
+
106
+
107
+ class AMD64SysVSigrelse(Sigrelse, AMD64SysVModel):
108
+ pass
109
+
110
+
111
+ class AMD64SysVSigset(Sigset, AMD64SysVModel):
112
+ pass
113
+
114
+
115
+ class AMD64SysVSigsuspend(Sigsuspend, AMD64SysVModel):
116
+ pass
117
+
118
+
119
+ class AMD64SysVSigtimedwait(Sigtimedwait, AMD64SysVModel):
120
+ pass
121
+
122
+
123
+ class AMD64SysVSigwait(Sigwait, AMD64SysVModel):
124
+ pass
125
+
126
+
127
+ class AMD64SysVSigwaitinfo(Sigwaitinfo, AMD64SysVModel):
128
+ pass
129
+
130
+
131
+ __all__ = [
132
+ "AMD64SysVBsdSignal",
133
+ "AMD64SysVKill",
134
+ "AMD64SysVKillpg",
135
+ "AMD64SysVPthreadKill",
136
+ "AMD64SysVPthreadSigmask",
137
+ "AMD64SysVSigaction",
138
+ "AMD64SysVSigaddset",
139
+ "AMD64SysVSigaltstack",
140
+ "AMD64SysVSigdelset",
141
+ "AMD64SysVSigemptyset",
142
+ "AMD64SysVSigfillset",
143
+ "AMD64SysVSighold",
144
+ "AMD64SysVSigignore",
145
+ "AMD64SysVSiginterrupt",
146
+ "AMD64SysVSigismember",
147
+ "AMD64SysVSigpause",
148
+ "AMD64SysVSigpending",
149
+ "AMD64SysVSigprocmask",
150
+ "AMD64SysVSigqueue",
151
+ "AMD64SysVSigrelse",
152
+ "AMD64SysVSigset",
153
+ "AMD64SysVSigsuspend",
154
+ "AMD64SysVSigtimedwait",
155
+ "AMD64SysVSigwait",
156
+ "AMD64SysVSigwaitinfo",
157
+ ]
@@ -0,0 +1,78 @@
1
+ import struct
2
+
3
+ from ..... import emulators, platforms
4
+ from ...cstd import ArgumentType, CStdModel
5
+
6
+
7
+ class AMD64SysVModel(CStdModel):
8
+ """Base class for C models using the AMD64 System V ABI"""
9
+
10
+ platform = platforms.Platform(
11
+ platforms.Architecture.X86_64, platforms.Byteorder.LITTLE
12
+ )
13
+ abi = platforms.ABI.SYSTEMV
14
+
15
+ _int_sign_mask = 0x80000000
16
+ _int_inv_mask = 0xFFFFFFFF
17
+ _long_sign_mask = 0x8000000000000000
18
+ _long_inv_mask = 0xFFFFFFFFFFFFFFFF
19
+ _long_long_sign_mask = 0x8000000000000000
20
+ _long_long_inv_mask = 0xFFFFFFFFFFFFFFFF
21
+
22
+ _four_byte_types = {ArgumentType.INT, ArgumentType.UINT}
23
+
24
+ _eight_byte_types = {
25
+ ArgumentType.LONG,
26
+ ArgumentType.ULONG,
27
+ ArgumentType.LONGLONG,
28
+ ArgumentType.ULONGLONG,
29
+ ArgumentType.SIZE_T,
30
+ ArgumentType.SSIZE_T,
31
+ ArgumentType.POINTER,
32
+ }
33
+
34
+ _four_byte_arg_regs = ["edi", "esi", "edx", "ecx", "r8d", "r9d"]
35
+
36
+ _eight_byte_arg_regs = [
37
+ "rdi",
38
+ "rsi",
39
+ "rdx",
40
+ "rcx",
41
+ "r8",
42
+ "r9",
43
+ ]
44
+
45
+ _soft_float = False
46
+ _variadic_soft_float = False
47
+ _floats_are_doubles = False
48
+ _float_arg_regs = ["xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"]
49
+ _double_arg_regs = ["xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"]
50
+
51
+ _init_stack_offset = 8
52
+ _align_stack = False
53
+ _eight_byte_reg_size = 1
54
+ _double_reg_size = 1
55
+ _four_byte_stack_size = 8
56
+ _eight_byte_stack_size = 8
57
+ _float_stack_size = 8
58
+ _double_stack_size = 8
59
+
60
+ def _return_4_byte(self, emulator: emulators.Emulator, val: int) -> None:
61
+ """Return a four-byte type"""
62
+ emulator.write_register("eax", val)
63
+
64
+ def _return_8_byte(self, emulator: emulators.Emulator, val: int) -> None:
65
+ """Return an eight-byte type"""
66
+ emulator.write_register("rax", val)
67
+
68
+ def _return_float(self, emulator: emulators.Emulator, val: float) -> None:
69
+ """Return a float"""
70
+ data = struct.pack("<f", val)
71
+ intval = int.from_bytes(data, "little")
72
+ emulator.write_register("xmm0", intval)
73
+
74
+ def _return_double(self, emulator: emulators.Emulator, val: float) -> None:
75
+ """Return a double"""
76
+ data = struct.pack("<d", val)
77
+ intval = int.from_bytes(data, "little")
78
+ emulator.write_register("xmm0", intval)
@@ -0,0 +1 @@
1
+ from .systemv import __all__ as __sysv__ # noqa: F401
@@ -0,0 +1,6 @@
1
+ from .c99 import * # noqa: F401,F403
2
+ from .c99 import __all__ as __c99__
3
+ from .posix import * # noqa: F401,F403
4
+ from .posix import __all__ as __posix__
5
+
6
+ __all__ = __c99__ + __posix__
@@ -0,0 +1,12 @@
1
+ from .signal import * # noqa F401,F403
2
+ from .signal import __all__ as __signal__
3
+ from .stdio import * # noqa F401,F403
4
+ from .stdio import __all__ as __stdio__
5
+ from .stdlib import * # noqa F401,F403
6
+ from .stdlib import __all__ as __stdlib__
7
+ from .string import * # noqa F401,F403
8
+ from .string import __all__ as __string__
9
+ from .time import * # noqa F401,F403
10
+ from .time import __all__ as __time__
11
+
12
+ __all__ = __signal__ + __stdlib__ + __string__ + __stdio__ + __time__
@@ -0,0 +1,16 @@
1
+ from ....c99.signal import Raise, Signal
2
+ from ..systemv import ArmELSysVModel
3
+
4
+
5
+ class ArmELSysVRaise(Raise, ArmELSysVModel):
6
+ pass
7
+
8
+
9
+ class ArmELSysVSignal(Signal, ArmELSysVModel):
10
+ pass
11
+
12
+
13
+ __all__ = [
14
+ "ArmELSysVRaise",
15
+ "ArmELSysVSignal",
16
+ ]