31 ΡΠ»ΠΈ Π±ΡΡ Π° ΠΈΠ·Π΄Π°Π΄Π΅Π½ΠΈ Π²Π΅ΡΡΠΈΠΈ 0.15.0 ΠΈ 0.15.1 Mettle β Π΅Π·ΠΈΠΊ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Ρ ΡΡΠ°ΡΠΈΡΠ½Π° ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ:
ΠΠ°ΡΠΈΠ²Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° x86-64 (+ AVX2), AArch64, NVIDIA PTX, SPIR-V (OpenCL 2.0).
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½ Π»ΠΈΠ½ΠΊΠ΅Ρ Π·Π° Windows PE.
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ Π½Π° Π½ΠΈΠ²ΠΎ ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄:
- ΠΠ΅Π· Π²ΡΠ½ΡΠ½ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈ.
- Π’ΠΎΡΠΊΠΈ Π½Π° ΡΠΏΠΈΡΠ°Π½Π΅, ΡΡΡΠΏΠΊΠΎΠ² ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΡΠ΅ΡΠ΅Π½Π΅ ΠΈ ΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π² ΡΠ΅Π°Π»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΡΠ΅Π· βdebug-hooks.
- ΠΠ΅Π· gdb, PDB ΠΈ DWARF.
ΠΠ΅ΠΊΠ΅Π½Π΄ CUDA.
ΠΠ΅Π· LLVM, Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° ΠΈ ΡΠ°Π½ΡΠ°ΠΉΠΌ.
ΠΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅: ΡΡΠ½ΠΊΡΠΈΠΈ Ρ Π°ΡΡΠΈΠ±ΡΡ @test ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π² ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° mettle test, Π±Π΅Π· Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π° Π±ΠΈΠ½Π°ΡΠ΅Π½ ΡΠ°ΠΉΠ». ΠΠΎΠΌΠ°Π½Π΄Π°ΡΠ° mettle trace ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠ° Π΅Π΄Π½Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΈ ΠΈΠ·Π²Π΅ΠΆΠ΄Π° ΡΡΡΠΏΠΊΠ° ΠΏΠΎ ΡΡΡΠΏΠΊΠ° ΡΠ»Π΅Π΄Π΅Π½Π΅ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅. ΠΠΎΠΌΠ°Π½Π΄Π°ΡΠ° βpgo ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠ° ΡΡΠ½ΠΊΡΠΈΡ main() Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ ΠΈ ΠΏΡΠ΅Π΄Π°Π²Π° ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡΠ΅ ΡΠ΅ΡΡΠΎΡΠΈ Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡΠ°.
-
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΡΠΈΠΌΠ΅Ρ ΠΠ½Π°Π»ΠΎΠ³ Π½Π° Rust Use-after-free (Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ) free(p); p[0] ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΎΡΡ / Drop ΠΠ²ΠΎΠ΅Π½ free free(p); free(p) ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΎΡΡ Use-after-free ΠΏΡΠ΅Π· Π°Π»ΠΈΠ°Ρ q = p; free(q); p[0] ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ° Π½Π° ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ²Π°Π½Π΅ Use-after-free ΠΏΡΠ΅Π· ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ (ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΎ) consume(p); p[0] ΠΊΡΠ΄Π΅ΡΠΎ consume ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π° p ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ° Π½Π° ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ²Π°Π½Π΅ ΠΠ°Π΅ΠΌΠ°Π½Π΅, ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°ΡΠΎ ΠΈΠ·Π²ΡΠ½ ΡΡΠ΅ΠΊΠ° { var x; g = &x[0]; } use(g) ΠΆΠΈΠ²ΠΎΡΠ½ΠΈ (βa) ΠΡΡΡΠ΅ΡΠ΅Π½ ΡΠΊΠ°Π·Π°ΡΠ΅Π» ΡΠ»Π΅Π΄ realloc q = &buf[i]; realloc(buf,..); q[0] Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π½Π° ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ° ΠΡΡΡΠ΅ΡΠ΅Π½ ΡΠΊΠ°Π·Π°ΡΠ΅Π» ΡΠ»Π΅Π΄ free q = &buf[i]; free(buf); q[0] ΠΏΠΎΡΡΠ²Π°ΡΠ° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈΡ ΠΡΡΡΠ°Π½Π΅ Π½Π° Π°Π΄ΡΠ΅Ρ Π½Π° Π»ΠΎΠΊΠ°Π»Π΅Π½ ΡΡΠ΅ΠΊ return &local fn() -> &T Π³ΡΠ΅ΡΠΊΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΠΆΠΈΠ²ΠΎΡΠ° ΠΠ·ΡΠ΅ΠΊΠ»Π° ΠΏΠ°ΠΌΠ΅Ρ (Π½ΡΠΌΠ° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΠΊ ΠΏΠΎ ΠΊΠ°ΠΊΡΠ²ΡΠΎ ΠΈ Π΄Π° Π΅ ΠΏΡΡ) var p = malloc(n); return 0 (Rust ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π° ΡΡΠ΅Π· Drop)
ΠΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ Π΅ Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° libmtlc:
- Π‘ΠΎΠ±ΡΡΠ²Π΅Π½ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ Π΅Π·ΠΈΠΊ (IR).
- ΠΠ»Π°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈ GNN ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡΠΈ Π½Π° ΠΊΠΎΠ΄.
- ΠΠ°ΡΠΈΠ²Π½Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ Π½Π° ΠΊΠΎΠ΄ (x86-64 (+ AVX2), AArch64, NVIDIA PTX, SPIR-V (OpenCL 2.0)).
- ΠΠ°ΡΠΈΠ²Π½ΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅.
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠ΅ ΡΠ° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡ ΠΎΡ ΠΠ΅ΠΉΠΏΡΠ°ΡΠ½ suidvandiewereld Π½Π° Π΅Π·ΠΈΠΊ C (ΡΡΠ°Π½Π΄Π°ΡΡ C99) ΠΈ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π°Ρ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΡ Apache-2.0.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: linux.org.ru
