1987 рд╕реЗ рд╕реАрдзреЗ рдкрд░реНрд▓ рдбрд╛рд▓ рд░рд╣рд╛ рд╣реИ

LINUX.ORG.RU рдкрд░ рд╕рдорд╛рдЪрд╛рд░ " рдкрд░реНрд▓ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдХреЛрдб рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЧрд┐рдЯрд╣рдм рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ " рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдкрд░реНрд▓ 5 рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреЛ рдЕрдм рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧрд┐рдЯрд╣рдм рдкрд░ рд╣реИред

рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ рдХрд┐ рд╡реЗ рдХреИрд╕реЗ рд╡рд┐рд╕реНрдордп рдФрд░ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдВрдк рдЧрдП, рди рдХреЗрд╡рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкреВрд░реЗ 32-рд╡рд░реНрд╖реАрдп рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП, рдмрд▓реНрдХрд┐ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ (рдореБрджреНрджреЛрдВ рдореЗрдВ рдорд┐рд▓рд╛), рдкреИрдЪ (рдкреАрдЖрд░рдПрд╕ рдореЗрдВ рдорд┐рд▓рд╛), рд░рд┐рд▓реАрдЬ рдФрд░ рд╢рд╛рдЦрд╛рдПрдВред рд╢рд┐рд▓рд╛рд▓реЗрдЦ " 32 рд╕рд╛рд▓ рдкрд╣рд▓реЗ " рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдПрдХ рдЕрдиреИрдЪреНрдЫрд┐рдХ рдореБрд╕реНрдХрд╛рди рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред

рд╢реБрдХреНрд░рд╡рд╛рд░ рдХреА рд░рд╛рдд рдЗрд╕ рд╕реБрд╕реНрдд рдкрд░ рдФрд░ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдЬрдм рдмрд╛рд░рд┐рд╢ рдФрд░ рдмрд░реНрдл рд╕рдбрд╝рдХ рдкрд░ рдЕрдкреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЯрдкрдХ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рд╕рднреА рд╕рдбрд╝рдХ рдорд╛рд░реНрдЧ рд╢рд░рдж рдЛрддреБ рдореЗрдВ рдмрд╣ рдЧрдП рд╣реИрдВ? рдпрд╣ рд╕рд╣реА рд╣реИ, рд▓рд╛рд▓ рдЖрдВрдЦреЛрдВ рд╡рд╛рд▓рд╛! рддреЛ рдкреНрд░рдпреЛрдЧ рдФрд░ рд░реБрдЪрд┐ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдЖрдзреБрдирд┐рдХ x86_64 рдорд╢реАрди рдкрд░ рдкреНрд░рд╛рдЪреАрди рдкрд░реНрд▓ рдХреЛ рдПрдХ рд╕рдВрдХрд▓рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреАрд╕реАрд╕реА 9.2.0 рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд▓реЗрдиреЗ рдФрд░ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдХреНрдпрд╛ рдРрд╕рд╛ рдкреБрд░рд╛рдирд╛ рдХреЛрдб рд╕рдордп рдХреА рдХрд╕реМрдЯреА рдкрд░ рдЦрд░рд╛ рдЙрддрд░ рд╕рдХрддрд╛ рд╣реИ?


рдЖрдзреБрдирд┐рдХ рдЖрд░реНрдХ рдЖрд░реНрдХ рдбрд┐рд╕реНрдЯреНрд░реАрдмреНрдпреВрд╢рди рдбрд┐рд╕реНрдЯреНрд░реАрдмреНрдпреВрд╢рди, рдПрдХреНрд╕ рд╡рд┐рдВрдбреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╡рд┐рдВрдбреЛ рдореИрдиреЗрдЬрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ, рдЯреАрдбрдо рдХрд╛ рдкреНрд░рджрд░реНрд╢рдиред

рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдФрд░ nekromantnenko рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдирдВрдЧреЗ рдПрдХреНрд╕ рдФрд░ рд╡рд┐рдВрдбреЛ рдореИрдиреЗрдЬрд░ рдЯреНрд╡рдо рдХреЗ рд╕рд╛рде рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди рдХреЛ рддреИрдирд╛рдд рдХрд┐рдпрд╛, рдЬреЛ 1987 рдХреЗ рдмрд╛рдж рднреА рд░рд╣рддрд╛ рд╣реИред рдХреМрди рдЬрд╛рдирддрд╛ рд╣реИ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд▓реИрд░реА рд╡реЙрд▓ рдиреЗ рдЕрдкрдиреЗ рдкрд░реНрд▓ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдЯреНрд╡рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд▓рд┐рдЦрд╛ рд╣реЛ, рдЗрд╕рд▓рд┐рдП рдЙрд╕ рд╕рдордп рдХреА рдмреНрд▓реАрдбрд┐рдВрдЧ рдПрдЬ рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреА рдХреЛ рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдПред рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡рд┐рддрд░рдг рдЖрд░реНрдХ рд▓рд┐рдирдХреНрд╕ рд╣реИред рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдЙрдирдХреЗ рднрдВрдбрд╛рд░ рдореЗрдВ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдмрд╛рдж рдореЗрдВ рдХрд╛рдо рдЖрдИрдВред рддреЛ рдЪрд▓рд┐рдП!

рд╕рд╛рдордЧреНрд░реА:


1. рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рддреИрдпрд╛рд░реА
2. рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛
3. рдпрд╛рдХ рд╡реНрдпрд╛рдХрд░рдг рдлрд╝рд╛рдЗрд▓ рддреНрд░реБрдЯрд┐рдпрд╛рдБ
4. "C" рдкрд░ рдХреЛрдб рдХреЗ рд╕рдВрдХрд▓рди рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ
5. рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╕реБрдзрд╛рд░ рдЦрдВрдбрди рджреЛрд╖
6. рд╕рдВрдХреНрд╖реЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

1. рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рддреИрдпрд╛рд░реА


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдореЗрдВ рдПрдХ рддреИрдирд╛рдд рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдФрд░ рд╕рдВрдХрд▓рдХреЛрдВ рдХреЗ рд╕рднреА рдХреЛрдорд▓ рд╕реЗрдЯ: gcc , make , vim , git , gdb , рдЖрджрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реИрдВ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдореЗрдЯрд╛-рдкреИрдХреЗрдЬ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдмреЗрд╕-рдбреЗрд╡реЗрд▓ , рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЕрдЧрд░ рдпрд╣ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИред рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ 32 рд╡рд░реНрд╖реАрдп рдкрд░реНрд▓ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдПрдХ рдкреНрд░рддрд┐ рдорд┐рд▓рддреА рд╣реИ!

$ git clone https://github.com/Perl/perl5/ --depth=1 -b perl-1.0 

Git рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдореЗрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкрд╣рд▓реЗ рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЦреАрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:

 * commit 8d063cd8450e59ea1c611a2f4f5a21059a2804f1 (grafted, HEAD, tag: perl-1.0) Commit: Larry Wall <lwall@jpl-devvax.jpl.nasa.gov> CommitDate: Fri Dec 18 00:00:00 1987 +0000 a "replacement" for awk and sed 

рд╣рдо рдХреЗрд╡рд▓ рдереЛрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкрд░реНрд▓ рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреЗрд╡рд▓ 150 KB рд▓рдЧрддреЗ рд╣реИрдВред

рдЙрд╕ рдЕрдВрдзреЗрд░реЗ рдФрд░ рдШрдиреЗ рд╕рдордп рдореЗрдВ рдСрдЯреЛрдЯреВрд▓рд╕ ( рдХреНрдпрд╛ рдПрдХ рдЖрд╢реАрд░реНрд╡рд╛рдж! ) рдЬреИрд╕реА рдХреЛрдИ рдкреНрд░рд╛рдердорд┐рдХ рдЪреАрдЬ рдирд╣реАрдВ рдереА, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдЬрдбрд╝ рдореЗрдВ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИред рдорд╛рдорд▓рд╛ рдХреНрдпрд╛ рд╣реИ? рд▓реЗрдХрд┐рди рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд▓реИрд░реА рд╡реЙрд▓ рдРрд╕реА рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рдЖрд╡рд┐рд╖реНрдХрд╛рд░рдХ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЙрд╕ рд╕рдордп рдХреА рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА UNIX рдорд╢реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрдХрдлрд╛рдЗрд▓реНрд╕ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдереАред рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рд╣реА рдирд╛рдо рдХреА рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд▓реЗрдЦ рдХрд╣рддрд╛ рд╣реИ, рд▓реИрд░реА рд╡реЙрд▓ рдиреЗ рдЕрдкрдиреЗ рдХреБрдЫ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд┐рдЧрд░ рдлрд╛рдЗрд▓ рдХреА рдЖрдкреВрд░реНрддрд┐ рдХреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдиреНрдпреВрдЬрд╝рд░реАрдбрд░ rn , рдкрд░реНрд▓ рд▓рд┐рдЦрдиреЗ рд╕реЗ рддреАрди рд╕рд╛рд▓ рдкрд╣рд▓реЗред рдЗрд╕рдХреЗ рдмрд╛рдж, рдкрд░реНрд▓ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдерд╛, рдФрд░ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рдорд╢реАрдиреЛрдВ рдкрд░ рдЪрд▓рд╛рдИ рдЧрдИ рдереА, рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдмрд╛рдж рдореЗрдВ, рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯреНрд░реЛрд▓рдЯреЗрдХ рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдиреЗ рднреА рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдЙрдард╛рдпрд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдиреЗ рдХреНрдпреВрдЯреА рдврд╛рдВрдЪреЗ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдСрдЯреЛрдЯреВрд▓ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдРрд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХрд╛ рдЪрд┐рдбрд╝рд┐рдпрд╛рдШрд░ рдерд╛ рдЬреЛ рдЙрдирдХреА рд╕рд░рд▓реАрдХреГрдд рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рдгрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рдерд╛ред

<< рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдВ

2. рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛


рдХреЙрдиреНрдлрд┐рдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ "рдкреБрд░рд╛рдирд╛ рд╕реНрдХреВрд▓" рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХреЗ рд╢реЗрдмрдВрдЧ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕реНрдерд╛рди рд╣реИ:

 $ cat Configure | head -5 #! /bin/sh # # If these # comments don't work, trim them. Don't worry about any other # shell scripts, Configure will trim # comments from them for you. # 

рдХрдореЗрдВрдЯреНрд░реА рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд▓рд┐рдкрд┐рдпреЛрдВ рдореЗрдВ рдЧреЛрд▓реЗ рдереЗ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛! рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреА рд╕реНрдерд┐рддрд┐ рдЕрд╕рд╛рдорд╛рдиреНрдп рд▓рдЧ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдЬрдм рдпрд╣ рдЖрджрд░реНрд╢ рдерд╛, рддреЛ рдпрд╣рд╛рдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рджреЗрдЦреЗрдВред рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рдЖрдзреБрдирд┐рдХ рд╢реЗрд▓ рджреБрднрд╛рд╖рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рд╕реНрдерд╛рди рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдЧреАрдд рдХреЗ рдмреЛрд▓, рд╡реНрдпрд╛рдкрд╛рд░ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЛ! рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдзрд╛рд░рдгрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЪ рдирд╣реАрдВ рд╣реИ:

 $ ./Configure (I see you are using the Korn shell. Some ksh's blow up on Configure, especially on exotic machines. If yours does, try the Bourne shell instead.) Beginning of configuration questions for perl kit. Checking echo to see how to suppress newlines... ...using -n. Type carriage return to continue. Your cursor should be here--> 

рд╣реИрд░рд╛рдиреА рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреГрд╖реНрдарднреВрдорд┐ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╕рдореВрд╣ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдореЙрдбрд▓ рд╕рдВрд╡рд╛рджреЛрдВ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрди рдЙрддреНрддрд░реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реБрдП рдЬрд┐рдирдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдкрдиреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрджрд▓рддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдпрд╣ рдмрд╛рдж рдореЗрдВ рдореЗрдХрд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдереА рдХрд┐ рдХреНрдпрд╛ рд╕рднреА рд╢реЗрд▓ рдХрдорд╛рдВрдбреНрд╕ рдЬрдЧрд╣ рдкрд░ рд╣реИрдВ?

 Locating common programs... expr is in /bin/expr. sed is in /bin/sed. echo is in /bin/echo. cat is in /bin/cat. rm is in /bin/rm. mv is in /bin/mv. cp is in /bin/cp. tr is in /bin/tr. mkdir is in /bin/mkdir. sort is in /bin/sort. uniq is in /bin/uniq. grep is in /bin/grep. Don't worry if any of the following aren't found... test is in /bin/test. egrep is in /bin/egrep. I don't see Mcc out there, offhand. 

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рдорд╛рдорд▓реЗ рд╕реЗ рджреВрд░ рдерд╛ред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ Mcc рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ , рдЬреЛ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрд╛? рдордЬреЗрджрд╛рд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЙрд╕ рд╕рдордп рдХреА рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рд╣реИрдХрд░ рдкрд░рдВрдкрд░рд╛рдУрдВ рдореЗрдВ рдпрд╣ рд▓рд┐рдкрд┐ рджреЛрд╕реНрддрд╛рдирд╛ рд╣рд╛рд╕реНрдп рд╕реЗ рднрд░рдкреВрд░ рд╣реИред рдЕрдм рдЖрдк рд╢рд╛рдпрдж рд╣реА рдЗрд╕реЗ рджреЗрдЦ рдкрд╛рдПрдВрдЧреЗ:

 Is your "test" built into sh? [n] (OK to guess) OK Checking compatibility between /bin/echo and builtin echo (if any)... They are compatible. In fact, they may be identical. Your C library is in /lib/libc.a. You're normal. Extracting names from /lib/libc.a for later perusal...done Hmm... Looks kind of like a USG system, but we'll see... Congratulations. You aren't running Eunice. It's not Xenix... Nor is it Venix... Checking your sh to see if it knows about # comments... Your sh handles # comments correctly. Okay, let's see if #! works on this system... It does. Checking out how to guarantee sh startup... Let's see if '#!/bin/sh' works... Yup, it does. 

рдореИрдВрдиреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрддреНрддрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЗ рд╕рд╛рде рджрд┐рдпрд╛, рдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рдореБрдЭреЗ рдХреНрдпрд╛ рджрд┐рдпрд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рд╕рдиреНрди рдФрд░ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдФрд░ рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП рдЭрдВрдбреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдерд╛:

 Any additional cc flags? [none] Any additional ld flags? [none] 

рд╡рд╣рд╛рдВ рдЖрдк рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, -32 рд╕реЗ 32-рдмрд┐рдЯ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдпрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЕрдВрддрд┐рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рд╢реНрди рдХреЗ рд▓рд┐рдП:

 Now you need to generate make dependencies by running "make depend". You might prefer to run it in background: "make depend > makedepend.out &" It can take a while, so you might not want to run it right now. Run make depend now? [n] y 

рдореИрдВрдиреЗ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЙрддреНрддрд░ рджрд┐рдпрд╛ред рдЕрдкрдиреЗ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкреГрд╖реНрда рд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдПрдереЗрдирд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЬреАрд╡рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдореЗрдХрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдЪреАрди рдореЗрдХреЗрдб рдирд┐рд░реНрднрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдмрдирд╛рдИ рдЧрдИ рдереАред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдиреЗ рд╣рдореЗрдВ рдПрдХреНрд╕ рд╡рд┐рдВрдбреЛ рд╕рд┐рд╕реНрдЯрдо, рдХреЗрд░реНрдмрд░реЛрд╕, рдЬреЗрдлрд╛рдпрд░ рджрд┐рдпрд╛ рдФрд░ рдХрдИ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЬреЛ рдЖрдЬ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред рдпрд╣ рд╕рдм рдЕрджреНрднреБрдд рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдзреБрдирд┐рдХ рд▓рд┐рдирдХреНрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдпрд╣ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╣рд╛рдБ рд╕реЗ рдЖрддреА рд╣реИ? рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдХрд┐рд╕реА рдФрд░ рдХрд╣реАрдВ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдЬрдбрд╝ рдХреЛ рдХрд░реАрдм рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд▓реИрд░реА рд╡реЙрд▓ рдиреЗ рдЗрд╕рдХреЗ рд╕реНрдерд╛рдирд╛рдкрдиреНрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд┐рдЦрд╛ рдерд╛, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЕрдирдкреИрдХ рдХрд┐рдпрд╛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ред

рдХреБрдЫ рдЕрдЬреАрдм рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдирд┐рд░реНрднрд░рддрд╛ :

 ./makedepend: command substitution: line 82: unexpected EOF while looking for matching `'' ./makedepend: command substitution: line 83: syntax error: unexpected end of file ./makedepend: command substitution: line 82: unexpected EOF while looking for matching `'' ./makedepend: command substitution: line 83: syntax error: unexpected end of file 

рд╢рд╛рдпрдж рдпрд╣ рд╡реЗ рдереЗ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХреА рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдЙрддреНрдкрдиреНрди рдореЗрдХрдлрд╛рдЗрд▓реНрд╕ рдереЛрдбрд╝рд╛ рдЪрдмрд╛рдпрд╛ рдЧрдпрд╛:

 $ make make: *** No rule to make target '<built-in>', needed by 'arg.o'. Stop. 

рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреЗрдЪреАрджрд╛ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдЬрдЯрд┐рд▓ рд╢реЗрд▓-рдиреВрдбрд▓реНрд╕ рдХреЗ рдЬрдВрдЧрд▓ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдФрд░ рдореИрдВрдиреЗ рдореЗрдХрдлрд╛рдЗрд▓реНрд╕ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЕрдЬреАрдм рдкреИрдЯрд░реНрди рдЙрднрд░рд╛:

 arg.o: arg.c arg.o: arg.h arg.o: array.h arg.o: <built-in> arg.o: cmd.h arg.o: <command-line> arg.o: config.h arg.o: EXTERN.h ... array.o: arg.h array.o: array.c array.o: array.h array.o: <built-in> array.o: cmd.h array.o: <command-line> array.o: config.h array.o: EXTERN.h ... 

рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдХреБрдЫ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдиреЗ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдирд┐рдХрд╛рд╕ рдореЗрдВ рдЕрдкрдиреЗ рддрд░реНрдХ рдбрд╛рд▓реЗред рдХреБрд▓реНрд╣рд╛рдбрд╝реА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реАрдб рдЙрдард╛рддреЗ рд╣реБрдП , рдореИрдВрдиреЗ рдЗрд╕ рдЪреАрдЬрд╝ рдХреЛ рдереЛрдбрд╝рд╛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛:

 $ sed -i '/built-in/d' Makefile $ sed -i '/command-line/d' Makefile 

рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдЗрд╕ рдЯреНрд░рд┐рдХ рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдореЗрдХрдлрд╛рдЗрд▓реНрд╕ рдиреЗ рднреА рд╡реИрд╕рд╛ рд╣реА рдХрд╛рдо рдХрд┐рдпрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП!

<< рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдВ

3. рдпрд╛рдХ рд╡реНрдпрд╛рдХрд░рдг рдлрд╝рд╛рдЗрд▓ рддреНрд░реБрдЯрд┐рдпрд╛рдБ


рдпрд╣ 32 рд╕рд╛рд▓ рдкреБрд░рд╛рдирд╛ рдХреЛрдб рд▓реЗрдиреЗ рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЕрд╕реЗрдВрдмрд▓ рдХрд░рдиреЗ рдкрд░ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛрдЧрд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЪрдорддреНрдХрд╛рд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╕реНрд░реЛрдд рд╡реГрдХреНрд╖ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдПрдХ perl.y рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдпрд╛, рдЬреЛ рдХрд┐ рдпрд╛рдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╛рдХрд░рдг рд╡рд┐рд╡рд░рдг рд╣реИ, рдЬрд┐рд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЖрдзреБрдирд┐рдХ рд╡рд┐рддрд░рдг рдореЗрдВ рдмрд╛рдЗрд╕рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкрде / usr / bin / yacc рдкрд░ рд╕реНрдерд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд╕ yacc рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдореЛрдб рдореЗрдВ рдмрд╛рдпрд╕рди рдХреЛ рдмреБрд▓рд╛рддреА рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдЧрддрддрд╛ рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдЧреБрдЪреНрдЫрд╛ рдбрд╛рд▓ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреИрд╕реЗ рд╕рд╣реА рдХрд░рдирд╛ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╕реАрдЦрд╛ рд╣реИред

рдареАрдХ рдПрдХ рдпрд╛ рджреЛ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рд╣реЗрд▓рд┐рдпреЛ рдЪрд┐рд╕рд┐рдиреА рдбреЗ рдХрд╛рд╕реНрддреНрд░реЛ, рдЬреЛ рдХреЗрдбреАрдИ рдХреЗ рдбреЗрд╡рд▓рдкрд░ рд╣реИрдВ, рдиреЗ рдЗрд╕реА рддрд░рд╣ рдХрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдХреЗрдбреАрдИ 1, 2 рдФрд░ рдХреНрдпреВрдЯреА 1, 2 рд╕реЗ рдЖрдзреБрдирд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░реНрд╕ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдЙрдирдХреЗ рдХрд╛рдо рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛ рдЧрдИ, рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП, рд▓реЗрдХрд┐рди рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рджреМрд░рд╛рди рдореИрдВ рдпрд╛рдХ рдФрд░ рдмрд╛рдЗрд╕рди рдХреА рдЕрд╕рдВрдЧрддрд┐ рдХреЗ рдХрд╛рд░рдг рдПрдХ рд╕рдорд╛рди рдЧрдбреНрдвреЗ рдореЗрдВ рдЖ рдЧрдпрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдХ рдореЗрдЯрд╛рдХреЙрдореНрдкреЗрд▓рд░ рдХреЗ рдкреНрд░рд╛рдЪреАрди рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдмрд╛рдж рдореЗрдВ, рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд▓ рдмрд╛рдпрд╕реЗрдХ рдпреВрдЯрд┐рд▓рд┐рдЯреА (рдмрд░реНрдХрд▓реЗ рдпрд╛рдХ ) рдХреЗ рд╕рд╛рде рдмрд╛рдпрд╕рди рдХреЗ рд░реВрдк рдореЗрдВ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рдЬреЛ рдХрд┐ рдпрд╛рдХ рдХреЗ рд▓рд┐рдП рдкреБрд░рд╛рдиреЗ рд╡реНрдпрд╛рдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдерд╛ рдФрд░ рдХрдИ рд▓рд┐рдирдХреНрд╕ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдерд╛ред

рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдмрд╛рдпрдХ рдХреЗ рд╕рд╛рде рдпрд╛рдХ рдХреЗ рдПрдХ рд╕рд░рд▓ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдиреЗ рдореБрдЭреЗ рддрдм рддрдХ рдорджрдж рдХреА, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдпрдХрд╛рдХ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрд╛рдж рдореЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрднреА рднреА рдпрд╛рдХ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛, рдпреЗрдбрдмреЗрдХрди рдЗрдХрд╛рдИ рд╕реЗ рдЬреБрдбрд╝реЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд╡реНрдпрд╛рдХрд░рдг рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд╣реА рдХрд░рдирд╛ рдкрдбрд╝рд╛ред

рдЗрд╕рд▓рд┐рдП, perl.y рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рд░рдгрдиреАрддрд┐ рдХрд╛ рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╡ рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛: рдмрд╛рдпрдкрд╛рд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рд╕рднреА рдореЗрдХрдлрд╛рдЗрд▓реНрд╕ рдореЗрдВ рдпрд╛рдХ рдХреЛ рдмрд╛рдпрдХрд╛рдХ рдореЗрдВ рдмрджрд▓реЗрдВ, рдлрд┐рд░ рд╣рд░ рдЬрдЧрд╣ рд╕реЗ yydebug рдХрд╛рдЯреЗрдВред рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдиреЗ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛, рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЧрд╛рдпрдм рд╣реЛ рдЧрдИрдВ рдФрд░ рд╕рдВрдХрд▓рди рдЬрд╛рд░реА рд░рд╣рд╛ред

<< рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдВ

4. "C" рдкрд░ рдХреЛрдб рдХреЗ рд╕рдВрдХрд▓рди рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ


рдкрд░реНрд▓ рдХрд╛ рдкреНрд░рд╛рдЪреАрди рдХреЛрдб рднрдпрд╛рд╡рд╣рддрд╛ рд╕реЗ рднрд░рд╛ рд╣реБрдЖ рдерд╛, рдЬреИрд╕реЗ рдХрд┐ K & R рдХреА рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рдВрдмреЗ-рдЕрдкреНрд░рдЪрд▓рд┐рдд рдФрд░ рд╡рд┐рд╕реНрдореГрдд рд╕рдВрдХреЗрддрди:

 format(orec,fcmd) register struct outrec *orec; register FCMD *fcmd; { ... } STR * hfetch(tb,key) register HASH *tb; char *key; { ... } /*VARARGS1*/ fatal(pat,a1,a2,a3,a4) char *pat; { fprintf(stderr,pat,a1,a2,a3,a4); exit(1); } 

рдЗрд╕реА рддрд░рд╣ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдкрд╛рдИ рдЧрдИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рд╡рд░реНрдб 1.1a рдХреЛрдб рдореЗрдВ, рдЬреЛ рдХрд╛рдлреА рдкреНрд░рд╛рдЪреАрди рднреА рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ "C" рдХрд╛ рдкрд╣рд▓рд╛ рдорд╛рдирдХ, рдЬрд┐рд╕реЗ "C89" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рджреЛ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдЖрдзреБрдирд┐рдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЖрдИрдбреАрдИ рдРрд╕реА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░ рдиреЗ рдХреЛрдб рдХреЛ рд▓рд┐рдмрд╛рд╕рдХреНрд▓рдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд╛рдк рдХрд┐рдпрд╛ред

рдЬреАрд╕реАрд╕реА 9.2.0 рд╕рдВрдХрд▓рдХ, рдЪреЗрддрд╛рд╡рдиреА рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдкрд░реНрд▓ рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдкреНрд░рд╛рдЪреАрди рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЙрдкрдХреНрд░рдо рдХрд┐рдпрд╛ред рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рд╕реЗ рдЪрд╛рджрд░реЗрдВ рдЗрддрдиреА рдмрдбрд╝реА рдереАрдВ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдирд┐рдХрд╛рд╕ рдХреЗ рдХрдИ рдкрдиреНрдиреЛрдВ рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореЗрд░реЗ рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рд▓рд┐рдП, рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдереАрдВ рдФрд░ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдереАрдВ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рдЭрдВрдбреЗ рдХреА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдИ рдереАред


рдЖрдзреБрдирд┐рдХ рдЬреАрд╕реАрд╕реА 9.2.0 рдХрдВрдкрд╛рдЗрд▓рд░ рдФрд░ рдЬреАрдбреАрдмреА 8.3.1 рдбрд┐рдмрдЧрд░ рдХрд╛ рдХрд╛рдо рдЯреАрдбрдо рд╡рд┐рдВрдбреЛ рдореИрдиреЗрдЬрд░ рдФрд░ рдПрдХреНрд╕рдЯрд░реНрдо рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рдХрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

STDSTDIO рдХреЗ рддрд╣рдд , рд▓реИрд░реА рд╡реЙрд▓ рдиреЗ рдХреБрдЫ рдкреНрд░рд╛рдЪреАрди рдФрд░ рдЧреИрд░-рдорд╛рдирдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ рд▓рд╛рдЗрдмреНрд░реЗрд░реА "C" рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛, рдФрд░ DEBUGGING рдХреЗ рддрд╣рдд рдХреБрдЦреНрдпрд╛рдд рдпреЗрдбрдмрдЧ рдХреЗ рд╕рд╛рде рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдереА, рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпреЗ рдЪреЗрдХрдмреЙрдХреНрд╕ рд╕рдХреНрд╖рдо рдХрд┐рдП рдЧрдП рдереЗред рдЙрдиреНрд╣реЗрдВ perl.h рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрдВрдж рдХрд░рдХреЗ рдФрд░ рдХреБрдЫ рднреВрд▓реЗ рд╣реБрдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЬреЛрдбрд╝рдХрд░, рдореИрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред

рдПрдХ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рдкреЛрд╕рд┐рдХреНрд╕ рдкрд░рдд рдХреЗ рдЕрдм рдорд╛рдирдХреАрдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рд░рд╣реА рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЕрдкрдирд╛ рдореЙрд▓реЛрдХ () , рд╕реЗрдЯреЗрдирд╡ () рдФрд░ рдЕрдиреНрдп рдЗрдХрд╛рдЗрдпрд╛рдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╕рдВрдШрд░реНрд╖ рдкреИрджрд╛ рдХрд┐рдпрд╛ред

рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдиреЗ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рд╕реНрдерд┐рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ред рд╕рдордп рдХреЗ рд╕рд╛рде, рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдЦреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓реЗрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ ред рдФрд░ рдЕрдВрдд рдореЗрдВ, рднреВрд▓ рдЧрдП рд╣реЗрдбрд░ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ, рдЖрдк рдЙрдирдХреЗ рдмрд┐рдирд╛ рдХрд╣рд╛рдБ рдЬрд╛рдПрдВрдЧреЗред

рдореЗрд░реЗ рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рд▓рд┐рдП, 32-рд╡рд░реНрд╖реАрдп рдХреЛрдб рдХреЗ рд▓рд┐рдП рдкреИрдЪ рдЗрддрдирд╛ рдЫреЛрдЯрд╛ рдирд┐рдХрд▓рд╛ рдХрд┐ рдпрд╣рд╛рдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрджреНрдзреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 diff --git a/malloc.cb/malloc.c index 17c3b27..a1dfe9c 100644 --- a/malloc.c +++ b/malloc.c @@ -79,6 +79,9 @@ static u_int nmalloc[NBUCKETS]; #include <stdio.h> #endif +static findbucket(union overhead *freep, int srchlen); +static morecore(register bucket); + #ifdef debug #define ASSERT(p) if (!(p)) botch("p"); else static diff --git a/perl.hb/perl.h index 3ccff10..e98ded5 100644 --- a/perl.h +++ b/perl.h @@ -6,16 +6,16 @@ * */ -#define DEBUGGING -#define STDSTDIO /* eventually should be in config.h */ +//#define DEBUGGING +//#define STDSTDIO /* eventually should be in config.h */ #define VOIDUSED 1 #include "config.h" -#ifndef BCOPY -# define bcopy(s1,s2,l) memcpy(s2,s1,l); -# define bzero(s,l) memset(s,0,l); -#endif +//#ifndef BCOPY +//# define bcopy(s1,s2,l) memcpy(s2,s1,l); +//# define bzero(s,l) memset(s,0,l); +//#endif #include <stdio.h> #include <ctype.h> @@ -183,11 +183,11 @@ double atof(); long time(); struct tm *gmtime(), *localtime(); -#ifdef CHARSPRINTF - char *sprintf(); -#else - int sprintf(); -#endif +//#ifdef CHARSPRINTF +// char *sprintf(); +//#else +// int sprintf(); +//#endif #ifdef EUNICE #define UNLINK(f) while (unlink(f) >= 0) diff --git a/perl.yb/perl.y index 16f8a9a..1ab769f 100644 --- a/perl.y +++ b/perl.y @@ -7,6 +7,7 @@ */ %{ +#include <stdlib.h> #include "handy.h" #include "EXTERN.h" #include "search.h" diff --git a/perly.cb/perly.c index bc32318..fe945eb 100644 --- a/perly.c +++ b/perly.c @@ -246,12 +246,14 @@ yylex() static bool firstline = TRUE; retry: +#ifdef DEBUGGING #ifdef YYDEBUG if (yydebug) if (index(s,'\n')) fprintf(stderr,"Tokener at %s",s); else fprintf(stderr,"Tokener at %s\n",s); +#endif #endif switch (*s) { default: diff --git a/stab.cb/stab.c index b9ef533..9757cfe 100644 --- a/stab.c +++ b/stab.c @@ -7,6 +7,7 @@ */ #include <signal.h> +#include <errno.h> #include "handy.h" #include "EXTERN.h" #include "search.h" diff --git a/util.hb/util.h index 4f92eeb..95cb9bf 100644 --- a/util.h +++ b/util.h @@ -28,7 +28,7 @@ void prexit(); char *get_a_line(); char *savestr(); int makedir(); -void setenv(); +//void setenv(); int envix(); void notincl(); char *getval(); 

32 рд╕рд╛рд▓ рдкреБрд░рд╛рдиреЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП рд╢рд╛рдирджрд╛рд░ рдкрд░рд┐рдгрд╛рдо! рдмрдЧ рдХреЛ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `рдХреНрд░рд┐рдкреНрдЯ ' рдмрдЧ рдХреЛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрджрд░реНрдн рдореЗрдХрдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП-рдЙрдкрдпреБрдХреНрдд рдирд┐рд░реНрджреЗрд╢ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдХрд░ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдЕрдВрддрддрдГ рд╡рд╛рдВрдЫрд┐рдд рдкрд░реНрд▓ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдорд┐рд▓рд╛:

 $ file perl perl: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=fd952ceae424613568530b3a2ca88ebd6477e0ae, for GNU/Linux 3.2.0, not stripped 

<< рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдВ

5. рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╕реБрдзрд╛рд░ рдЦрдВрдбрди рджреЛрд╖


рд▓рдЧрднрдЧ рдкрд░реЗрд╢рд╛рдиреА-рдореБрдХреНрдд рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж, рдХрд┐рд╕реНрдордд рдиреЗ рдореБрдЭреЗ рдкреАрдЫреЗ рдХрд░ рджрд┐рдпрд╛ред рдЗрдХрдЯреНрдареЗ рдкрд░реНрд▓ рджреБрднрд╛рд╖рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдореБрдЭреЗ рдХреБрдЫ рдЕрдЬреАрдм рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдорд┐рд▓реАрдВ рдФрд░ рдЕрдВрдд рдореЗрдВ рдПрдХ рд╡рд┐рднрд╛рдЬрди рдЧрд▓рддреА:

 $ ./perl -e 'print "Hello World!\n";' Corrupt malloc ptr 0x2db36040 at 0x2db36000 Corrupt malloc ptr 0x2db36880 at 0x2db36800 Corrupt malloc ptr 0x2db36080 at 0x2db36040 Corrupt malloc ptr 0x2db37020 at 0x2db37000 Segmentation fault (core dumped) 

рдХрд░рдкреНрдЯ рдореЙрд▓реЙрдХ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдкрд╛рда рдкрд░ gnawed рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдореЙрд▓реЛрдХ () рдХреЗ рдмрдЬрд╛рдп 1982 рд╕реЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╕реНрдЯрдо рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдмрд░реНрдХрд▓реЗ рдХреЛ рдЗрд╕рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓рд┐рдЯрд░рд▓ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдЖрдЧреЗ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдХреИрд▓рдЯреЗрдХ ред рдЗрди рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рд╣рдпреЛрдЧ рд╕реНрдкрд╖реНрдЯ рдерд╛ рддрдм рдмрд╣реБрдд рдордЬрдмреВрдд рдерд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВрдиреЗ рдЗрд╕ рд╣реИрдХрд░ рдЖрд╡рдВрдЯрди рдХреЛ рдЯрд┐рдкреНрдкрдгреА рджреА рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ред рдореЗрдореЛрд░реА рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЧрд╛рдпрдм рд╣реЛ рдЧрдИрдВ, рд▓реЗрдХрд┐рди рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди рджреЛрд╖ рдмрдирд╛ рд░рд╣рд╛ред рддреЛ рдпрд╣ рдмрд╛рдд рдирд╣реАрдВ рдереА, рдФрд░ рдЕрдм рд╣рдореЗрдВ рдбрд┐рдмрдЧрд░ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ gdb рдХреЗ рддрд╣рдд рдЪрд▓рд╛рдиреЗ рдкрд░ , рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рджреБрд░реНрдШрдЯрдирд╛ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рд▓рд┐рдмрд╛рд╕ рд╕реЗ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓ mktemp () рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:

 $ gdb --args ./perl -e 'print "Hello, World!\n";' (gdb) r Starting program: /home/exl/perl5/perl -e print\ \"Hello\ World\!\\n\"\; Program received signal SIGSEGV, Segmentation fault. 0x00007ffff7cd20c7 in __gen_tempname () from /usr/lib/libc.so.6 (gdb) bt #0 0x00007ffff7cd20c7 in __gen_tempname () from /usr/lib/libc.so.6 #1 0x00007ffff7d71577 in mktemp () from /usr/lib/libc.so.6 #2 0x000055555556bb08 in main () 

рд╡реИрд╕реЗ, рд▓рд┐рдВрдХрд░ рдиреЗ рдкрд╣рд▓реЗ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╢рдкрде рд▓реА рдереАред рд╕рдВрдХрд▓рдХ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд▓рд┐рдВрдХрд░, рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд┐рдпрд╛:

 /usr/bin/ld: perl.o: in function `main': perl.c:(.text+0x978c): warning: the use of `mktemp' is dangerous, better use `mkstemp' or `mkdtemp' 

рдкрд╣рд▓реЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рд╢рд╛рдпрдж рдЖрдкрдХреЗ рдорди рдореЗрдВ рднреА рдЖрдпрд╛ рдерд╛ рдХрд┐ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рд░реНрдп mktemp () рдХреЛ mkstemp () рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдП , рдЬреЛ рдореИрдВрдиреЗ рдХрд┐рдпрд╛ред рд▓рд┐рдВрдХрд░ рдЪреЗрддрд╛рд╡рдиреА рдЧрд╛рдпрдм рд╣реЛ рдЧрдИ, рд▓реЗрдХрд┐рди рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди рджреЛрд╖ рдЗрд╕ рд╕реНрдерд╛рди рдкрд░ рд╡реИрд╕реЗ рднреА рдмрдирд╛ рд░рд╣рд╛, рдХреЗрд╡рд▓ рдЕрдм рдпрд╣ mkstemp () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдерд╛ред

рдЗрд╕рд▓рд┐рдП, рдЕрдм рдЖрдкрдХреЛ рдЙрд╕ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдмрд╣реБрдд рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рд╡рд╣рд╛рдВ рдореБрдЭреЗ рдПрдХ рдЕрдЬреАрдм рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛, рдЬрд┐рд╕реЗ рдЗрд╕ рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИ:

 char *e_tmpname = "/tmp/perl-eXXXXXX"; int main(void) { mktemp(e_tmpname); e_fp = f_open(e_tmpname, "w"); ... } 

рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдореБрдЦреМрдЯреЗ () рдореБрдЦреМрдЯрд╛ рдХреЗ рд▓рд┐рдП рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ .rodata рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдмрд░реНрдмрд╛рдж рд╣реИред рдпрд╛, рдЖрдЦрд┐рд░рдХрд╛рд░, 32 рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдерд╛, рдХреЛрдб рдореЗрдВ рдорд┐рд▓рд╛, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд┐рдпрд╛?

рдмреЗрд╢рдХ, char e_tmpname рдХреЗ рд╕рд╛рде char * e_tmpname рдХреА рдЬрдЧрд╣ [] рдиреЗ рдЗрд╕ рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди рдлрд╝реЙрд▓реНрдЯ рдХреЛ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдореИрдВ рдкреВрд░реА рд╢рд╛рдо рдХреЗ рд▓рд┐рдП рдЬреЛ рдореИрдВрдиреЗ рдорд╛рд░ рджрд┐рдпрд╛, рд╡рд╣ рдкрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛:

 $ ./perl -e 'print "Hello World!\n";' $ Hello, World! $ ./perl -e '$a = 5; $b = 6.3; $c = $a+$b; print $c."\n";' $ 11.3000000000000007 $ ./perl -v $Header: perly.c,v 1.0 87/12/18 15:53:31 root Exp $ Patch level: 0 

рд╣рдордиреЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЬрд╛рдВрдЪ рдХреА, рд▓реЗрдХрд┐рди рдлрд╛рдЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдореИрдВрдиреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдкрд░реНрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛:

 ################# test.pl #!/usr/bin/perl # # The traditional first program. # Strict and warnings are recommended. use strict; use warnings; # Print a message. print "Hello, World!\n"; 

рдлрд┐рд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди, рдЕрдлрд╕реЛрд╕, рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди рджреЛрд╖ рдлрд┐рд░ рд╕реЗ рдореЗрд░реА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЗрд╕ рдмрд╛рд░ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЬрдЧрд╣ рдкрд░:

 $ gdb --args ./perl test.pl (gdb) r Starting program: /home/exl/perl5/perl test.pl Program received signal SIGSEGV, Segmentation fault. 0x00007ffff7d1da75 in __strcpy_sse2_unaligned () from /usr/lib/libc.so.6 (gdb) bt #0 0x00007ffff7d1da75 in __strcpy_sse2_unaligned () from /usr/lib/libc.so.6 #1 0x00005555555629ea in yyerror () #2 0x0000555555568dd6 in yyparse () #3 0x000055555556bd4f in main () 

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ yyerror () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореИрдВ рдореВрд▓ рд╕реНрдирд┐рдкреЗрдЯ рдЙрджреНрдзреГрдд рдХрд░рддрд╛ рд╣реВрдВ:

 // perl.y char *tokename[] = { "256", "word", "append", ... // perl.c yyerror(s) char *s; { char tmpbuf[128]; char *tname = tmpbuf; if (yychar > 256) { tname = tokename[yychar-256]; // ??? if (strEQ(tname,"word")) strcpy(tname,tokenbuf); // Oops! else if (strEQ(tname,"register")) sprintf(tname,"$%s",tokenbuf); // Oops! ... 

рдлрд┐рд░, рд╕реНрдерд┐рддрд┐ рдЙрд╕реА рдХреЗ рд╕рдорд╛рди рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рдерд╛ред .Rodata рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдбреЗрдЯрд╛ рдлрд┐рд░ рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЗ рдХрд╛рд░рдг рд╕рд┐рд░реНрдл рдЯрд╛рдЗрдкреЛ рд╣реЛ рдФрд░ tname рдХреЗ рдмрдЬрд╛рдп рд╡реЗ tmpbuf рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ? рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рдЫрд┐рдкрд╛ рд╣реБрдЖ рдЕрд░реНрде рд╣реИ? рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЪрд╛рд░ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдЪрд╛рд░ * рдЯреЛрдХрди [] рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ [] [32] рд╕реЗрдЧреНрдореЗрдВрдЯреЗрд╢рди рдЧрд▓рддреА рдХреЛ рджреВрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд░реНрд▓ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрддрд╛рддрд╛ рд╣реИ:

 $ ./perl test.pl syntax error in file test.pl at line 7, next token "strict" Execution aborted due to compilation errors. 

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╡рд╣ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдиреНрдпреВрдлрд╝рдВрдЧрд▓ рдХреЗ рд╕рдЦреНрдд рдЙрдкрдпреЛрдЧ рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣реА рд╡рд╣ рд╣рдореЗрдВ рдмрддрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ! рдпрджрд┐ рдЖрдк рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдпрд╛ рдЯрд┐рдкреНрдкрдгреА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ:

 $ ./perl test.pl Hello, World! 

<< рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдВ

6. рд╕рдВрдХреНрд╖реЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВрдиреЗ рдЕрдкрдирд╛ рд▓рдХреНрд╖реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдФрд░ 1987 рд╕реЗ рдкреНрд░рд╛рдЪреАрди рдХреЛрдб рди рдХреЗрд╡рд▓ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛, рдмрд▓реНрдХрд┐ рдЖрдзреБрдирд┐рдХ рд▓рд┐рдирдХреНрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рднреА рдХрд╛рдо рдХрд┐рдпрд╛ред рдирд┐рд╕реНрд╕рдВрджреЗрд╣, рдЕрднреА рднреА рд╡рд┐рднрд┐рдиреНрди рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди рджреЛрд╖ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдвреЗрд░ рдмрдирд╛ рд╣реБрдЖ рд╣реИ, рд╕рдВрднрд╡рддрдГ 64-рдмрд┐рдЯ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдкрд░ рд╕реВрдЪрдХ рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдпрд╣ рд╕рдм рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдкрд░ рдбрд┐рдмрдЧрд░ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╢рд╛рдо рдмреИрдардиреЗ рдХреЗ рдмрд╛рдж рд╕рд╛рдл рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╕реБрдЦрдж рдФрд░ рдмрд▓реНрдХрд┐ рдердХрд╛рдК рдХрд╛рдо рдирд╣реАрдВ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдЗрд╕ рдкреНрд░рдпреЛрдЧ рдХреЛ рдПрдХ рдЙрдмрд╛рдК рд╢рд╛рдо рдХреЗ рд▓рд┐рдП рдордиреЛрд░рдВрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рдпреЛрдЬрдирд╛рдмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рди рдХрд┐ рдПрдХ рдкреВрд░реНрдг рдХрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛ рдЕрдВрдд рдореЗрдВ рд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХреНрдпрд╛ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдХреЛрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд▓рд╛рдн рд╣реИ? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рджрд┐рди рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдХреБрдЫ рдбрд┐рдЬрд┐рдЯрд▓ рдкреБрд░рд╛рддрддреНрд╡рд╡рд┐рдж рдЖрдПрдВрдЧреЗ рдФрд░ рдпрд╣ рдЙрдирдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрд╕рдВрдзрд╛рди рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЕрдиреБрднрд╡, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдмрд╣реБрдд рдореВрд▓реНрдпрд╡рд╛рди рдирд╣реАрдВ рд╣реИред

рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдореИрдВ рджреЛ рдкреИрдЪ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдВред рдкрд╣рд▓рд╛ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдХреБрдЫ рд╡рд┐рднрд╛рдЬрди рддреНрд░реБрдЯрд┐ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред


PS рдореИрдВ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рд╕рд┐рдВрдЧрд▓-рд▓рд╛рдЗрди рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рдкреНрд░рд╢рдВрд╕рдХреЛрдВ рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рдпрд╣рд╛рдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдкрд░реНрд▓ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕ рддрд░рд╣ рдХреЗ рдордиреЛрд░рдВрдЬрди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдкреБрд░рд╛рдирд╛ рд╣реИред
рдкреАрдкреАрдПрд╕ рдСрд▓ рдЧреБрдб рдФрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рд╣реИред рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдлрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП kawaii_neko рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред

28-Oct-2019 рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ : LINUX.ORG.RU рдордВрдЪ рдХрд╛ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдЙрдкрдирд╛рдо utf8nowhere рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП , рдЗрд╕ рд▓реЗрдЦ рдкрд░ рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рди рдХреЗрд╡рд▓ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЙрдкрдпреЛрдЧ рд╕рдорд╕реНрдпрд╛ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░рддреА рд╣реИред mktemp () рдлрд╝рдВрдХреНрд╢рдВрд╕! рдореБрдЭреЗ рдЗрди рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдЙрджреНрдзреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдЧреИрд░-рдорд╛рдирдХреАрдХреГрдд K & R C рдФрд░ GNU C рдХреЗ рдмреАрдЪ рд╡рд┐рднрд┐рдиреНрди рдЕрд╕рдВрдЧрддрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:
рдЬреАрд╕реАрд╕реА рдХреА рдЕрд╕рдВрдЧрддрд┐
рдЬреАрдПрдирдпреВ рд╕реА рдФрд░ рдХреЗ рдПрдВрдб рдЖрд░ (рдЧреИрд░-рдЖрдИрдПрд╕рдУ) рд╕реА рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдХрдИ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЕрд╕рдВрдЧрддрддрд╛рдПрдВ рд╣реИрдВред

рдЬреАрд╕реАрд╕реА рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рддрд╛ рд╣реИред рдпрджрд┐ рдХрдИ рд╕рдорд╛рди рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ GCC рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рддрд┐ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред
рдПрдХ рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд┐рд░рдВрддрд░ рддрд░реНрдХ рдХреЗ рд╕рд╛рде mktemp рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗред рд╕рдорд╛рд░реЛрд╣ mktemp рд╣рдореЗрд╢рд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдЗрд╕рдХреЗ рддрд░реНрдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реИ рдХрд┐ sscanf рдХреБрдЫ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рдЙрд╕рдХреЗ рдкреНрд░рд╛рд░реВрдк рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ sscanf рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдЧрд▓рдд рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИредрдЗрд╕реА рддрд░рд╣ fscanf рдФрд░ scanf ред

рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди: рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЪрд╛рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ: -array рдПрдХ рдХреЗ рдмрдЬрд╛рдп рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рд░рдВрдн рддрд╛рд░ рдЪрд░ рдХреЗ рд╕рд╛рдеред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк -fwritable-strings рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рдЬреЛ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╣реИрдВрдбрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП GCC рдХреЛ рдирд┐рд░реНрджреЗрд╢ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ C рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд░рддреЗ рд╣реИрдВред

рд╕реНрд░реЛрдд: GNU рдХрдореНрдкрд╛рдЗрд▓рд░ рд╕рдВрдЧреНрд░рд╣ (GCC 3.3) рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдореИрдиреБрдЕрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ ред
-Fwritable-strings рд╕рдВрдХрд▓рдХ рдзреНрд╡рдЬ GCC 3.4 рдореЗрдВ рдкрджрд╛рд╡рдирдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ GCC 4.0 рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
ANSI C rationale | String literals
String literals are specified to be unmodifiable. This specification allows implementations to share copies of strings with identical text, to place string literals in read-only memory, and perform certain optimizations. However, string literals do not have the type array of const char, in order to avoid the problems of pointer type checking, particularly with library functions, since assigning a pointer to const char to a plain pointer to char is not valid. Those members of the Committee who insisted that string literals should be modifiable were content to have this practice designated a common extension (see F.5.5).

Existing code which modifies string literals can be made strictly conforming by replacing the string literal with an initialized static character array. For instance,

 char *p, *make_temp(char *str); /* ... */ p = make_temp("tempXXX"); /* make_temp overwrites the literal */ /* with a unique name */ 

can be changed to:

 char *p, *make_temp(char *str); /* ... */ { static char template[ ] = "tempXXX"; p = make_temp( template ); } 

: Rationale for American National Standard for Information Systems, Programming Language C .
VarfolomeyKote4ka , Segmentation faults .rodata .rwdata . ┬лFrom .rodata to .rwdata тАУ introduction to memory mapping and LD scripts┬╗ guye1296 , . ld тАФ rwdata.ldред рдмрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб, рд╕рд╣реА рдмреЙрдХреНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрд▓ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рд░реВрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ LDFLAGS рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: LDFLAGS = -рдЯреА rwdata.ld , рддреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдгред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВ:

 $ make clean && make -j1 $ mv perl perl_rodata $ curl -LOJ https://raw.githubusercontent.com/guye1296/ld_script_elf_blog_post/master/rwdata.ld $ sed -i 's/LDFLAGS =/LDFLAGS = -T rwdata.ld/' Makefile $ make clean && make -j1 $ mv perl perl_rwdata $ objdump -s -j .rodata perl_rodata | grep tmp -2 19da0 21233f5e 7e3d2d25 30313233 34353637 !#?^~=-%01234567 19db0 38392e2b 262a2829 2c5c2f5b 7c002400 89.+&*(),\/[|.$. 19dc0 73746465 7272002f 746d702f 7065726c stderr./tmp/perl 19dd0 2d655858 58585858 00323536 00617070 -eXXXXXX.256.app 19de0 656e6400 6c6f6f70 63746c00 66756e63 end.loopctl.func $ objdump -s -j .rwdata perl_rodata | grep tmp -2 objdump: section '.rwdata' mentioned in a -j option, but not found in any input file $ objdump -s -j .rwdata perl_rwdata | grep tmp -2 41d9c0 21233f5e 7e3d2d25 30313233 34353637 !#?^~=-%01234567 41d9d0 38392e2b 262a2829 2c5c2f5b 7c002400 89.+&*(),\/[|.$. 41d9e0 73746465 7272002f 746d702f 7065726c stderr./tmp/perl 41d9f0 2d655858 58585858 00323536 00617070 -eXXXXXX.256.app 41da00 656e6400 6c6f6f70 63746c00 66756e63 end.loopctl.func $ objdump -s -j .rodata perl_rwdata | grep tmp -2 objdump: section '.rodata' mentioned in a -j option, but not found in any input file $ ./perl_rodata -e 'print "Hello, World!\n";' Segmentation fault (core dumped) $ ./perl_rwdata -e 'print "Hello, World!\n";' Hello, World! 

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╣реИрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рджреВрд╕рд░реА рдкреИрдЪ рд╕реЗ рд▓рдЧрднрдЧ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рдмрд╕ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ! рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХреЛрдб рдХреЛ рдРрд╕реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рд▓рд╛рдирд╛ рдЬреЛ рдорд╛рдирдХреЛрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЕрднреА рднреА рдмреЗрд╣рддрд░ рд╣реИред

<< рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдВ

Source: https://habr.com/ru/post/hi473228/


All Articles