ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ Intel ΠΎΡΠΊΡΡΠ»Π° Π½Π°ΡΠ°Π±ΠΎΡΠΊΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ ControlFlag, Π½Π°ΡΠ΅Π»Π΅Π½Π½ΡΠΌ Π½Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΠΊΠΎΠ΄Π°. ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΎΠ±ΡΡΠ΅Π½Π½ΠΎΠΉ Π½Π° Π±ΠΎΠ»ΡΡΠΎΠΌ ΠΎΠ±ΡΡΠΌΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°, Π²ΡΡΠ²Π»ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ Π² ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ΅ΠΊΡΡΠ°Ρ , Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π½Π° Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ ΡΠ·ΡΠΊΠ°Ρ , ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ C/C++. Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π² ΠΊΠΎΠ΄Π΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π²ΠΈΠ΄ΠΎΠ² ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΎΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΠΊ ΠΈ Π½Π΅Π²Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΡ ΡΠΈΠΏΠΎΠ², Π΄ΠΎ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΏΡΡΠ΅Π½Π½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡ NULL Π² ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡ ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΏΠ°ΠΌΡΡΡΡ. ΠΠΎΠ΄ ControlFlag Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘++ ΠΈ ΠΎΡΠΊΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ MIT.
Π‘ΠΈΡΡΠ΅ΠΌΠ° ΡΠ°ΠΌΠΎΠΎΠ±ΡΡΠ°Π΅ΡΡΡ ΠΏΡΡΡΠΌ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠΌΠ΅ΡΡΠ΅Π³ΠΎΡΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΊΠΎΠ΄Π° ΠΎΡΠΊΡΡΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΡΡ Π² GitHub ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡ . ΠΠ° ΡΡΠ°Π΄ΠΈΠΈ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΈΠΏΠΎΠ²ΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π² ΠΊΠΎΠ΄Π΅ ΠΈ ΡΡΡΠΎΠΈΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ ΡΠ²ΡΠ·Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠΈΠΌΠΈ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌΠΈ, ΠΎΡΡΠ°ΠΆΠ°ΡΡΠ΅Π΅ ΠΏΠΎΡΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅. Π ΠΈΡΠΎΠ³Π΅ ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ ΡΡΠ°Π»ΠΎΠ½Π½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ ΠΏΡΠΈΠ½ΡΡΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡΠ΅Π΅ ΠΎΠΏΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π²ΡΠ΅Ρ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ΅ΠΊΡΡΠΎΠ².
ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΡ ΠΎΠΆΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π΅ΡΡΡΡΡΡ Ρ ΡΡΠ°Π»ΠΎΠ½Π½ΡΠΌ Π΄Π΅ΡΠ΅Π²ΠΎΠΌ ΠΏΡΠΈΠ½ΡΡΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ. ΠΠΎΠ»ΡΡΠΈΠ΅ ΡΠ°ΡΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Ρ ΡΠΎΡΠ΅Π΄Π½ΠΈΠΌΠΈ Π²Π΅ΡΠ²ΡΠΌΠΈ ΡΠ²ΠΈΠ΄Π΅ΡΠ΅Π»ΡΡΡΠ²ΡΡΡ ΠΎ Π½Π°Π»ΠΈΡΠΈΠΈ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ Π² ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌΠΎΠΌ ΡΠ°Π±Π»ΠΎΠ½Π΅. Π‘ΠΈΡΡΠ΅ΠΌΠ° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΡΠ²ΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π² ΡΠ°Π±Π»ΠΎΠ½Π΅, Π½ΠΎ ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ Π² ΠΊΠΎΠ΄Π΅ OpenSSL Π±ΡΠ»Π° Π²ΡΡΠ²Π»Π΅Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ «(s1 == NULL) ∧ (s2 == NULL)», ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΡΡΠ΅ΡΠ°Π»Π°ΡΡ Π² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΌ Π΄Π΅ΡΠ΅Π²Π΅ Π²ΡΠ΅Π³ΠΎ 8 ΡΠ°Π·, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ°Ρ Π²Π΅ΡΠΊΠ° ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ «(s1 == NULL) || (s2 == NULL)» Π²ΡΡΡΠ΅ΡΠ°Π»Π°ΡΡ ΠΎΠΊΠΎΠ»ΠΎ 7 ΡΡΡΡΡ ΡΠ°Π·. Π‘ΠΈΡΡΠ΅ΠΌΠ° ΡΠ°ΠΊΠΆΠ΅ Π²ΡΡΠ²ΠΈΠ»Π° Π°Π½ΠΎΠΌΠ°Π»ΠΈΡ «(s1 == NULL) | (s2 == NULL)» ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΡΡΠ΅ΡΠ°Π»Π°ΡΡ Π² Π΄Π΅ΡΠ΅Π²Π΅ 32 ΡΠ°Π·Π°.
ΠΡΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠ΄Π° «if (x = 7) y = x;» ΡΠΈΡΡΠ΅ΠΌΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»Π°, ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ΅ «if» Π΄Π»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠΈΡΠ»ΠΎΠ²ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ «ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ == ΡΠΈΡΠ»ΠΎ», ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡΡ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ «ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ = ΡΠΈΡΠ»ΠΎ» Π² Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΈ «if» Π²ΡΠ·Π²Π°Π½ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΊΠΎΠΉ. Π’Π°ΠΊΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π²ΡΠ»ΠΎΠ²ΠΈΠ»ΠΈ Π±Ρ ΠΈ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡ, Π½ΠΎ Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π½ΠΈΡ ControlFlag Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ Π³ΠΎΡΠΎΠ²ΡΡ ΠΏΡΠ°Π²ΠΈΠ», Π² ΠΊΠΎΡΠΎΡΡΡ ΡΡΡΠ΄Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ, Π° ΠΎΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΡΡΡ ΠΎΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π² Π±ΠΎΠ»ΡΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ².
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ° ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ControlFlag Π² ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
ΡΠ΅ΠΊΡΡΠ°Ρ
ΡΡΠΈΠ»ΠΈΡΡ cURL, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π±ΡΠ»Π° Π²ΡΡΠ²Π»Π΅Π½Π° Π½Π΅Π·Π°ΠΌΠ΅ΡΠ΅Π½Π½Π°Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ°ΠΌΠΈ ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΡΡΡΠΊΡΡΡΡ «s->keepon», ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π» ΡΠΈΡΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΠΏ, Π½ΠΎ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π»ΡΡ Ρ Π±ΡΠ»Π΅Π²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ TRUE. Π ΠΊΠΎΠ΄Π΅ OpenSSL, ΠΏΠΎΠΌΠΈΠΌΠΎ Π²ΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ «(s1 == NULL) ∧ (s2 == NULL)», ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ»ΠΈ Π²ΡΡΠ²Π»Π΅Π½Ρ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ Π² Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ
«(-2 == rv)» (ΠΌΠΈΠ½ΡΡ Π±ΡΠ» ΠΎΠΏΠ΅ΡΠ°ΡΠΊΠΎΠΉ) ΠΈ «BIO_puts(bp, «:»)
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru