Π‘ΡΠ°ΡΡΠ°ΠΏ Trasec ΡΠ°Π·Π²ΠΈΠ²Π°Π΅Ρ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ TrapC, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΎΠ±ΠΎΠΉ Π΄ΠΈΠ°Π»Π΅ΠΊΡ ΡΠ·ΡΠΊΠ° Π‘ΠΈ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ. ΠΠ»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΏΠ°ΠΌΡΡΡΡ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Π²ΡΡ ΠΎΠ΄ Π·Π° Π³ΡΠ°Π½ΠΈΡΡ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΠ° ΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠΆΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄ΡΠ½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ, Π² TrapC ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎ ΠΈΠ½ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠ° ΠΎΡΠΈΠ±ΠΎΠΊ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ (trap). ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π΄Π»Ρ TrapC ΠΏΠ»Π°Π½ΠΈΡΡΡΡ ΠΎΡΠΊΡΡΡΡ Π² 2025 Π³ΠΎΠ΄Ρ.
ΠΠ°ΡΠ²Π»Π΅Π½ΠΎ, ΡΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΏΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π½Π΅ Π±ΡΠ΄ΡΡ Π½Π°ΡΡΡΠ°ΡΡ ΠΏΡΠΈΠ²ΡΡΠ½ΡΠΉ ΡΠΊΠ»Π°Π΄ ΠΈ Π±ΡΠ΄ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡΡΡ ΡΠΈΠ»Π°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°. ΠΠΎ Π·Π°Π΄ΡΠΌΠΊΠ΅ Π°Π²ΡΠΎΡΠΎΠ² ΡΠ·ΡΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π±ΡΠ΄Π΅Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΡΡΡΠ»Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½ΠΈΠΌΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π²ΡΠ΅ Π³ΡΠ°Π½ΠΈΡΡ Π±ΡΡΠ΅ΡΠΎΠ². ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΡΠΈΠΏΡ ΠΈ Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ². ΠΡΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ Π±ΡΡΠ΅ΡΡ ΡΠ²Π½ΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½ΡΠ»ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ.
ΠΠΌΠ΅ΡΡΠΎ malloc Π² TrapC ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠΎΡ ΠΎΠΆΠΈΠΉ Π½Π° C++ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ new. ΠΡΠ·ΠΎΠ²Ρ free ΠΈ delete ΠΎΡΡΡΡΡΡΠ²ΡΡΡ, Π° Π·Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, ΡΡΠΎ Π·Π°ΡΠΈΡΠ°Π΅Ρ ΠΎΡ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΠΈΡ ΠΊ ΡΡΠ΅ΡΠΊΠ΅ ΠΏΠ°ΠΌΡΡΠΈ. Π ΠΊΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΡΡ, Π½ΠΎ Π±Π΅Π· ΡΠ±ΠΎΡΡΠΈΠΊΠ° ΠΌΡΡΠΎΡΠ°. ΠΠ° ΡΡΠΎΠ²Π½Π΅ ABI TrapC Π±ΡΠ΄Π΅Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ Π‘ΠΈ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ΄ Π½Π° TrapC ΠΈ ΡΠΈΡΡΠΎΠΌ Π‘ΠΈ, Π½ΠΎ Π΄Π»Ρ ΠΊΠΎΠ΄Π° Π‘ΠΈ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ.
ΠΡΠΎΠ΅ΠΊΡ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅Ρ Π ΠΎΠ±ΠΈΠ½ Π ΠΎΡ (Robin Rowe), Π±ΡΠ²ΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΡ Π½Π°ΡΠΊ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π²ΡΠΈΠΉ ΡΡΠ°ΡΡΠΈΠ΅ Π² ΠΊΠΎΠΌΠΈΡΠ΅ΡΠ°Ρ ΠΏΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠ² Π‘ ΠΈ Π‘++, Π² ΡΠ²ΠΎΡ Π²ΡΠ΅ΠΌΡ ΡΠΎΠ·Π΄Π°Π²ΡΠΈΠΉ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ Cinepaint, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠΈΠΉΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π³ΠΎΠ»Π»ΠΈΠ²ΡΠ΄ΡΠΊΠΈΡ ΡΠΈΠ»ΡΠΌΠΎΠ², ΠΈ POSIX-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ libunistd Π΄Π»Ρ Windows. Π‘ΠΎΡΡΡΠ΅Π΄ΠΈΡΠ΅Π»Π΅ΠΌ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Trasec Π²ΡΡΡΡΠΏΠ°Π΅Ρ ΠΠ°Π±ΡΠΈΡΠ»Ρ ΠΠ°Π½ΡΠ΅ΡΠ° (Gabrielle Pantera), Π·Π°Π½ΠΈΠΌΠ°Π²ΡΠ°Ρ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠΈΠΉ ΠΏΠΎΡΡ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Disney.
ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΡΡ, ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π»ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Ρ ΠΊΠΎΠ΄ΠΎΠΌ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°ΡΠ²Π»Π΅Π½ΠΎ, ΡΡΠΎ TrapC Π½Π΅ Π΄Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½ΠΈΡΡ Π±ΡΡΠ΅Ρ buff ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ «strcpy(buff,argv[1]);» ΠΈΠ»ΠΈ Π½Π΅ Π΄Π°ΡΡ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΈΠ»ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΌΠ°ΡΡΠΈΠ²Π° Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΌΠ΅ΡΠ°ΡΡΠ΅Π΅ Π΅Π³ΠΎ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΠ° ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½Π°Ρ Π·Π°ΡΠΈΡΠ° Π½Π΅ ΠΏΠΎΡΡΠ½ΡΠ΅ΡΡΡ. // darpa_tractor.c int main(int argc,char* argv[]) { char buff[8]; // TrapC implicitly zeros, no dirty memory int success = 0;// In C, buffer overwrite corrupts success strcpy(buff,argv[1]); // TrapC cannot overrun, strcpy safe if(!strcmp(buff,»s3cr8tpw»)) { success = 1; } if(success) // TrapC blocked strcpy overwrite, success good { printf(«Welcome!\n»); } return !success; } // trapc_ptr.c int main() { const char* ptr = «Hello World»; // 12 char wide while(ptr) // No buffer overrun with TrapC { printf(«%c»,*ptr); // print one char at a time ptr++; // Steps off the end: TrapC nulls ptr! } // Do NOT attempt this in C, will segfault! assert(ptr == 0); return 0; } // trapc_array.c int score[10]; printf(«%i»,score[-1]); // TrapC will not allow access for(int i = 0;i
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru