
рд▓рд┐рдирдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реБрд░рдХреНрд╖рд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рд╣рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдФрд░ рд╕рдВрджрд┐рдЧреНрдз рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реНрдиреЗрд▓ рдХреЗ рдЕрдВрджрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ (рдЬреИрд╕реЗ рдХрд┐ рдлрд╛рдЗрд▓реЗрдВ рдЦреЛрд▓рдиреЗ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдЪрд▓рд╛рдиреЗ) рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред
рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, рд╣рдо рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ, рдЬреЛ рд╣рдореЗрдВ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд╛рдо рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд░реЛрдХрдирд╛ рдФрд░ рдЗрд╕рдХреЗ рдХреЙрд▓ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХреЛ рдХрд░реНрдиреЗрд▓ рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд┐рдирд╛, рдПрдХ рд▓реЛрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЬреАрдкреАрдПрд▓ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рджреГрд╖реНрдЯрд┐рдХреЛрдг x86_64 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рдХрд░реНрдиреЗрд▓ рд╕рдВрд╕реНрдХрд░рдг 3.19+ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
(рдКрдкрд░ рд╕рд┐рд░реНрдл рдкреЗрдВрдЧреБрдЗрди рдЫрд╡рд┐: ┬й De3antArt рдХреЗ рд╕рд╛рде En3l ред)рдЬреНрдЮрд╛рдд рдЕрдиреБрдореЛрджрди
рд▓рд┐рдирдХреНрд╕ рд╕реБрд░рдХреНрд╖рд╛ рдПрдкреАрдЖрдИ
рд▓рд┐рдирдХреНрд╕ рд╕реБрд░рдХреНрд╖рд╛ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд╣реА рд╣реЛрдЧрд╛ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред рдХрд░реНрдиреЗрд▓ рдХреЛрдб рдХреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ, рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рд╕реНрдерд┐рдд рд╣реИрдВ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, рд╕реБрд░рдХреНрд╖рд╛ рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреЙрд▓рдмреИрдХ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рд╕реБрд░рдХреНрд╖рд╛ рдореЙрдбреНрдпреВрд▓ рдПрдХ рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рдВрджрд░реНрдн рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ рдпрд╛ рдЗрдирдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд▓рд┐рдирдХреНрд╕ рд╕реБрд░рдХреНрд╖рд╛ рдПрдкреАрдЖрдИ рдореЗрдВ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реАрдорд╛рдПрдБ рд╣реИрдВ:
- рд╕реБрд░рдХреНрд╖рд╛ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХрд░реНрдиреЗрд▓ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ рдФрд░ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
- рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рдореЙрдбреНрдпреВрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдХреБрдЫ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде)
рдпрджрд┐ рдХрд░реНрдиреЗрд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдореЙрдбреНрдпреВрд▓ рдХреА рдмрд╣реБрд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ, рддреЛ рдЧрддрд┐рд╢реАрд▓ рд▓реЛрдбрд┐рдВрдЧ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдореМрд▓рд┐рдХ рд╣реИ: рд╕реБрд░рдХреНрд╖рд╛ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдХреНрд╖рдг рд╕реЗ, рд▓рдЧрд╛рддрд╛рд░ рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реНрдиреЗрд▓ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕реБрд░рдХреНрд╖рд╛ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреА рдХрд░реНрдиреЗрд▓ рдЕрд╕реЗрдВрдмрд▓реА рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рд╕рд╛рде рд╣реА SELinux рдпрд╛ AppArmor рдХреЗ рд╕рд╛рде рдРрдб-рдСрди рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд┐рддрд░рдг рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЧреНрд░рд╛рд╣рдХ рдРрд╕реЗ рджрд╛рдпрд┐рддреНрд╡реЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рдирд╣реАрдВ рд▓реЗрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдорд╛рд░реНрдЧ рдмрдВрдж рдерд╛ред
рдЗрди рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕реБрд░рдХреНрд╖рд╛ рдПрдкреАрдЖрдИ рд╣рдореЗрдВ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдПрдХ рдЖрджрд░реНрд╢ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛ред
рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдЯреЗрдмрд▓ рдХрд╛ рд╕рдВрд╢реЛрдзрди
рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдЧрд░рд╛рдиреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рддрд╛рдХрд┐ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЗ рд╕реНрддрд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд▓рд┐рдирдХреНрд╕ рд╕рднреА рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рд╣реИрдВрдбрд▓рд░ рдХреЛ
sys_call_table
рдЯреЗрдмрд▓ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣реИрдВрдбрд▓рд░ рдХреЗ рдкреБрд░рд╛рдиреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдХрд┐рд╕реА рднреА рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЛ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХреБрдЫ рдлрд╛рдпрджреЗ рд╣реИрдВ:
- рдХрд┐рд╕реА рднреА рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдкрд░ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдХрд┐рд╕реА рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдпрд╛рдж рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
- рдиреНрдпреВрдирддрдо рдУрд╡рд░рд╣реЗрдбред рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдЯреЗрдмрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдмрд╛рд░ рдХрд╛ рдкреВрдВрдЬреА рдирд┐рд╡реЗрд╢ рд╣реЛрддрд╛ рд╣реИред рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рдирд┐рдЧрд░рд╛рдиреА рдкреЗрд▓реЛрдб рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХрдорд╛рддреНрд░ рдЦрд░реНрдЪ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ (рдореВрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рд╣реИред
- рдиреНрдпреВрдирддрдо рдХрд░реНрдиреЗрд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБред рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╡реНрдпрд╛рдкрдХ рд╕рдВрднрд╡ рд╕реАрдорд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡рд╣ рдХреБрдЫ рдЦрд╛рдорд┐рдпреЛрдВ рд╕реЗ рднреА рдЧреНрд░рд╕реНрдд рд╣реИ:
- рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддрдХрдиреАрдХреА рдЬрдЯрд┐рд▓рддрд╛ред рдЕрдкрдиреЗ рдЖрдк рд╕реЗ, рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдХреЗрдд рдХреА рдЬрдЧрд╣ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдпреЛрдЧреНрдпрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:
- рдЦреЛрдЬ рдкреНрд░рдгрд╛рд▓реА рдХреЙрд▓ рддрд╛рд▓рд┐рдХрд╛
- рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрд╢реЛрдзрди рд╕рдВрд░рдХреНрд╖рдг рдмрд╛рдИрдкрд╛рд╕
- рдкрд░рдорд╛рдгреБ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди
рдпреЗ рд╕рднреА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдореВрд▓реНрдпрд╡рд╛рди рд╡рд┐рдХрд╛рд╕ рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП, рдФрд░ рдлрд┐рд░ рд╕рдорд░реНрдерди рдФрд░ рд╕рдордЭ рдХреЗ рд▓рд┐рдПред
- рдХреБрдЫ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ред рд╕рдВрд╕реНрдХрд░рдг 4.16 рд╕реЗ рдкрд╣рд▓реЗ рдЧреБрдард▓реА рдореЗрдВ, x86_64 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рдХрдИ рдЕрдиреБрдХреВрд▓рди рдереЗред рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдиреЗ рдорд╛рдВрдЧ рдХреА рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рд╣реИрдВрдбрд▓рд░ рдХреЛрдбрд╛рдВрддрд░рдХ рдореЗрдВ рд▓рд╛рдЧреВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдПрдбрд╛рдкреНрдЯрд░ рд╣реЛред рддрджрдиреБрд╕рд╛рд░, рдРрд╕реЗ рд╣реИрдВрдбрд▓рд░ рдХрднреА-рдХрднреА рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдХрднреА-рдХрднреА рд╕реА рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЕрд╕рдВрднрд╡ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд░реНрдиреЗрд▓ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЧреБрд▓реНрд▓рдХ рдореЗрдВ рддрдХрдиреАрдХреА рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
- рдХреЗрд╡рд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рд╣реИрдВред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рд╣реИрдВрдбрд▓рд░реНрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдХреЗрд╡рд▓ рдЙрдирдХреЗ рдкрд╛рд╕ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдВрдЪ рдпрд╛ рддреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдпрд╛ рдЕрдВрдд рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдФрд░ рдЙрд╕рдХреЗ рд░рд┐рдЯрд░реНрди рдорд╛рди рдХреЗ рддрд░реНрдХ рд╣реИрдВред рдХрднреА-рдХрднреА рдпрд╣ рддрд░реНрдХреЛрдВ рдФрд░ рдкрд╣реБрдВрдЪ рдЬрд╛рдВрдЪ рдХреА рдкрд░реНрдпрд╛рдкреНрддрддрд╛ рдкрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЪреЗрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдХрднреА-рдХрднреА рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдУрд╡рд░рд╣реЗрдб рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдореЗрдореЛрд░реА рдХреЛ рджреЛ рдмрд╛рд░ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рдпрджрд┐ рддрд░реНрдХ рдПрдХ рд╕реВрдЪрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдЦреБрдж рдХреЛ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдлрд┐рд░ рдореВрд▓ рд╣реИрдВрдбрд▓рд░ рдЕрдкрдиреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рддрд░реНрдХ рдХреЛ рдХреЙрдкреА рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдмрд╣реБрдд рдХрдо рдШрдЯрдирд╛рдУрдВ рдХреА рдПрдХ рдЧреНрд░реИрдиреНрдпреБрд▓реИрд░рд┐рдЯреА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╢реЛрд░ рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╣рдордиреЗ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕рдмрд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд╛рднреЛрдВ рдХрд╛ рдкреАрдЫрд╛ рдХрд░рддреЗ рд╣реБрдП, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЪреБрдирд╛ рдФрд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЙрд╕ рд╕рдордп рд╣рдореЗрдВ рдЕрднреА рднреА x86_64 рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдХреЙрд▓ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ред рдмрд╛рдж рдореЗрдВ рдирдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЧрдпрд╛ - рдХреНрд▓реЛрди () рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд () - рдЬреЛ рдЕрднреА рд╡рд┐рд╢реЗрд╖ рд╣реИред рдЗрд╕реА рдиреЗ рд╣рдореЗрдВ рдирдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред
Kprobes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдЬрд┐рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛,
рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ
kprobes рдХрд╛ рдЙрдкрдпреЛрдЧ рдерд╛: рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдбреАрдмрдЧрд┐рдВрдЧ рдФрд░ рдХрд░реНрдиреЗрд▓ рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ APIред рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЖрдкрдХреЛ рдХрд░реНрдиреЗрд▓ рдореЗрдВ
рдХрд┐рд╕реА рднреА рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдкреНрд░реА-рдФрд░ рдкреЛрд╕реНрдЯ-рд╣реИрдВрдбрд▓рд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдФрд░ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рднреАред рд╣реИрдВрдбрд▓рд░реНрд╕ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдирд┐рдЧрд░рд╛рдиреА рдФрд░ рдХрд╛рдо рдХреЗ рдЖрдЧреЗ рдХреЗ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЛрдиреЛрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рдереЗред
рдЕрд╡рд░реЛрдзрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдн:
- рдкрд░рд┐рдкрдХреНрд╡ рдПрдкреАрдЖрдИред Kprobes рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд╣реИ рдФрд░ рд╕рдордп рд╕реЗ рд╕реБрдзрд╛рд░ рд╣реБрдЖ рд╣реИ (2002)ред рдЙрдирдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдиреБрдХрд╕рд╛рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╛рдП рдЧрдП рд╣реИрдВ, рдЙрдирдХреЗ рдХрд╛рдо рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╕реНрд╡-рдирд┐рд░реНрдорд┐рдд рдмрд╛рдЗрдХ рдкрд░ рдлрд╛рдпрджреЗ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдкрд╣рд╛рдбрд╝ред
- рдХреЛрд░ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЬрдЧрд╣ рдХрд╛ рдЕрд╡рд░реЛрдзрдиред Kprobes рдХреЛ рдХрд░реНрдиреЗрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ (int3 рдирд┐рд░реНрджреЗрд╢) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХрд╣реАрдВ рднреА, рдпрджрд┐ рдЬреНрдЮрд╛рдд рд╣реЛ рддреЛ рдХрд╛рдкреНрд░реЛрдмреНрд╕ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣, рдХреНрд░реЗрдЯрдкреНрд░реЙрдмреНрд╕ рдХреЛ рд╕реНрдЯреИрдХ рдкрд░ рд░рд┐рдЯрд░реНрди рдПрдбреНрд░реЗрд╕ рдХреЛ рдЦрд░рд╛рдм рдХрд░рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд░рд┐рдЯрд░реНрди рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ (рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдЬреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)ред
Kprobes рдХреЗ рдиреБрдХрд╕рд╛рди:
- рддрдХрдиреАрдХреА рдХрдард┐рдирд╛рдИред Kprobes рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдХрд╣реАрдВ рднреА рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рд╕реНрдерд╛рдиреАрдп рдЪрд░реЛрдВ рдХреЗ рдорд╛рдиреЛрдВ рдХреЗ рддрд░реНрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреМрди рд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдпрд╛ рдЬрд╣рд╛рдВ рд╡реЗ рд╕реНрдерд┐рдд рд╣реИрдВ, рдФрд░ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╡рд╣рд╛рдВ рд╕реЗ рд╣рдЯрд╛ рджреЗрдВред рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд▓рдЧреЗ рдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рдкрд╕ рдХрд░ рдЪреБрдХрд╛ рд╣реИред
- Jprobes рдХреЛ рдкрджрд╛рд╡рдирдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Jprobes kprobes рдХреЗ рд▓рд┐рдП рдПрдХ рдРрдб-рдСрди рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдпрд╛ рд╕реНрдЯреИрдХ рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рд╣реБрдХ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдорд╛рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрдХрдбрд╝ рдпрд╣ рд╣реИ рдХрд┐ рдЬрд┐рдкрд░ рдХреЛ рдЖрдзреБрдирд┐рдХ рдЧреБрдард▓реА рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдФрд░ рдХрд╛рдЯрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдЧреИрд░-рддреБрдЪреНрдЫ рдУрд╡рд░рд╣реЗрдбред рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдорд╣рдВрдЧреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ред рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдорд╣рдВрдЧрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, x86_64 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рдЬрдВрдк-рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐рдкреНрд░реЛрдмреНрд╕ рдХреА рд▓рд╛рдЧрдд рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдЕрдзрд┐рдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдЯреЗрдмрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред
- рдХреНрд░реЗрдЯрдкреНрд░реЛрдмреНрд╕ рдХреА рд╕реАрдорд╛рдПрдВред рд╕реНрдЯреИрдХ рдкрд░ рд░рд┐рдЯрд░реНрди рдПрдбреНрд░реЗрд╕ рдХреЛ рд╕реНрдкреВрдл рдХрд░рдХреЗ рдХреНрд░реЗрдЯрдкреНрд░реЛрдмреНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдЙрдиреНрд╣реЗрдВ рдХреНрд░реЗрдЯрдкреНрд░реЛрдм рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж рд╡рд╣рд╛рдВ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдкрддреЗ рдХреЛ рдХрд╣реАрдВ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкрддреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХреЗ рдмрдлрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрдм рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдПрдХ рд╕рд╛рде рдХрдИ рдХреЙрд▓ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдХреНрд░реЗрдЯрдкреНрд░реЙрдмреНрд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ред
- рд╡рд┐рдХрд▓рд╛рдВрдЧ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ред рдЪреВрдБрдХрд┐ kprobes interrupts рдФрд░ juggles рдкреНрд░реЛрд╕реЗрд╕рд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рднреА рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкреНрд░реАрдЗрдореНрдкреЗрдХреНрд╢рди рдбрд┐рд╕реЗрдмрд▓ рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╣реИрдВрдбрд▓рд░ рдкрд░ рдХреБрдЫ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддрд╛ рд╣реИ: рдЖрдк рдЙрдирдореЗрдВ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдмрд╣реБрдд рд╕рд╛рд░реА рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВ, рдХреНрдпрд╛ рдореИрдВ / рдУ, рдЯрд╛рдЗрдорд░ рдФрд░ рд╕реЗрдорд╛рдлреЛрд░рд╕ рдореЗрдВ рдиреАрдВрдж, рдФрд░ рдЕрдиреНрдп рдЬреНрдЮрд╛рдд рдЪреАрдЬреЗрдВред
рд╡рд┐рд╖рдп рдкрд░ рд╢реЛрдз рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдорд╛рд░реА рдирдЬрд╝рд░ рдлрд╝реБрдЯреНрд░реЗрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкрд░ рдкрдбрд╝реА, рдЬреЛ рдЬрд┐рдкрд░ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдпрд╣ рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдЕрд╡рд░реЛрдзрди рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рднреАрддрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ kprobes рдХреЛ рдЫреВрдЯ рдирд╣реАрдВ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред
рд╕реНрдкреНрд▓рд┐рд╕рд┐рдВрдЧ
рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢рд╛рд╕реНрддреНрд░реАрдп рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд▓рд╛рдпрдХ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ рд╣рдорд╛рд░реЗ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд▓рд┐рдП рдмрд┐рдирд╛ рд╢рд░реНрдд рд╕рдВрдХреНрд░рдордг рд╣реЛрддрд╛ рд╣реИред рдореВрд▓ рдирд┐рд░реНрджреЗрд╢ рджреВрд╕рд░реА рдЬрдЧрд╣ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрджрд▓рд╛рд╡реЛрдВ рдХреА рдорджрдж рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреЛ рдлрдВрдХреНрд╢рди рдореЗрдВ рдПрдореНрдмреЗрдб (рд╡рд┐рднрд╛рдЬрд┐рдд) рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ
рд╕реНрдкрд╛рдЗрд╕рд▓рд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рд╣реИ рдХрд┐ рдХреИрд╕реЗ kprobes рдХреЗ рд▓рд┐рдП рдХреВрдж рдЕрдиреБрдХреВрд▓рди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдкреНрд▓рд┐рд╕рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди kprobes рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЧрдд рдХреЗ рдмрд┐рдирд╛ рдФрд░ рд╕реНрдерд┐рддрд┐ рдХреЗ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╕рд╛рдеред
рд╕реНрдкреНрд▓рд┐рд╕рд┐рдВрдЧ рдХреЗ рд▓рд╛рдн рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ:
- рдиреНрдпреВрдирддрдо рдХрд░реНрдиреЗрд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБред рдмрдВрдЯрд╡рд╛рд░реЗ рдХреЛ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдХрд▓реНрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдмрд╕ рдЙрд╕рдХрд╛ рдкрддрд╛ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред
- рдиреНрдпреВрдирддрдо рдУрд╡рд░рд╣реЗрдбред рджреЛ рдмрд┐рдирд╛ рд╢рд░реНрдд рд╕рдВрдХреНрд░рдордг - рдХрд┐ рд╣реИрдВрдбрд▓рд░ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдирд┐рдпрдВрддреНрд░рдг рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╡рд░реЛрдзрди рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрдХреНрд░рдордг рдкреНрд░реЛрд╕реЗрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИрдВ рдФрд░ рдмрд╣реБрдд рд╕рд╕реНрддреЗ рд╣реИрдВред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдореБрдЦреНрдп рджреЛрд╖ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдЪрд┐рддреНрд░ рдкрд░ рдмрд╛рджрд▓ рд╣реИ:
- рддрдХрдиреАрдХреА рдХрдард┐рдирд╛рдИред рд╡рд╣ рд▓реБрдврд╝рдХ рдЬрд╛рддреА рд╣реИред рдЖрдк рдорд╢реАрди рдХреЛрдб рдХреЛ рдХреЗрд╡рд▓ рд▓реЗ рдФрд░ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рдирд╣реАрдВ рд╕рдХрддреЗред рдпрд╣рд╛рдВ рд╣рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рдФрд░ рдЕрдзреВрд░реА рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ:
- рдЕрд╡рд░реЛрдзрди рдХреА рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди (рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реАрдзреЗ рдЕрдкрдиреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛)?
- рдПрдХ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕реНрдореГрддрд┐ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рдВрд╢реЛрдзрди рдкрд░ рд╕рдВрд░рдХреНрд╖рдг рдХрд╛ рдмрд╛рдИрдкрд╛рд╕
- рдирд┐рд░реНрджреЗрд╢ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рд╕реАрдкреАрдпреВ рдХреИрд╢ рдЕрдорд╛рдиреНрдп
- рдмрджрд▓реА рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд┐рд░реНрджреЗрд╢ рдЙрдиреНрд╣реЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
- рдмрджрд▓реЗ рд╣реБрдП рдЯреБрдХрдбрд╝реЗ рдХреЗ рдЕрдВрджрд░ рд╕рдВрдХреНрд░рдордг рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рдирд╛
- рдмрджрд▓реЗ рд╣реБрдП рдЯреБрдХрдбрд╝реЗ рдХреЛ рджреВрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
рд╣рд╛рдВ, рдЖрдк kprobes рдХреА рдЬрд╛рд╕реВрд╕реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд▓рд╛рдЗрд╡рдкреИрдЪ рдЗрдВрдЯреНрд░рд╛рдиреНрдпреВрдХреНрд▓рд┐рдпрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдВрддрд┐рдо рд╕рдорд╛рдзрд╛рди рдЕрднреА рднреА рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реИред рдпрд╣ рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдбрд░рд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдирдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдиреАрдВрдж рдХреА рдХрд┐рддрдиреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрдВрдЧреАред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрджрд┐ рдЖрдк рдЗрд╕ рджрд╛рдирд╡ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рджреАрдХреНрд╖рд╛ рдХреЗ рдЕрдзреАрди рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рд╕рд╣рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ, рддреЛ рд╕реНрдкрд╛рдЗрд╕реАрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рд╕рд╛рдЗрдХрд┐рд▓ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рд░рд╡реИрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд┐рдХрд▓реНрдк рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рдмреИрдХрдЕрдк рдмрдирд╛ рд░рд╣рд╛ рдЬрдм рдХрд┐ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдИ рднреА рдкреНрд░рдЧрддрд┐ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрдЧреАред
рдирдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде
рдлреНрд░реЗрд╕ рдПрдХ рдлрдВрдХреНрд╢рди-рд▓реЗрд╡рд▓ рдХрд░реНрдиреЗрд▓ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИред рдпрд╣ 2008 рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд╛рдирджрд╛рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред рдлреНрд░реЗрд╕реНрд░реЗрд╕ рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреА рдЖрд╡реГрддреНрддрд┐ рдФрд░ рдЕрд╡рдзрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ, рдХреЙрд▓ рдЧреНрд░рд╛рдлрд╝ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ, рдЯреЗрдореНрдкрд▓реЗрдЯ рджреНрд╡рд╛рд░рд╛ рд░реБрдЪрд┐ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдЖрдк
рдпрд╣рд╛рдБ рд╕реЗ ftrace рдлреАрдЪрд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ , рдФрд░ рдлрд┐рд░ рд▓рд┐рдВрдХ рдФрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рд╕рдВрдХрд▓рдХ рдХреБрдВрдЬреА
-pg
рдФрд░
-mfentry
рдЖрдзрд╛рд░ рдкрд░
-pg
рдХреЛ
-mfentry
, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рдЯреНрд░реЗрд╕ рдлрд╝рдВрдХреНрд╢рди mcount () рдпрд╛ __fentry __ () рдореЗрдВ рдХреЙрд▓ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ, рдЗрд╕ рд╕рдВрдХрд▓рдХ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд░реНрдиреЗрд▓ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд╝реБрдЯреНрд░реЗрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ
рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдХреЙрд▓рд┐рдВрдЧ рдлрд╝реЗрдпрд░, рд╕рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд▓реЛрдХрдкреНрд░рд┐рдп рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдЙрдкрд▓рдмреНрдз рд╣реИ:
рдбрд╛рдпрдиреЗрдорд┐рдХ рдлрд╝реНрд░реЗрд╕ ред рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ рдХрд┐ рдХрд░реНрдиреЗрд▓ рд╕рднреА рдХреЙрд▓ рдХреЗ рд╕реНрдерд╛рди рдХреЛ mcount () рдпрд╛ __fentry __ () рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИ рдФрд░ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд╢реБрд░реБрдЖрддреА рдЪрд░рдгреЛрдВ рдореЗрдВ рдЙрдирдХреЗ рдорд╢реАрди рдХреЛрдб рдХреЛ
nop рд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ - рдПрдХ рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрджреЗрд╢ рдЬреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ ftrace рдХреЙрд▓реНрд╕ рдХреЛ рд╡рд╛рдкрд╕ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдЧрд░ ftrace рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЗрд╕рдХрд╛ рдкреНрд░рднрд╛рд╡ рдХрдо рд╕реЗ рдХрдо рд╣реИред
рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг
рдкреНрд░рддреНрдпреЗрдХ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
struct ftrace_hook { const char *name; void *function; void *original; unsigned long address; struct ftrace_ops ops; };
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рддреАрди рдлрд╝реАрд▓реНрдб рднрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдирд╛рдо, рдлрд╝рдВрдХреНрд╢рди, рдореВрд▓ред рд╢реЗрд╖ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рднреА рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЛрдб рдХреА рдХреЙрдореНрдкреИрдХреНрдЯрдиреЗрд╕ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
#define HOOK(_name, _function, _original) \ { \ .name = (_name), \ .function = (_function), \ .original = (_original), \ } static struct ftrace_hook hooked_functions[] = { HOOK("sys_clone", fh_sys_clone, &real_sys_clone), HOOK("sys_execve", fh_sys_execve, &real_sys_execve), };
рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд░реИрдкрд░реНрд╕ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИрдВ:
static asmlinkage long (*real_sys_execve)(const char __user *filename, const char __user *const __user *argv, const char __user *const __user *envp); static asmlinkage long fh_sys_execve(const char __user *filename, const char __user *const __user *argv, const char __user *const __user *envp) { long ret; pr_debug("execve() called: filename=%p argv=%p envp=%p\n", filename, argv, envp); ret = real_sys_execve(filename, argv, envp); pr_debug("execve() returns: %ld\n", ret); return ret; }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдиреНрдпреВрдирддрдо рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рдиред рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЪреАрдЬ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ред рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рддрд░реНрдХреЛрдВ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╕рдм рдХреБрдЫ рдбрд╛рдЙрдирд╣рд┐рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рд╣реИрдВрдбрд▓рд░ рдмрд╣реБрдд рд╕реНрдерд┐рд░ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рджрдХреНрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рддрд░реНрдХ рд▓реЗрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдЦреБрдж рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЖрдк рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐
рдХрд░реНрдиреЗрд▓ рдХреЗ рдЕрдВрджрд░ рдХреЛрдИ рд╕реНрдерд┐рд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдирд╣реАрдВ рд╣реИрдВ ред
рдлреБрдЯреНрд░реЗрд╕ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрддрд╛ рдвреВрдВрдврдирд╛ рдФрд░ рд╕рд╣реЗрдЬрдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рд╣рдо рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░реЗрдВрдЧреЗред Ftrace рдЖрдкрдХреЛ рдирд╛рдо рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрднреА рднреА рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрддрд╛ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред
рдЖрдк
kallsyms рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд╕рднреА рдкрд╛рддреНрд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреАред рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ
рд╕рднреА рд╡рд░реНрдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рди рдХреЗрд╡рд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣реБрдХ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реИ:
static int resolve_hook_address(struct ftrace_hook *hook) { hook->address = kallsyms_lookup_name(hook->name); if (!hook->address) { pr_debug("unresolved symbol: %s\n", hook->name); return -ENOENT; } *((unsigned long*) hook->original) = hook->address; return 0; }
рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ
ftrace_ops
рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА
ftrace_ops
рд╣реИред рдпрд╣ рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╣реИ
рдлрд╝реАрд▓реНрдб рдПрдХ рдХреЙрд▓рдмреИрдХ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЭрдВрдбреЗ рд╕реЗрдЯ рдХрд░реЗрдВ:
int fh_install_hook(struct ftrace_hook *hook) { int err; err = resolve_hook_address(hook); if (err) return err; hook->ops.func = fh_ftrace_thunk; hook->ops.flags = FTRACE_OPS_FL_SAVE_REGS | FTRACE_OPS_FL_IPMODIFY; }
fh_ftrace_thunk () рд╣рдорд╛рд░реА рдХреЙрд▓рдмреИрдХ рд╣реИ рдЬрд┐рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рддреЗ рд╕рдордп ftrace рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдж рдореЗрдВред рдЕрд╡рд░реЛрдзрди рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЭрдВрдбреЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдВрдЧреЗред рд╡реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ftrace рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рдирдХреА рд╕рд╛рдордЧреНрд░реА рд╣рдо рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдм рд╣рдо рдЕрд╡рд░реЛрдзрди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ ftrace_set_filter_ip () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд░реБрдЪрд┐ рдХреЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП ftrace рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ ftrace рдХреЛ register_ftrace_function () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реЗ рдХреЙрд▓рдмреИрдХ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ:
int fh_install_hook(struct ftrace_hook *hook) { err = ftrace_set_filter_ip(&hook->ops, hook->address, 0, 0); if (err) { pr_debug("ftrace_set_filter_ip() failed: %d\n", err); return err; } err = register_ftrace_function(&hook->ops); if (err) { pr_debug("register_ftrace_function() failed: %d\n", err); ftrace_set_filter_ip(&hook->ops, hook->address, 1, 0); return err; } return 0; }
рдЕрд╡рд░реЛрдзрди рдХреЛ рдЙрд╕реА рддрд░рд╣ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ:
void fh_remove_hook(struct ftrace_hook *hook) { int err; err = unregister_ftrace_function(&hook->ops); if (err) { pr_debug("unregister_ftrace_function() failed: %d\n", err); } err = ftrace_set_filter_ip(&hook->ops, hook->address, 1, 0); if (err) { pr_debug("ftrace_set_filter_ip() failed: %d\n", err); } }
Unregister_ftrace_function () рдХреЗ рдХреЙрд▓ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХреЙрд▓рдмреИрдХ рдХреА рд╕рдХреНрд░рд┐рдпрддрд╛ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ (рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдЖрд╡рд░рдг) рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢рд╛рдВрддрд┐ рд╕реЗ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдбрд░ рдХреЗ рдмрд┐рдирд╛ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд╣реАрдВ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдЕрднреА рднреА рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рд╡реЗ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░реЗрд╢рд╛рди рд╣реЛрдЧрд╛)ред
рдПрдХ рдлрдВрдХреНрд╢рди рд╣реБрдХ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдирд╛
рдЕрдВрддрд░рд╡рд┐рд░реЛрдз рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕рд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рд╣реИ? рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдлреВрдЯреНрд░реЗрд╕ рдЖрдкрдХреЛ рдХреЙрд▓рдмреИрдХ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдмрд╛рдж рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред % рд░рд┐рдк рд░рд┐рдк рдХреЛ рдмрджрд▓рдХрд░ - рдЕрдЧрд▓реЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ - рд╣рдо рдЙрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ - рдЕрд░реНрдерд╛рдд, рд╣рдо рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд┐рдирд╛ рд╢рд░реНрдд рд╕рдВрдХреНрд░рдордг рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдо рдирд┐рдпрдВрддреНрд░рдг рд▓реЗрддреЗ рд╣реИрдВред
Ftrace рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
static void notrace fh_ftrace_thunk(unsigned long ip, unsigned long parent_ip, struct ftrace_ops *ops, struct pt_regs *regs) { struct ftrace_hook *hook = container_of(ops, struct ftrace_hook, ops); regs->ip = (unsigned long) hook->function; }
struct ftrace_hook
() рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЕрдкрдиреЗ
struct ftrace_hook
рдХрд╛ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЗрд╕рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб
struct ftrace_hook
рдХреЗ рдкрддреЗ рдкрд░ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рдЕрдкрдиреЗ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдкрддреЗ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░рдХреНрдЪрд░
struct pt_regs
рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ% rip рд░рдЬрд┐рд╕реНрдЯрд░ рдорд╛рди рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╡рд╣ рд╕рдм рд╣реИред X86_64 рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдЖрдИрдкреА рдпрд╛ рдкреАрд╕реА), рд▓реЗрдХрд┐рди рд╡рд┐рдЪрд╛рд░ рдЙрдирдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рд╣реИред
рдиреЛрдЯрдмреИрдХ рдХреНрд╡рд╛рд▓рд┐рдлрд╝рд╛рдпрд░ рдХреЛ рдХреЙрд▓рдмреИрдХ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдиреЛрдЯ рдХрд░реЗрдВред рд╡реЗ рдЙрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдлрд╝реНрд▓реИрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдлрд╝реБрдЯреНрд░реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣реИ рдХрд┐ рдлреНрд░реЗрд╕ рдХреЗ рдХрд╛рд░реНрдп рдЬреЛ рдЯреНрд░реЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЪрд┐рд╣реНрдирд┐рдд рд╣реИрдВред рдпрд╣ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рддреЗ рд╕рдордп рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдПрдХ рдЕрдВрддрд╣реАрди рд▓реВрдк рдореЗрдВ рдЬрдордиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ (ftrace рдпрд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред
рдлрд╝реБрдЯрдмреИрдХ рдХреЙрд▓рдмреИрдХ рдЖрдорддреМрд░ рдкрд░ рдПрдХреНрд╕рдЯреНрд░реВрдЬрд╝рди рдбрд┐рд╕реЗрдмрд▓реНрдб (рдЬреИрд╕реЗ рдХрд┐рдкреНрд░реЛрдмреНрд╕) рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЙрди рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдкреНрд░рддрд┐рдмрдВрдз рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕рд┐рд░реНрдл рдЖрда рдмрд╛рдЗрдЯреНрд╕ рдХреА рдЬрдЧрд╣ рд▓реЗрддреЗ рд╣реИрдВред
рдЖрд╡рд░рдг рдлрд╝рдВрдХреНрд╢рди, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдорд╛рди рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЖрдк рд╡рд╣рд╛рдВ рд╡рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдПрдХ рдмрд╛рдзрд╛ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд░реЛрдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрднреА рднреА рдПрдХ рдЖрд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рд╕реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рд╕рдВрд░рдХреНрд╖рдг
рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ рдПрдХ рдкрдХрдбрд╝ рд╣реИ: рдЬрдм рд╣рдорд╛рд░рд╛ рд░реИрдкрд░ рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдлрд┐рд░ рд╕реЗ рдлрд╝реНрд░реЗрд╕ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдлрд┐рд░ рд╕реЗ рд╣рдорд╛рд░реЗ рдХреЙрд▓рдмреИрдХ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдлрд┐рд░ рд╕реЗ рд░реИрдкрд░ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдХрдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИредрд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╕рдмрд╕реЗ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рддрд░реАрдХрд╛ рд╣реИ parent_ip
, рдлрд╝реБрдЯреЗрдЬ рдХреЙрд▓рдмреИрдХ рдХреЗ рдПрдХ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ , рдЬрд┐рд╕рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрддрд╛ рдкрддрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЯреНрд░реЗрд╕ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рдЧреНрд░рд╛рдл рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╣рд▓реЗ рдХреЙрд▓ рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрдм рдлрд┐рд░ рд╕реЗ рдмреБрд▓рд╛ рд░рд╣рд╛ рд╣реИparent_ip
рд╣рдорд╛рд░реЗ рдЖрд╡рд░рдг рдХреЗ рдЕрдВрджрд░ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдмрдХрд┐ рдкрд╣рд▓реЗ - рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдерд╛рди рдкрд░ред рдирд┐рдпрдВрддреНрд░рдг рдХреЗрд╡рд▓ рддрдм рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдлрд╝рдВрдХреНрд╢рди рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдп рд╕рднреА рдХреЛ рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПредрд╡рд░реНрддрдорд╛рди рдореЙрдбреНрдпреВрд▓ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкрддреЗ рдХреА рддреБрд▓рдирд╛ рдХрд░рдХреЗ рдкреНрд░рд╡реЗрд╢ рдЬрд╛рдВрдЪ рдмрд╣реБрдд рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ (рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рд╕рднреА рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВ)ред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЕрдЧрд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреЗрд╡рд▓ рд░реИрдкрд░ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдЪрдпрдирд╛рддреНрдордХ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИредрдХреБрд▓ рдореЗрдВ, рд╕рд╣реА ftrace рдХреЙрд▓рдмреИрдХ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: static void notrace fh_ftrace_thunk(unsigned long ip, unsigned long parent_ip, struct ftrace_ops *ops, struct pt_regs *regs) { struct ftrace_hook *hook = container_of(ops, struct ftrace_hook, ops); if (!within_module(parent_ip, THIS_MODULE)) regs->ip = (unsigned long) hook->function; }
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ / рд▓рд╛рдн:- рдХрдо рдУрд╡рд░рд╣реЗрдбред рдмрд╕ рдХреБрдЫ рдШрдЯрд╛рд╡ рдФрд░ рддреБрд▓рдирд╛ред рдХреЛрдИ рд╕реНрдкрд┐рдирд▓реЙрдХ, рд╕реВрдЪреА рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред
- . . , .
- . kretprobes , ( ). , .
рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ: рдЖрдкрдиреЗ рдореМрдЬреВрджрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ ls рдХрдорд╛рдВрдб рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ ред рд╢реЗрд▓ (рдХрд╣реЛ рдмрд╛рд╢) рдПрдХ рдирдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реА рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдХрд╛рдВрдЯрд╛ () + рдирд┐рд╖реНрдкрд╛рджрд┐рдд () рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдЬреЛрдбрд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ ред рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ, рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреНрд░рдорд╢рдГ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреНрд▓реЛрди () рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд () рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдирдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрд┐рдд () рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЛ рд░реЛрдХрддреЗ рд╣реИрдВредрдЧреНрд░рд╛рдлрд┐рдХ рд░реВрдк рдореЗрдВ, рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрд╡рд░реЛрдзрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рдпрд╣рд╛рдВ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ ( рдиреАрд▓рд╛ ) рдХрд░реНрдиреЗрд▓ рдХреЛ рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреИрд╕реЗ рдХрд░рддреА рд╣реИ ( рд▓рд╛рд▓)), рдЬрд╣рд╛рдВ рдлреВрдЯреНрд░реЗрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ ( рдмреИрдВрдЧрдиреА ) рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ ( рдЧреНрд░реАрди ) рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ ред- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ SYSCALL рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреА рд╣реИред рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдХрд░реНрдиреЗрд▓ рдореЛрдб рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рд╣реИрдВрдбрд▓рд░ - рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐_SYSCALL_64 () рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рд╡рд╣ 64-рдмрд┐рдЯ рдХрд░реНрдиреЗрд▓ рдкрд░ 64-рдмрд┐рдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рднреА рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
- . , , do_syscall_64 (), .
sys_call_table
тАФ sys_execve ().
- ftrace. __fentry__ (), ftrace. , , nop , sys_execve() .
- Ftrace . ftrace , . , %rip, .
- .
parent_ip
, do_syscall_64() тАФ sys_execve() тАФ , %rip pt_regs
.
- Ftrace . FTRACE_SAVE_REGS, ftrace
pt_regs
. ftrace . %rip тАФ тАФ .
- -. - sys_execve() . fh_sys_execve (). , do_syscall_64().
- . . fh_sys_execve() ( ) . . тАФ sys_execve() , real_sys_execve , .
- . sys_execve(), ftrace . , -тАж
- . sys_execve() fh_sys_execve(), do_syscall_64(). sys_execve() . : ftrace sys_execve() .
- . sys_execve() fh_sys_execve(). . , execve() , , , . .
- рдкреНрд░рдмрдВрдзрди рдХреЛрд░ рдореЗрдВ рд▓реМрдЯрддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, fh_sys_execve () рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдирд┐рдпрдВрддреНрд░рдг do_syscall_64 () рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рдерд╛ред рдХреЛрд░ рдЕрдкрдиреЗ рдкрд░рдорд╛рдгреБ рдХрд╛рд░реЛрдмрд╛рд░ рдХреЛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред
- рдкреНрд░рдмрдВрдзрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рд▓реМрдЯрддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рдХрд░реНрдиреЗрд▓ IRET рдирд┐рд░реНрджреЗрд╢ (рдпрд╛ SYSRET, рд▓реЗрдХрд┐рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд () рдпрд╣ рд╣рдореЗрд╢рд╛ IRET рд╣реЛрддрд╛ рд╣реИ) рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд░рдЬрд┐рд╕реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЗрдВрджреНрд░реАрдп рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдореЛрдб рдореЗрдВ рдбрд╛рд▓рддрд╛ рд╣реИред рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ (рдФрд░ рдПрдХ рдирдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ) рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред
рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди
рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╛рдпрджреЗ рд╣реИрдВ:- API . . , , . тАФ -, .
- . . - , , , - . ( ), .
- рдЕрдиреБрд░реЗрдЦрдг рдЕрдиреБрд░реЗрдЦрдг рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рд╡рд┐рдзрд┐ рдлреВрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЕрднреА рднреА рдХрд░реНрдиреЗрд▓ рд╕реЗ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдкреНрд░рджрд░реНрд╢рди рд╕рдВрдХреЗрддрдХ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред Kprobes рдпрд╛ splicing рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ ftrace рддрдВрддреНрд░ рдореЗрдВ рдмрд╛рдзрд╛ рдЖ рд╕рдХрддреА рд╣реИред
рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рдиреБрдХрд╕рд╛рди рдХреНрдпрд╛ рд╣реИрдВ?- рдХрд░реНрдиреЗрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВред рдлреНрд░реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрдВрдХреНрд╢рди рд╣реБрдХ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд░реНрдиреЗрд▓ рдХреЛ рдХрдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП:
- рдирд╛рдо рд╕реЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓реНрд╕ рдЬрд┐рдо рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдХреА рд╕реВрдЪреА
- рдЕрдиреБрд░реЗрдЦрдг рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдлреБрдЯреНрд░реЗрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ
- рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЖрд▓реЛрдЪрдирд╛ рдЕрд╡рд░реЛрдзрди рд╡рд┐рдХрд▓реНрдк
. , , , , . , - , .
- ftrace , kprobes ( ftrace ), , , . , ftrace тАФ , ┬л┬╗ ftrace .
- . , . , , ftrace . , , .
- рдбрдмрд▓ рдХреЙрд▓ рдлреБрдЯреНрд░реЗрд╕ред рд╕реВрдЪрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рджреГрд╖реНрдЯрд┐рдХреЛрдг
parent_ip
рдПрдХ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ рдлрд┐рд░ рд╕реЗ рд╣реБрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ред рдпрд╣ рдУрд╡рд░рд╣реЗрдб рдХрд╛ рдПрдХ рд╕рд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рдирд┐рд╢рд╛рди рдиреАрдЪреЗ рджрд╕реНрддрдХ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрдИ рдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рджреЛ рдмрд╛рд░ рджреЗрдЦреЗрдВрдЧреЗред рдереЛрдбрд╝рд╛ рдХрд╛рд▓рд╛ рдЬрд╛рджреВ рд▓рдЧрд╛рдиреЗ рд╕реЗ рдЗрд╕ рдЦрд╛рдореА рдХреЛ рдЯрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдлрдВрдХреНрд╢рди рдХреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдлреВрдЯреНрд░реЗрд╕ рдХреЙрд▓ рд╕реНрдерд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрддрд╛ 5 рдмрд╛рдЗрдЯреНрд╕ (рдХреЙрд▓ рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХреА рд▓рдВрдмрд╛рдИ) рджреНрд╡рд╛рд░рд╛ рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдлрд╝реБрдЯреНрд░реЗрд╕ рд╕реЗ рдХреВрдж рд╕рдХрддреЗ рд╣реИрдВред
рдХреБрдЫ рдиреБрдХрд╕рд╛рдиреЛрдВ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВредрдХрд░реНрдиреЗрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ
рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдХрд░реНрдиреЗрд▓ рдХреЛ ftrace рдФрд░ kalls Gym рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:- CONFIG_FTRACE
- CONFIG_KALLSYMS
рдлрд┐рд░, рдлреНрд░реЗрд╕ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░рдЬрд┐рд╕реНрдЯрд░ рд╕рдВрд╢реЛрдзрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред- CONFIG_DYNAMIC_FTRACE_WITH_REGS
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХрд░реНрдиреЗрд▓ FTRACE_OPS_FL_IPMODIFY рдзреНрд╡рдЬ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг 3.19 рдпрд╛ рдЙрдЪреНрдЪрддрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ред рдХрд░реНрдиреЗрд▓ рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рднреА% рд░рд┐рдк рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рд▓реЗрдХрд┐рди 3.19 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░ рдпрд╣ рдзреНрд╡рдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреБрд░рд╛рдиреА рдЧреБрдард▓реА рдХреЗ рд▓рд┐рдП рдПрдХ рдзреНрд╡рдЬ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗрдЧреА, рдФрд░ рдирдП рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдПрдХ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдЕрд╡рд░реЛрдзрди рдХреЛ рдЬрдиреНрдо рджреЗрдЧреАредрдЕрдВрдд рдореЗрдВ, рдЕрд╡рд░реЛрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ ft рдХреЙрд▓ рдХрд╛ рд╕реНрдерд╛рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ: рдХреЙрд▓ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рд╕реЗ рдкрд╣рд▓реЗ (рдЬрд╣рд╛рдВ рд╕реНрдерд╛рди рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдмрдирддрд╛ рд╣реИ) рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╕реБрд╡рд┐рдзрд╛ рд╡рд┐рдХрд▓реНрдк рджреНрд╡рд╛рд░рд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИX86_64 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди i386 рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред I386 рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╕реАрдорд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг, рдХрдВрдкрд╛рдЗрд▓рд░ рдлрдВрдХреНрд╢рди рдкреНрд░реЛрд▓реЙрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдлреНрд░реЗрд╕ рдХреЙрд▓ рдирд╣реАрдВ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЬрдм рддрдХ рдлреАрд▓реНрд░реЗрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рддрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реНрдЯреИрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрд╢реЛрдзрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЕрд╡рд░реЛрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЗрд╡рд▓% eip рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ - рдЖрдкрдХреЛ рдкреНрд░реЛрдпреЛрдЧ рдореЗрдВ рдХрд┐рдП рдЧрдП рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрд▓рдЯрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВредрдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, ftrace рдЗрдВрдЯрд░рд╕реЗрдкреНрд╢рди x86 32-рдмрд┐рдЯ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЗрд╕реЗ рдХреБрдЫ рдХрд╛рд▓реЗ рдЬрд╛рджреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ("рдПрдВрдЯреА-рдкреНрд░реЛрд▓реЙрдЧ" рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛), рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕рдорд╛рдзрд╛рди рдХреА рддрдХрдиреАрдХреА рд╕рд╛рджрдЧреА рдХреЛ рднреБрдЧрддрдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдлрд╝реБрдЯреНрд░реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдлрд╛рдпрджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИредрдЕрдЪрдВрднрд┐рдд рдЖрд╢реНрдЪрд░реНрдп
рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди, рд╣рдо рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЖрдП : рдХреБрдЫ рд╡рд┐рддрд░рдгреЛрдВ рдкрд░, рд╣реБрдХрд┐рдВрдЧ рдХрд╛рд░реНрдпреЛрдВ рдиреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдХрд╕рдХрд░ рджреБрд░реНрдШрдЯрдирд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ рджрд┐рдпрд╛ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдХреЗрд╡рд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣реБрдЖред рд╕рдорд╕реНрдпрд╛ рдХрд┐рд╕реА рднреА рд╡рд┐рддрд░рдг рдФрд░ рдХрд░реНрдиреЗрд▓ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдореВрд▓ рдЕрд╡рд░реЛрдзрди рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкрд░ рдкреБрди: рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реБрдИредрдбрд┐рдмрдЧрд┐рдВрдЧ рдиреЗ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рд╣реИрдВрдЧ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдлрдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рд╣реЛрддрд╛ рд╣реИред рдХрд┐рд╕реА рд░рд╣рд╕реНрдпрдордп рдХрд╛рд░рдг рд╕реЗ, рдЬрдм рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓реНрд░реЗрд╕ рдХреЙрд▓рдмреИрдХ рдХреЗ рдЕрдВрджрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛, рддреЛ рдкрддрд╛ parent_ip
рд░реИрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп рдХрд░реНрдиреЗрд▓ рдХреЛрдб рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд░рд╣рд╛ред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдПрдХ рдЕрдВрддрд╣реАрди рд▓реВрдк рдЙрддреНрдкрдиреНрди рд╣реБрдЖ, рдХреНрдпреЛрдВрдХрд┐ ftrace рдиреЗ рд╣рдорд╛рд░реЗ рд░реИрдкрд░ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдмрд╛рд░-рдмрд╛рд░ рдмреБрд▓рд╛рдпрд╛редрд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдЯреВрдЯреЗ рд╣реБрдП рджреЛрдиреЛрдВ рдХреЛрдб рдереЗ, рдЗрд╕рд▓рд┐рдП рдорддрднреЗрджреЛрдВ рдХреЛ рдЦреЛрдЬрдирд╛ рдХреЗрд╡рд▓ рд╕рдордп рдХреА рдмрд╛рдд рдереАред рдХреЛрдб рдХреЛ рдПрдХрдЬреБрдЯ рдХрд░рдиреЗ рдФрд░ рд╕рднреА рдХреЛ рдмрд╛рд╣рд░ рдлреЗрдВрдХрдиреЗ рдХреЗ рдмрд╛рдж, рдЬреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИ, рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЛ рдПрдХ рдЖрд╡рд░рдг рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛редрдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛: static asmlinkage long fh_sys_execve(const char __user *filename, const char __user *const __user *argv, const char __user *const __user *envp) { long ret; pr_debug("execve() called: filename=%p argv=%p envp=%p\n", filename, argv, envp); ret = real_sys_execve(filename, argv, envp); pr_debug("execve() returns: %ld\n", ret); return ret; }
рд▓реЗрдХрд┐рди рдЗрд╕ рдПрдХ - рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд▓рдЯрдХрд╛ рджрд┐рдпрд╛: static asmlinkage long fh_sys_execve(const char __user *filename, const char __user *const __user *argv, const char __user *const __user *envp) { long ret; pr_devel("execve() called: filename=%p argv=%p envp=%p\n", filename, argv, envp); ret = real_sys_execve(filename, argv, envp); pr_devel("execve() returns: %ld\n", ret); return ret; }
рдпрд╣ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд▓реЙрдЧрд┐рдВрдЧ рдХрд╛ рд╕реНрддрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ? рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╢реАрди рдХреЛрдб рдХреЗ рдПрдХ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЕрдзреНрдпрдпрди рдиреЗ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рджреЛрд╖ рджреЗрдиреЗ рдкрд░ рдмрд╣реБрдд рднрд╛рд╡рдирд╛ рдкреИрджрд╛ рдХреАред рдЖрдорддреМрд░ рдкрд░ рд╡рд╣ рдмреНрд░рд╣реНрдорд╛рдВрдбреАрдп рдХрд┐рд░рдгреЛрдВ рдХреЗ рдкрд╛рд╕ рдХрд╣реАрдВ рд╕рдВрджрд┐рдЧреНрдз рд╕реВрдЪреА рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ рдирд╣реАрдВредрдмрд╛рдд, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, pr_devel () рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рд╢реВрдиреНрдп рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реИрдВред рдкреНрд░рд┐рдВрдЯ рдореИрдХреНрд░реЛ рдХреЗ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдРрд╕реА рд▓реЙрдЧ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ DEBUG рдореИрдХреНрд░реЛ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреЛрдб рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╕рдВрдХрд▓рдХ рдХрд╛ рдХрд╛рд░реНрдп рдЗрд╕ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ: static asmlinkage long fh_sys_execve(const char __user *filename, const char __user *const __user *argv, const char __user *const __user *envp) { return real_sys_execve(filename, argv, envp); }
рдФрд░ рдпрд╣рд╛рдБ рдЕрдиреБрдХреВрд▓рди рджреГрд╢реНрдп рдкрд░ рдЖрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рддрдерд╛рдХрдерд┐рдд рдХрд╛рдо рдХрд┐рдпрд╛ рдЕрдиреБрдХреВрд▓рди рдкреВрдВрдЫ рдХреЙрд▓ (рдкреВрдВрдЫ рдХреЙрд▓ рдЕрдиреБрдХреВрд▓рди)ред рдпрд╣ рд╕рдВрдХрд▓рдХ рдХреЛ рдПрдХ рдИрдорд╛рдирджрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдЙрд╕рдХреЗ рд╢рд░реАрд░ рдкрд░ рд╕реАрдзреЗ рдХреВрджрдиреЗ рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рджреВрд╕рд░реЗ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рддреБрд░рдВрдд рдЕрдкрдирд╛ рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред рдорд╢реАрди рдХреЛрдб рдореЗрдВ, рдПрдХ рдИрдорд╛рдирджрд╛рд░ рдХреЙрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: 0000000000000000 <fh_sys_execve>: 0: e8 00 00 00 00 callq 5 <fh_sys_execve+0x5> 5: ff 15 00 00 00 00 callq *0x0(%rip) b: f3 c3 repz retq
рдФрд░ рдЧреИрд░-рдХрд╛рдо - рдЗрд╕ рддрд░рд╣: 0000000000000000 <fh_sys_execve>: 0: e8 00 00 00 00 callq 5 <fh_sys_execve+0x5> 5: 48 8b 05 00 00 00 00 mov 0x0(%rip),%rax c: ff e0 jmpq *%rax
рдкрд╣рд▓рд╛ CALL рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╕рдорд╛рди __fentry __ () рдХреЙрд▓ рд╣реИ рдЬрд┐рд╕реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рд╕рднреА рдлрдВрдХреНрд╢рдиреНрд╕ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рдореЗрдВ, рдЖрдк рдХреЙрд▓ рдХреЛ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ real_sys_execve (рдореЗрдореЛрд░реА рдореЗрдВ рдкреЙрдЗрдВрдЯрд░ рджреНрд╡рд╛рд░рд╛) рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ fh_sys_execve () рд╕реЗ RET рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддреЗ рд╣реИрдВред рдЯреВрдЯреЗ рд╣реБрдП рдХреЛрдб JMP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдзреЗ real_sys_execve () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИредрдЯреЗрд▓ рдХреЙрд▓ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдЖрдкрдХреЛ "рдЕрд░реНрдерд╣реАрди" рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдХреЗ рдирд┐рд░реНрдорд╛рдг рдкрд░ рдереЛрдбрд╝рд╛ рд╕рдордп рдмрдЪрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЙрд▓ рдирд┐рд░реНрджреЗрд╢ рджреНрд╡рд╛рд░рд╛ рд╕реНрдЯреИрдХ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╡рд╛рдкрд╕реА рдкрддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рд╡рд╛рдкрд╕реА рдкрддреЗ рдХреА рд╢реБрджреНрдзрддрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддреА рд╣реИ - рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ parent_ip
рдЕрд╡рд░реЛрдзрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд╛рдж, fh_sys_execve () рдлрд╝рдВрдХреНрд╢рди рдЕрдм рд╕реНрдЯреИрдХ рдкрд░ рдирдП рд░рд┐рдЯрд░реНрди рдПрдбреНрд░реЗрд╕ рдХреЛ рд╕реЗрд╡ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╡рд╣реАрдВ рдкреБрд░рд╛рдирд╛ рд░рд╣рддрд╛ рд╣реИ - рдХрд░реНрдиреЗрд▓ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдпреЗparent_ip
рдирд╛рднрд┐рдХ рдХреЗ рдЕрдВрджрд░ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ, рдЬреЛ рдЕрдВрддрддрдГ рдПрдХ рдЕрдирдВрдд рд▓реВрдк рдХреЗ рдЧрдарди рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИредрдпрд╣ рднреА рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЗрд╡рд▓ рдХреБрдЫ рд╡рд┐рддрд░рдгреЛрдВ рдкрд░ рд╣реА рдХреНрдпреЛрдВ рдкреБрди: рдЙрддреНрдкрдиреНрди рд╣реБрдИред рдЬрдм рд╕рдВрдХрд▓рди рдореЙрдбреНрдпреВрд▓, рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рддрд░рдг рд╕рдВрдХрд▓рди рдЭрдВрдбреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╡реНрдпрдерд┐рдд рд╡рд┐рддрд░рдг рдореЗрдВ, рдкреВрдВрдЫ рдХреЙрд▓ рдЕрдиреБрдХреВрд▓рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рдерд╛редрд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд░реИрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдкреВрд░реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЯреЗрд▓ рдХреЙрд▓ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рдерд╛: #pragma GCC optimize("-fno-optimize-sibling-calls")
рдирд┐рд╖реНрдХрд░реНрд╖
рдореИрдВ рдФрд░ рдХреНрдпрд╛ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ ... рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдХреЛрдб рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдордЬреЗрджрд╛рд░ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рдХрд╛рд╢рди рдХрд┐рд╕реА рдХреЛ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдереНрд░реЛрдЯ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдордп рдмрдЪрд╛рддрд╛ рд╣реИ, рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЕрдкрдирд╛ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдПрдВрдЯреАрд╡рд╛рдпрд░рд╕ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИредрдпрджрд┐ рдЖрдк рд╕реНрд╡рдпрдВ рдЕрд╡рд░реЛрдзрди рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЧрд┐рдердм рдкрд░ рдкреВрд░реНрдг рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рдХреЛрдб рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред