рдкрд░рд┐рдЪрдп
рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореБрдЭреЗ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛ рдЧрдИред рдкрд╣рд▓реЗ рдПрд╡реАрдЖрд░, рдлрд┐рд░ рдПрдЖрд░рдПрдоред рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рджреЛ рдореБрдЦреНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░: рдЕрд╕реЗрдВрдмрд▓рд░ рдФрд░ рд╕реАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ
рдлреЛрд░реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдЗрди рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдмреЗрд╢рдХ, рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдореЗрд░реЗ рдкрд╛рд╕ рдирд╣реАрдВ рдерд╛ рдЬреЛ рдореБрдЭреЗ рдЪрд╛рд╣рд┐рдП: рдЬреАрдбреАрдмреА рдХреЗ рд╕рд╛рде рдбрд┐рдмрдЧрд┐рдВрдЧред рдФрд░ рдореИрдВ рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВ (рдЕрдм рддрдХ рдХреЗрд╡рд▓ рдПрдЖрд░рдПрдо рдХреЗ рд▓рд┐рдП)ред рдореЗрд░реЗ рдкрд╛рд╕ 32-рдмрд┐рдЯ рдПрдЖрд░рдПрдо рдХреЙрд░реНрдЯреЗрдХреНрд╕-рдПрдо 3 рдкреНрд░реЛрд╕реЗрд╕рд░, 128kB рдлреНрд▓реИрд╢ рдФрд░ 8k рд░реИрдо рдХреЗ рд╕рд╛рде рдПрдХ
stm32vldiscovery рдмреЛрд░реНрдб рдерд╛, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХреАред
рдореИрдВрдиреЗ рдлреЛрд░реНрдЯ рдкрд░ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдЯреНрд░рд╛рдВрд╕-рдЯреНрд░рд╛рдВрд╕рд▓реЗрдЯрд░ рдХреЛ рд▓рд┐рдЦрд╛ рдерд╛, рдФрд░ рд▓реЗрдЦ рдореЗрдВ рдХреЛрдИ рдХреЛрдб рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рднрд╛рд╖рд╛ рдХреЛ рд╡рд┐рджреЗрд╢реА рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдЦреБрдж рдХреЛ рдХрд╛рдлреА рд╡рд┐рд╕реНрддреГрдд рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рддрдХ рд╕реАрдорд┐рдд рдХрд░реВрдВрдЧрд╛ред рд╡рд┐рд╖рдп рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд▓рдЧрднрдЧ рдХреЛрдИ рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИрдВ, рдХреБрдЫ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЪрдпрди рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреБрдЫ рдореЗрдВ рдЬреАрд╕реАрд╕реА рд╕рдВрдХрд▓рдХ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдХреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдиреНрдпреВрдирддрдо рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдмрд┐рдирд╛ рд╕реНрдкрд░реНрд╢ рдХреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдерд╛рдирд╛рдВрддрд░рдг-рдПрд╕ рдФрд░ рдХрдИ рдЕрдиреНрдп рдЪреАрдЬреЗрдВред рд╡рд┐рд╖рдп рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рд╣реИ рдФрд░, рдореИрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреЗрд╡рд▓ 30 рдкреНрд░рддрд┐рд╢рдд рд╕рдордЭ рд▓рд┐рдпрд╛, рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдерд╛ред
рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐
рдпрд╣рд╛рдВ рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддрд╛
рд╣реИ ред
ELF рд╕рдореАрдХреНрд╖рд╛
рдорд╛рдирдХ рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рдЖрдкрдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ
рдбреАрдПрд▓рдмреА рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ
рдИрдПрд▓рдПрдл (рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдФрд░ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рд╛рд░реВрдк) рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рд╛рд░реВрдк рд╡рд┐рдирд┐рд░реНрджреЗрд╢
рдпрд╣рд╛рдБ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рдЕрдкрдиреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
, рдПрдЖрд░рдПрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ ред рдЖрдЗрдП рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
ELF рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ:
1. рд╢реАрд░реНрд╖рдХ (рдИрдПрд▓рдПрдл рд╣реИрдбрд░)
рдлрд╝рд╛рдЗрд▓ рдФрд░ рдЗрд╕рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИред
2. рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд╢реАрд░реНрд╖рдХ (рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИрдбрд░ рдЯреЗрдмрд▓)
рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЕрдиреБрднрд╛рдЧреЛрдВ рдФрд░ рдореЗрдореЛрд░реА рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рдмреАрдЪ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ; рдпрд╣ рд▓реЛрдбрд░ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрднрд╛рдЧ рд▓рд┐рдЦрдирд╛ рд╣реИред
3. рдзрд╛рд░рд╛
рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ (рдкреНрд░реЛрдЧреНрд░рд╛рдо, рдбреЗрдЯрд╛, рдбреАрдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА, рдЖрджрд┐) рдХреА рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ
рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░, рдирд╛рдо рдФрд░ рдЕрдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВред ".Text" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рдХреЛрдб рдЖрдорддреМрд░ рдкрд░, ".symtab" - рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреНрд░рддреАрдХреЛрдВ (рдлрд╝рд╛рдЗрд▓ рдирд╛рдо, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдФрд░ рдЪрд░) рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛, ".strtab" рдореЗрдВ - рд▓рд╛рдЗрдиреЛрдВ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛, рдЙрдкрд╕рд░реНрдЧ "ред Debug_" - рдбрд┐рдмрдЧ рдЬрд╛рдирдХрд╛рд░реА, рдЖрджрд┐ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред .Dред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдЗрдВрдбреЗрдХреНрд╕ 0 рдХреЗ рд╕рд╛рде рдПрдХ рдЦрд╛рд▓реА рдЕрдиреБрднрд╛рдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
4. рдЕрдиреБрднрд╛рдЧ рд╢реАрд░реНрд╖рдХ рддрд╛рд▓рд┐рдХрд╛
рдпрд╣ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрдиреБрднрд╛рдЧ рд╢реАрд░реНрд╖рдХреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реЛрддреА рд╣реИред
рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдИрдПрд▓рдПрдл рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред
DWARF рд╕рдореАрдХреНрд╖рд╛
DWARF рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХреАрдХреГрдд рдкреНрд░рд╛рд░реВрдк рд╣реИред
рдорд╛рдирдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдПрдХ рдЕрджреНрднреБрдд рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрд╡рд▓реЛрдХрди рднреА рд╣реИ:
DWARF рдбрд┐рдмрдЧрд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк (рдорд╛рдЗрдХрд▓ рдЬреЗред рдИрдЧрд░) рдХрд╛
рдкрд░рд┐рдЪрдп ред
рдореБрдЭреЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдпрд╣ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
- рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯреНрд╕ рднреМрддрд┐рдХ рдкрддреЗ рдкрд░ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рд╕реНрд░реЛрдд рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЗрди рдирдВрдмрд░ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд╛рдо рдкрд░
- рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдЪрд░, рд╕рд╛рде рд╣реА рдлрд╝рдВрдХреНрд╢рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ
- рдкреНрд░рджрд░реНрд╢рди рдХреЙрд▓ рд╕реНрдЯреИрдХ (рдмреИрдХрдЯреНрд░реЗрд╕)
- рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдЪрд░рдг рдХреЛ рдПрдХ рдХреЛрдбрд╛рдВрддрд░рдХ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рддрд░реНрдЬ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдПрдХ рдкреЗрдбрд╝ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЯреНрд░реА рдиреЛрдб рдореЗрдВ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╣реЛрддреЗ рд╣реИрдВ, рдмрдЪреНрдЪреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдбреАрдЖрдИрдИ (рдбрд┐рдмрдЧрд┐рдВрдЧ рдЗрдВрдлреЙрд░реНрдореЗрд╢рди рдПрдВрдЯреНрд░реА) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдХрд╛ рдЕрдкрдирд╛ рдЯреИрдЧ (рдкреНрд░рдХрд╛рд░) рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрддреА рд╣реИ (рдЧреБрдг) рдЬреЛ рдиреЛрдб рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдореЗрдВ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛ рдпрд╛ рдЕрдиреНрдп рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдВрдХред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреЗрдбрд╝ рдХреЗ рдмрд╛рд╣рд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдЬрд╛рдирдХрд╛рд░реА рд╣реИред
рдиреЛрдбреНрд╕ рдХреЛ рджреЛ рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдиреЛрдбреНрд╕ рдЬреЛ рдбреЗрдЯрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдиреЛрдбреНрд╕ рдЬреЛ рдХреЛрдб рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред
рдбреЗрдЯрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдиреЛрдб:
- рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░:
- рдмреБрдирд┐рдпрд╛рджреА рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ (рдкреНрд░рдХрд╛рд░ DW_TAG_base_type рдХреЗ рд╕рд╛рде рдиреЛрдб), рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ рд╕реА рдореЗрдВ рдЯрд╛рдЗрдк рдЗрдВрдЯред
- рдорд┐рд╢реНрд░рд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ (рд╕рдВрдХреЗрдд, рдЖрджрд┐)
- рд╕рд░рдгрд┐рдпреЛрдВ
- рд╕рдВрд░рдЪрдирд╛рдПрдВ, рдХрдХреНрд╖рд╛рдПрдВ, рдпреВрдирд┐рдпрдиреЛрдВ, рдЗрдВрдЯрд░рдлреЗрд╕
- рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ:
- рд╕реНрдерд┐рд░рд╛рдВрдХ
- рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░
- рдЪрд░
- рдЖрджрд┐
рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ DW_AT_location рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдЬрд┐рд╕ рдкрддреЗ рдкрд░ рдбреЗрдЯрд╛ рд╕реНрдерд┐рдд рд╣реИ рдЙрд╕рдХреА рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЪрд░ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкрддрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдпрд╛ рд╕реНрдЯреИрдХ рдкрд░ рд╣реЛ, рдПрдХ рд╡рд░реНрдЧ рдпрд╛ рд╡рд╕реНрддреБ рдХрд╛ рд╕рджрд╕реНрдп рд╣реЛред рдЗрд╕ рдкрддреЗ рдХреА рдЧрдгрдирд╛ рдПрдХ рдЬрдЯрд┐рд▓ рддрд░реАрдХреЗ рд╕реЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдорд╛рдирдХ рддрдерд╛рдХрдерд┐рдд рд▓реЛрдХреЗрд╢рди рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЖрдВрддрд░рд┐рдХ рд╕реНрдЯреИрдХ рдорд╢реАрди рдХреЗ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЕрдиреБрдХреНрд░рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдХреЛрдб рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдиреЛрдб:
- рдХрд╛рд░реНрдпрд╡рд┐рдзрд┐рдпрд╛рдБ (рдлрд╝рдВрдХреНрд╢рдВрд╕) - рдиреЛрдбреНрд╕ рдЯреИрдЧ DW_TAG_subprogram рдХреЗ рд╕рд╛рдеред рд╡рдВрд╢рдЬ рдиреЛрдбреНрд╕ рдореЗрдВ рдЪрд░ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдлрд╝рдВрдХреНрд╢рди рдЪрд░ред
- рд╕рдВрдХрд▓рди рдЗрдХрд╛рдИ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рд╕рднреА рдиреЛрдбреНрд╕ рдХрд╛ рдЬрдирдХ рд╣реИред
рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЬрд╛рдирдХрд╛рд░реА ".debug_info" рдФрд░ ".debug_abbrev" рдЕрдиреБрднрд╛рдЧреЛрдВ рдореЗрдВ рд╣реИред
рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА:
- рдкрдВрдХреНрддрд┐ рд╕рдВрдЦреНрдпрд╛ (рдЕрдиреБрднрд╛рдЧ ".debug_line") рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА
- рдореИрдХреНрд░реЛ рд╕реВрдЪрдирд╛ (рдЕрдиреБрднрд╛рдЧ ".debug_macinfo")
- рдХреЙрд▓ рдлрд╝реНрд░реЗрдо рд╕реВрдЪрдирд╛ ("ред Debug_frame" рдЕрдиреБрднрд╛рдЧ)
рдИрдПрд▓рдПрдл рдмрдирд╛рдирд╛
рд╣рдо
рдПрд▓реНрдлреБрдЯрд┐рд▓реНрд╕ рдкреИрдХреЗрдЬ рд╕реЗ
рдПрдмреНрд▓реЗрдЬрдлреБрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдИрдПрдлрдПрд▓ рдлрд╛рдЗрд▓
рдмрдирд╛рдПрдВрдЧреЗ ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП libble -
LibELF рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рд╣реИ (рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдмрд╣реБрдд рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ) рдФрд░ рд╕рд╛рде рд╣реА рд╕рд╛рде
рдкреНрд░рд▓реЗрдЦрди рднреА ред
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛ рдХрдИ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ:
- рд▓рд┐рдмреЗрд▓ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди
- рдлрд╝рд╛рдЗрд▓ рд╣реЗрдбрд░ рдмрдирд╛рдирд╛ (ELF Header)
- рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реЗрдбрд░ рдмрдирд╛рдирд╛ (рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИрдбрд░ рдЯреЗрдмрд▓)
- рдЕрдиреБрднрд╛рдЧ рдмрдирд╛рдПрдВ
- рдлрд╝рд╛рдЗрд▓ рд░рд┐рдХреЙрд░реНрдб
рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рд▓рд┐рдмреЗрд▓ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ elf_version рдлрд╝рдВрдХреНрд╢рди (EV_CURRENT) рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рд╣реЛрдЧреАред рдпрджрд┐ рдпрд╣ EV_NONE рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рд╣реИ рдФрд░ рдЖрдЧреЗ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдлрд┐рд░ рд╣рдореЗрдВ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдбрд┐рд╕реНрдХ рдкрд░ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХрд╛ рд╣реИрдВрдбрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ elf_begin рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ:
Elf * elf_begin( int fd, Elf_Cmd cmd, Elf *elf)
- fd - рдирдИ рдЦреЛрд▓реА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░реЗрдВ
- cmd - рдореЛрдб, рдкрдврд╝рдиреЗ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП ELF_C_READ, рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП ELF_C_WRITE рдпрд╛ рдкрдврд╝рдиреЗ / рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП ELF_C_RDWR), рдпрд╣ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдУрдкрди рдлрд╛рдЗрд▓ рдореЛрдб (ELF_C_RRITE) рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)
- рдпреЛрдЧрд┐рдиреА - рдХреЗрд╡рд▓ рд╕рдВрдЧреНрд░рд╣ рдлрд╝рд╛рдЗрд▓реЛрдВ (.A) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ 0 рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕реА рд╡рд░реНрдгрдХ рдХреЛ рдмрдирд╛рдП рдЧрдП рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдкрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рднреА рдкрд░рд┐рд╡рд╛рдж рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, 0 рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рд╢реАрд░реНрд╖рдХ рдмрдирд╛рдПрдБ
рдирдпрд╛ рдлрд╝рд╛рдЗрд▓ рд╣реЗрдбрд░ elf32_newehdr рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
Elf32_Ehdr * elf32_newehdr( Elf *elf);
- рдпреЛрдЧрд┐рдиреА - рд╕рдВрднрд╛рд▓ elf_begin рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯ рдЖрдП
рддреНрд░реБрдЯрд┐ рдкрд░ 0 рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдпрд╛ рдХрд┐рд╕реА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ - ELF рдлрд╝рд╛рдЗрд▓ рд╣реЗрдбрд░:
#define EI_NIDENT 16 typedef struct { unsigned char e_ident[EI_NIDENT]; Elf32_Half e_type; Elf32_Half e_machine; Elf32_Word e_version; Elf32_Addr e_entry; Elf32_Off e_phoff; Elf32_Off e_shoff; Elf32_Word e_flags; Elf32_Half e_ehsize; Elf32_Half e_phentsize; Elf32_Half e_phnum; Elf32_Half e_shentsize; Elf32_Half e_shnum; Elf32_Half e_shstrndx; } Elf32_Ehdr;
рдЗрд╕рдХреЗ рдХреБрдЫ рдХреНрд╖реЗрддреНрд░ рдПрдХ рдорд╛рдирдХ рддрд░реАрдХреЗ рд╕реЗ рднрд░реЗ рдЧрдП рд╣реИрдВ, рдХреБрдЫ рдХреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рднрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- e_ident - рдкрд╣рдЪрд╛рди рдмрд╛рдЗрдЯ рд╕рд░рдгреА, рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдХреЗрдд рд╣реИрдВ:
- EI_MAG0, EI_MAG1, EI_MAG2, EI_MAG3 - рдЗрди 4 рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рд╡рд░реНрдг 0x7f, 'ELF' рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХрд┐ elf32_newehdad рдлрд╝рдВрдХреНрд╢рди рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╣реА рдХрд░ рдЪреБрдХрд╛ рд╣реИ
- EI_DATA - рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ: ELFDATA2LSB рдпрд╛ ELFDATA2MSBред рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ ELFDATA2LSB рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: e_ident [EI_DATA] = ELFDATA2LSB
- EI_VERSION - рдлрд╝рд╛рдЗрд▓ рд╣реЗрдбрд░ рд╕рдВрд╕реНрдХрд░рдг, рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реИ
- EI_PAD - рд╕реНрдкрд░реНрд╢ рди рдХрд░реЗрдВ
- e_type - рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдХрд╛рд░, ET_NONE - рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд┐рдирд╛, ET_REL - рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, ET_EXEC - рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓, ET_DYN - рд╕рд╛рдЭрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓, рдЖрджрд┐ред рд╣рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдХрд╛рд░ рдХреЛ ET_EXEC рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
- e_machine - рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП EM_386 - Intel рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП, ARM рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ EM_ARM (40) рдпрд╣рд╛рдБ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ - ARM рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП ELF рджреЗрдЦреЗрдВ
- e_version - рдлрд╝рд╛рдЗрд▓ рд╕рдВрд╕реНрдХрд░рдг, EV_CURRENT рдкрд░ рд╕реЗрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
- e_entry - рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХрд╛ рдкрддрд╛, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ
- e_phoff - рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдСрдлрд╕реЗрдЯ, e_shoff - рдЕрдиреБрднрд╛рдЧ рд╣реЗрдбрд░ рдСрдлрд╕реЗрдЯ, рднрд░реЗрдВ рдирд╣реАрдВ
- e_flags - рдкреНрд░реЛрд╕реЗрд╕рд░-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЭрдВрдбреЗ, рд╣рдорд╛рд░реА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд▓рд┐рдП (Cortex-M3) рдЖрдкрдХреЛ рдЗрд╕реЗ 0x05000000 (ABI рд╕рдВрд╕реНрдХрд░рдг 5) рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
- e_ehsize, e_phentsize, e_phnum, e_shentsize, e_shnum - рд╕реНрдкрд░реНрд╢ рди рдХрд░реЗрдВ
- e_shstrndx - рдЙрд╕ рдЕрдиреБрднрд╛рдЧ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕рдорд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрдиреБрднрд╛рдЧ рд╢реАрд░реНрд╖рд▓реЗрдЦреЛрдВ рдХреЗ рд╕рд╛рде рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реЛрддреА рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдХреЛрдИ рдЕрдиреБрднрд╛рдЧ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕ рдирдВрдмрд░ рдХреЛ рдмрд╛рдж рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВрдЧреЗ
рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╢реАрд░реНрд╖рдХ рдмрдирд╛рдПрдБ
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реЗрдбрд░ (рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИрдбрд░ рдЯреЗрдмрд▓) рдлрд╛рдЗрд▓ рд╕реЗрдХреНрд╢рди рдФрд░ рдореЗрдореЛрд░реА рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рдмреАрдЪ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ, рдЬреЛ рд▓реЛрдбрд░ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдХреНрд╢рди рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╢реАрд░реНрд╖рдХ elf32_newphdr рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
Elf32_Phdr * elf32_newphdr( Elf *elf, size_t count);
- рдпреЛрдЧрд┐рдиреА рд╣рдорд╛рд░рд╛ рд╡рд░реНрдгрдирдХрд░реНрддрд╛ рд╣реИ
- рдЧрд┐рдирддреА - рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рдЕрдиреБрднрд╛рдЧ (рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдХреЗ рд╕рд╛рде) рд╣реЛрдЧрд╛, рдлрд┐рд░ рдЧрдгрдирд╛ 1 рд╣реЛрдЧреАред
рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реЗрдбрд░ рдкрд░ рддреНрд░реБрдЯрд┐ рдпрд╛ рдкреЙрдЗрдВрдЯрд░ рдкрд░ 0 рджреЗрддрд╛ рд╣реИред
рд╢реАрд░реНрд╖ рд▓реЗрдЦ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╣реИ:
typedef struct { Elf32_Word p_type; Elf32_Off p_offset; Elf32_Addr p_vaddr; Elf32_Addr p_paddr; Elf32_Word p_filesz; Elf32_Word p_memsz; Elf32_Word p_flags; Elf32_Word p_align; } Elf32_Phdr;
рдЕрдиреБрднрд╛рдЧ рдмрдирд╛рдПрдБ
рд╣реЗрдбрд░ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╕реЗрдХреНрд╢рди рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдЦрд╛рд▓реА рдЦрдВрдб elf_newscn рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
Elf_Scn * elf_newscn( Elf *elf);
- рдпреЛрдЧрд┐рдиреА - рд╕рдВрднрд╛рд▓ elf_begin рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд▓реМрдЯ рдЖрдП
рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕реА рдкреЙрдЗрдВрдЯрд░ рдХреЛ рддреНрд░реБрдЯрд┐ рдкрд░ рдЦрдВрдб рдпрд╛ 0 рдкрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рд╕реЗрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд╕реЗрдХреНрд╢рди рд╣реЗрдбрд░ рдХреЛ рднрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╕реЗрдХреНрд╢рди рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред
рд╣рдо elf32_getshdr рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрднрд╛рдЧ рд╣реЗрдбрд░ рдХреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
Elf32_Shdr * elf32_getshdr( Elf_Scn *scn);
- scn рдЙрд╕ рдЕрдиреБрднрд╛рдЧ рдХрд╛ рд╕реВрдЪрдХ рд╣реИ рдЬреЛ рд╣рдореЗрдВ elf_newscn рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдорд┐рд▓рд╛ рд╣реИред
рдЕрдиреБрднрд╛рдЧ рд╢реАрд░реНрд╖рдХ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
typedef struct { Elf32_Word sh_name; Elf32_Word sh_type; Elf32_Word sh_flags; Elf32_Addr sh_addr; Elf32_Off sh_offset; Elf32_Word sh_size; Elf32_Word sh_link; Elf32_Word sh_info; Elf32_Word sh_addralign; Elf32_Word sh_entsize; } Elf32_Shdr;
- sh_name - рд╕реЗрдХреНрд╢рди рдХрд╛ рдирд╛рдо - рд╕реЗрдХреНрд╢рди рд╣реЗрдбрд░ (рд╕реЗрдХреНрд╢рди .shstrtab) рдХреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЯреЗрдмрд▓ рдореЗрдВ рдСрдлрд╕реЗрдЯ - рдиреАрдЪреЗ "рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛рдПрдБ" рджреЗрдЦреЗрдВ
- sh_type - рдЕрдиреБрднрд╛рдЧ рдХрд╛ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░, рдЙрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рд╡рд╛рд▓реЗ рдЕрдиреБрднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ SHT_PROGBITS рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЯреЗрдмрд▓ рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЗ рд▓рд┐рдП - SHT_STRTAB, рд╡рд░реНрдг рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП - SHT_SYMTAB
- sh_flags - рдЦрдВрдб рдЭрдВрдбреЗ рдЬреЛ рд╕рдВрдпреБрдХреНрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рддреАрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- SHF_ALLOC - рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЕрдиреБрднрд╛рдЧ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
- SHF_EXECINSTR - рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ
- SHF_STRINGS - рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ
рддрджрдиреБрд╕рд╛рд░, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╛рде .text рдЕрдиреБрднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЭрдВрдбреЗ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП SHF_ALLOC + SHF_EXECINSTR - sh_addr - рдкрддрд╛ рдЬрд╣рд╛рдВ рд╕реЗрдХреНрд╢рди рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
- sh_offset - рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдиреБрднрд╛рдЧ рдСрдлрд╝рд╕реЗрдЯ - рд╕реНрдкрд░реНрд╢ рди рдХрд░реЗрдВ, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдЧреА
- sh_size - рдЕрдиреБрднрд╛рдЧ рдЖрдХрд╛рд░ - рд╕реНрдкрд░реНрд╢ рди рдХрд░реЗрдВ
- sh_link - рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреБрднрд╛рдЧ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕рдорд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИ; рдЕрдиреБрднрд╛рдЧ рдХреЛ рдЗрд╕рдХреА рд╕рдВрдмрдВрдзрд┐рдд рдкрдВрдХреНрддрд┐ рддрд╛рд▓рд┐рдХрд╛ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ) рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ
- sh_info - рдЕрдиреБрднрд╛рдЧ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА, 0 рдкрд░ рд╕реЗрдЯ
- sh_addralign - рдкрддрд╛ рд╕рдВрд░реЗрдЦрдг, рд╕реНрдкрд░реНрд╢ рди рдХрд░реЗрдВ
- sh_entsize - рдпрджрд┐ рдПрдХ рдЦрдВрдб рдореЗрдВ рдПрдХ рд╣реА рд▓рдВрдмрд╛рдИ рдХреЗ рдХрдИ рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдРрд╕реЗ рддрддреНрд╡ рдХреА рд▓рдВрдмрд╛рдИ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ, рд╕реНрдкрд░реНрд╢ рди рдХрд░реЗрдВ
рд╣реЗрдбрд░ рдореЗрдВ рднрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ elf_newdata рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрднрд╛рдЧ рдбреЗрдЯрд╛ рд╡рд┐рд╡рд░рдгрдХ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛:
Elf_Data * elf_newdata( Elf_Scn *scn);
- scn - рдмрд╕ рдПрдХ рдирдП рдЕрдиреБрднрд╛рдЧ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред
рдлрд╝рдВрдХреНрд╢рди рддреНрд░реБрдЯрд┐ рдкрд░ 0 рдпрд╛ Elf_Data рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рднрд░рдирд╛ рд╣реЛрдЧрд╛:
typedef struct { void* d_buf; Elf_Type d_type; size_t d_size; off_t d_off; size_t d_align; unsigned d_version; } Elf_Data;
- d_buf - рдЕрдиреБрднрд╛рдЧ рдХреЛ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХрд╛ рд╕реВрдЪрдХ
- d_type - data type, ELF_T_BYTE рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╣рд░ рдЬрдЧрд╣ рдЙрдкрдпреБрдХреНрдд рд╣реИ
- d_size - рдбреЗрдЯрд╛ рдХрд╛ рдЖрдХрд╛рд░
- d_off - рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдСрдлрд╕реЗрдЯ, 0 рдкрд░ рд╕реЗрдЯ
- d_align - рд╕рдВрд░реЗрдЦрдг, рдмрд┐рдирд╛ рд╕рдВрд░реЗрдЦрдг рдХреЗ 1 рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- d_version - рд╕рдВрд╕реНрдХрд░рдг, EV_CURRENT рдкрд░ рд╕реЗрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рд╡рд┐рд╢реЗрд╖ рдЦрдВрдб
рд╣рдорд╛рд░реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдиреНрдпреВрдирддрдо рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
- .text - рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рд╡рд╛рд▓рд╛ рд╕реЗрдХреНрд╢рди
- .symtab - рдлрд╝рд╛рдЗрд▓ рд╡рд░реНрдг рддрд╛рд▓рд┐рдХрд╛
- .strtab .symtab рдЕрдиреБрднрд╛рдЧ рд╕реЗ рд╡рд░реНрдгреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рд╡рд╛рд▓реА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рд╕реНрд╡рдпрдВ рдХреЗ рдирд╛рдо рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ
- .shstrtab - рдкрдВрдХреНрддрд┐ рддрд╛рд▓рд┐рдХрд╛ рдЬрд┐рд╕рдореЗрдВ рдЕрдиреБрднрд╛рдЧ рдирд╛рдо рд╣реИрдВ
рд╕рднреА рдЕрдиреБрднрд╛рдЧ рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЕрдиреБрд╕рд╛рд░ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢реЗрд╖ рдЦрдВрдб рдХреА рдЕрдкрдиреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред
рдЕрдиреБрднрд╛рдЧ
рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ SHT_PROGBITS, sh_flags рдХреЛ SHF_EXECINSTR + SHF_ALLOC, sh_addr рдХреЛ рдЙрд╕ рдкрддреЗ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдХреЛрдб рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
рдзрд╛рд░рд╛ .symtab
рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рднреА рдкреНрд░рддреАрдХреЛрдВ (рдХрд╛рд░реНрдпреЛрдВ) рдФрд░ рдЙрди рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рдирдореЗрдВ рдЙрдирдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдореЗрдВ рд▓рдВрдмрд╛рдИ рдореЗрдВ 16 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдРрд╕реЗ рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ:
typedef struct { Elf32_Word st_name; Elf32_Addr st_value; Elf32_Word st_size; unsigned char st_info; unsigned char st_other; Elf32_Half st_shndx; } Elf32_Sym;
рд╕реНрд░реЛрдд рдЯреЗрдХреНрд╕реНрдЯ рд╕реЗ рдХрд┐рд╕реА рд╕рд░рдгреА рдореЗрдВ рдЧреБрдЬрд░рддреЗ рд╕рдордп рдХрд┐рд╕реА рдЕрдиреБрднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рд╕реВрдЪрдХ рддрдм рдЕрдиреБрднрд╛рдЧ рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ (d_buf) рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдЦрдВрдб рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреЗрд╡рд▓ sh_type рдХреЛ SHT_SYMTAB рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ .strtab рдЦрдВрдб рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ sh_link рдлрд╝реАрд▓реНрдб рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпреЗ рдЦрдВрдб рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред
рдзрд╛рд░рд╛ .strtab
рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ .symtab рдЕрдиреБрднрд╛рдЧ рд╕реЗ рд╕рднреА рд╡рд░реНрдгреЛрдВ рдХреЗ рдирд╛рдо рд╣реИрдВред рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрдиреБрднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди sh_type рдХреЛ SHT_STRTAB, sh_flags рд╕реЗ SHF_STRINGS рддрдХ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЦрдВрдб рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдмрди рдЬрд╛рддрд╛ рд╣реИред
рд╕реНрд░реЛрдд рдЯреЗрдХреНрд╕реНрдЯ рд╕реЗ рдХрд┐рд╕реА рд╕рд░рдгреА рдореЗрдВ рдЧреБрдЬрд░рддреЗ рд╕рдордп рдХрд┐рд╕реА рдЕрдиреБрднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рд╕реВрдЪрдХ рддрдм рдЕрдиреБрднрд╛рдЧ рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ (d_buf) рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдзрд╛рд░рд╛ .shstrtab
рдЕрдиреБрднрд╛рдЧ - рд▓рд╛рдЗрдиреЛрдВ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛, рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╢реАрд░реНрд╖рдХреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрд╡рдпрдВ рдХрд╛ рд╢реАрд░реНрд╖рдХ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ .strtab рд╕реЗрдХреНрд╢рди рдХреА рддрд░рд╣ рд╣реА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЗрд╕реЗ рдлрд╝рд╛рдЗрд▓ рд╣реЗрдбрд░ рдХреЗ e_shstrndx рдлреАрд▓реНрдб рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
рд░реЛ рдЯреЗрдмрд▓
рдкрдВрдХреНрддрд┐ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдПрдХ рд╢реВрдиреНрдп рдмрд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд▓рдЧрд╛рддрд╛рд░ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ, рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрд╣рд▓реА рдмрд╛рдЗрдЯ рднреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрдВрдХреНрддрд┐ рд╕реВрдЪрдХрд╛рдВрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдХреЗрд╡рд▓ рдСрдлрд╕реЗрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреЗ 'рдирд╛рдо' рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ 1, рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ 'рд╣реИ' var 'рдореЗрдВ 6 рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИред
рд╕реВрдЪрдХрд╛рдВрдХ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
\ 0 рдирд╛рдо \ 0 var \ 0
рдлрд╝рд╛рдЗрд▓ рд░рд┐рдХреЙрд░реНрдб
рдЗрд╕рд▓рд┐рдП, рд╣реЗрдбрд░ рдФрд░ рд╕реЗрдХреНрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдиреЗ рд╣реБрдП рд╣реИрдВ, рдЕрдм рдЙрдиреНрд╣реЗрдВ рдПрдХ рдлрд╛рдЗрд▓ рдкрд░ рд▓рд┐рдЦрдиреЗ рдФрд░ рдПрдХреНрдЬрд┐рдЯ рд▓реАрдл рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд░рд┐рдХреЙрд░реНрдб elf_update рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд рд╣реИ:
off_t elf_update( Elf *elf, Elf_Cmd cmd);
- рдпреЛрдЧрд┐рдиреА - рд╕рдВрднрд╛рд▓
- cmd - рдХрдорд╛рдВрдб, рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП ELF_C_WRITE рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдлрд╝рдВрдХреНрд╢рди рддреНрд░реБрдЯрд┐ рдкрд░ -1 рд▓реМрдЯрддрд╛ рд╣реИред рддреНрд░реБрдЯрд┐ рдкрд╛рда рдХреЛ elf_errmsg (-1) рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рддреНрд░реБрдЯрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рд▓реМрдЯрд╛рдПрдЧрд╛ред
рд╣рдо elf_end рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рд╡рд┐рд╡рд░рдгрдХ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдЦреЛрд▓реА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдорд╛рд░реА рдмрдирд╛рдИ рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗред
DWARF рдмрдирд╛рдирд╛
рд╣рдо
libdwarf рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА
рдмрдирд╛рдПрдВрдЧреЗ , рдЬреЛ рдХрд┐ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ (libdwarf2p.1.pdf - рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЗрдВрдЯрд░рдлреЗрд╕ рдЯреВ DWARF) рдХреЗ рд╕рд╛рде рдПрдХ рдкреАрдбреАрдПрдл рдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред
рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдмрдирд╛рдирд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░рдгреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ:
- рдХрд╛рдордЪрд▓рд╛рдК рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛ рдкреНрд░рд╛рд░рдВрдн
- рдиреЛрдбреНрд╕ рдмрдирд╛рдирд╛ (рдбреАрдЖрдИрдИ - рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕реВрдЪрдирд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐)
- рдиреЛрдб рдПрдЯреНрд░реАрдмреНрдпреВрдЯ рдмрдирд╛рдирд╛
- рдПрдХ рд╕рдВрдХрд▓рди рдЗрдХрд╛рдИ рдмрдирд╛рдирд╛
- рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реВрдЪрдирд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрдирд╛рдирд╛
- рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдирд╛
- рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ (рдХрд╛рд░реНрдпреЛрдВ) рдХрд╛ рдирд┐рд░реНрдорд╛рдг
- рдЪрд░ рдФрд░ рд╕реНрдерд┐рд░рд╛рдВрдХ рдмрдирд╛рдирд╛
- рдбрд┐рдмрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╛рдЧ рдмрдирд╛рдирд╛
- рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдЦрддреНрдо рдХрд░рдирд╛
рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдХрд╛рдордЪрд▓рд╛рдК рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛ рдкреНрд░рд╛рд░рдВрдн
рд╣рдо рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╕реГрдЬрд┐рдд рдХрд░реЗрдВрдЧреЗред рдЗрдирд╕рд┐рдордЯреИрдм рд╕реЗрдХреНрд╢рди рдореЗрдВ рдкрд╛рддреНрд░реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдПрд▓рдИрдПрдл рд╣реЗрдбрд░ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реЗрдбрд░ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╕реЗрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рдПред
рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо dwarf_producer_init_c рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд▓рд╛рдЗрдмреНрд░реЗрд░реА (dwarf_producer_init, dwarf_producer_init_b) рдореЗрдВ рдХрдИ рдФрд░ рдЖрд░рдВрднреАрдХрд░рдг рдХрд╛рд░реНрдп рд╣реИрдВ, рдЬреЛ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХреБрдЫ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдореЗрдВ рднрд┐рдиреНрди рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдк рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
Dwarf_P_Debug dwarf_producer_init_c( Dwarf_Unsigned flags, Dwarf_Callback_Func_c func, Dwarf_Handler errhand, Dwarf_Ptr errarg, void * user_data, Dwarf_Error *error)
- рдЭрдВрдбреЗ - "рдпрд╛" рдХрдИ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рд╕рдВрдпреЛрдЬрди рдЬреЛ рдХреБрдЫ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд┐рдЯ рдбреЗрдкреНрде, рдмрд╛рдЗрдЯ рдСрд░реНрдбрд░ (рд▓рд┐рдЯрд┐рд▓-рдПрдВрдбрд┐рдпрди, рдмрд┐рдЧ-рдПрдВрдбрд┐рдпрди), рд░рд┐рд▓реЛрдХреЗрд╢рди рдкреНрд░рд╛рд░реВрдк, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ DW_DLC_WRITE рдФрд░ DWDDLC_SYMBOLIC_RELOCATIONS рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
- func - рдПрдХ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдЬрд┐рд╕реЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде ELF рдЕрдиреБрднрд╛рдЧ рдмрдирд╛рддреЗ рд╕рдордп рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ "рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╛рдЧ рдмрдирд╛рдирд╛" рдЕрдиреБрднрд╛рдЧ рджреЗрдЦреЗрдВред
- рдЗрд░реИрдВрдбрд╣реИрдВрдб - рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдЬреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╣реЛрдиреЗ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред 0 рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
- рдЗрд░рд░рдЧ - рд╡рд╣ рдбреЗрдЯрд╛ рдЬреЛ рдЗрд░реИрдВрдбрд╣реИрдВрдб рдлрдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рд╣реЛрдЧрд╛, рдЙрд╕реЗ 0 рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- user_data - рдлрдВрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдбреЗрдЯрд╛ 0 рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- рдПрд░рд░ - рд░рд┐рдЯрд░реНрди рдПрд░рд░ рдХреЛрдб
рдлрд╝рдВрдХреНрд╢рди Dwarf_P_Debug рджреЗрддрд╛ рд╣реИ - рдмрд╛рдж рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░, рдпрд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ -1, рдФрд░ рддреНрд░реБрдЯрд┐ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛрдб рд╣реЛрдЧрд╛ (рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рдкрд╛рд╕ рдХрд░рдХреЗ dff_errmsg рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХрд╛ рдкрд╛рда рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)
рдиреЛрдбреНрд╕ рдмрдирд╛рдирд╛ (рдбреАрдЖрдИрдИ - рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕реВрдЪрдирд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐)
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдПрдХ рдкреЗрдбрд╝ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддреА рд╣реИред рдЗрд╕ рдкреЗрдбрд╝ рдХрд╛ рдПрдХ рдиреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП:
- рдЗрд╕реЗ dwarf_new_die рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдмрдирд╛рдПрдВ
- рдЗрд╕рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЬреЛрдбрд╝реЗрдВ (рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдЗрд╕рдХреЗ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)
рдиреЛрдб dwarf_new_die рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
Dwarf_P_Die dwarf_new_die( Dwarf_P_Debug dbg, Dwarf_Tag new_tag, Dwarf_P_Die parent, Dwarf_P_Die child, Dwarf_P_Die left_sibling, Dwarf_P_Die right_sibling, Dwarf_Error *error)
- dbg - Dwarf_P_Debug рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╛рдкреНрдд рд╡рд┐рд╡рд░рдг
- рдиреЛрдб рдХрд╛ new_tag - рдЯреИрдЧ (рдкреНрд░рдХрд╛рд░) - рдирд┐рд░рдВрддрд░ DW_TAG_xxxx, рдЬреЛ рдлрд╝рд╛рдЗрд▓ libdwarv.h рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- рдорд╛рддрд╛-рдкрд┐рддрд╛, рдмрдЪреНрдЪреЗ, рдмрд╛рдПрдБ_рдмрд╕рд┐рдВрдЧ, рджрд╛рдПрдБ_рдмрд╕ - рдХреНрд░рдорд╢рдГ, рдорд╛рддрд╛-рдкрд┐рддрд╛, рдмрдЪреНрдЪреЗ, рдиреЛрдб рдХреЗ рдмрд╛рдПрдБ рдФрд░ рджрд╛рдПрдБ рдкрдбрд╝реЛрд╕реАред рдЗрди рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдмрд╛рдХреА рд╕реЗрдЯ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред 0. рдпрджрд┐ рд╕рднреА рдкреИрд░рд╛рдореАрдЯрд░ 0 рд╣реИрдВ, рддреЛ рдиреЛрдб рдпрд╛ рддреЛ рдЬрдбрд╝ рдпрд╛ рдЕрд▓рдЧ рд╣реЛрдЧрд╛
- рддреНрд░реБрдЯрд┐ - рдЗрд╕рдореЗрдВ рд╣реЛрдиреЗ рдкрд░ рддреНрд░реБрдЯрд┐ рдХреЛрдб рд╣реЛрдЧрд╛
рдлрд╝рдВрдХреНрд╢рди рддреНрд░реБрдЯрд┐ рдкрд░ DW_DLV_BADADDR, рдпрд╛ Dwarf_P_Die рдиреЛрдб рдХреЛ рд╣реИрдВрдбрд▓ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рд╕рдлрд▓ рд╣реЛ
рдиреЛрдб рдПрдЯреНрд░реАрдмреНрдпреВрдЯ рдмрдирд╛рдирд╛
рдиреЛрдб рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдмреМрдиреЗ_рджрд╛рдб_AT_xxxx рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдкрд░рд┐рд╡рд╛рд░ рд╣реИред рдХрднреА-рдХрднреА рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрд┐рд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрдирд╛рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдХрдИ рдмрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рднреА рджреЗрд░реА рдХреАред рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреБрдЫ рдиреАрдЪреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреБрднрд╛рдЧреЛрдВ рдореЗрдВред рд╡реЗ рд╕рднреА рдорд╛рд▓рд┐рдХ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ, рдиреЛрдб рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рддреНрд░реБрдЯрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛрдб рд▓реМрдЯрд╛рдПрдЧрд╛ред
Dwarf_add_AT_name рдлрд╝рдВрдХреНрд╢рди рдиреЛрдб рдореЗрдВ рдирд╛рдо рд╡рд┐рд╢реЗрд╖рддрд╛ (DW_AT_name) рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдиреЛрдбреНрд╕ рдореЗрдВ рдПрдХ рдирд╛рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ, рдЪрд░, рд╕реНрдерд┐рд░рд╛рдВрдХ), рдХреБрдЫ рдореЗрдВ рдирд╛рдо рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдХрд▓рди рдЗрдХрд╛рдИ)
Dwarf_P_Attribute dwarf_add_AT_name( Dwarf_P_Die ownerdie, char *name, Dwarf_Error *error)
- рдирд╛рдо - рдЧреБрдг рдорд╛рди рд╣реА (рдиреЛрдб рдирд╛рдо)
рд╕рдлрд▓рддрд╛ рдкрд░ рддреНрд░реБрдЯрд┐ рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рд╡рд░рдгрдХ рдкрд░ DW_DLV_BADADDR рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдХрд╛рд░реНрдп dwarf_add_AT_signed_const, dwarf_add_AT_unsigned_const рдиреЛрдб рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдФрд░ рдЙрд╕рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд (рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд) рдорд╛рди рдЬреЛрдбрд╝реЗрдВред рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдФрд░ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рд░рдВрддрд░ рдорд╛рди, рдЖрдХрд╛рд░, рд░реЗрдЦрд╛ рд╕рдВрдЦреНрдпрд╛ рдЖрджрд┐ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдорд╛рд░реЛрд╣ рдкреНрд░рд╛рд░реВрдк:
Dwarf_P_Attribute dwarf_add_AT_(un)signed_const( Dwarf_P_Debug dbg, Dwarf_P_Die ownerdie, Dwarf_Half attr, Dwarf_Signed value, Dwarf_Error *error)
- dbg - Dwarf_P_Debug рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╛рдкреНрдд рд╡рд┐рд╡рд░рдг
- attr - рд╡рд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬрд┐рд╕рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдирд┐рд░рдВрддрд░ DW_AT_xxxx рд╣реИ, рдЬрд┐рд╕реЗ рдлрд╝рд╛рдЗрд▓ libdf.h рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- рдореВрд▓реНрдп - рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рди
рд╕рдлрд▓рддрд╛ рдкрд░ рддреНрд░реБрдЯрд┐ рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рд╡рд░рдгрдХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ DW_DLV_BADADDR рд▓реМрдЯрд╛рдПрдВред
рдПрдХ рд╕рдВрдХрд▓рди рдЗрдХрд╛рдИ рдмрдирд╛рдирд╛
рдХрд┐рд╕реА рднреА рдкреЗрдбрд╝ рдореЗрдВ рдПрдХ рдЬрдбрд╝ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдВрдХрд▓рди рдЗрдХрд╛рдИ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо, рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛, рд╕рдВрдХрд▓рдХ рдХрд╛ рдирд╛рдо, рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрд╡реЗрджрдирд╢реАрд▓рддрд╛ (рдЪрд░, рдХрд╛рд░реНрдп) рдорд╛рдорд▓реЗ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрддрд╛ рдФрд░ред рдЖрджрд┐)ред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рдФрд░ рд╕рдВрдХрд▓рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдмрдирд╛рдПрдБред
рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рдЬрд╛рдирдХрд╛рд░реА
рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "рдирд╛рдо" рд╡рд┐рд╢реЗрд╖рддрд╛ (DW_AT_name) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, dwarf_add_AT_name рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ "рдиреЛрдб рдПрдЯреНрд░реАрдмреНрдпреВрдЯреНрд╕" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕рдВрдХрд▓рдХ рдЬрд╛рдирдХрд╛рд░реА
рд╣рдо dwarf_add_AT_producer рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
Dwarf_P_Attribute dwarf_add_AT_name( Dwarf_P_Die ownerdie, char *producer_string, Dwarf_Error *error)
- рдирд┐рд░реНрдорд╛рддрд╛_рд╕реНрдЯреНрд░рд┐рдВрдЧ - рд╕реВрдЪрдирд╛ рдкрд╛рда рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ
рд╕рдлрд▓рддрд╛ рдкрд░ рддреНрд░реБрдЯрд┐ рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рд╡рд░рдгрдХ рдкрд░ DW_DLV_BADADDR рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реВрдЪрдирд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрдирд╛рдирд╛
рдЖрдорддреМрд░ рдкрд░, рдЬрдм рдПрдХ рдлрд╝рдВрдХреНрд╢рди (рд╕рдмрд░реВрдЯреАрди) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рд░рд┐рдЯрд░реНрди рдПрдбреНрд░реЗрд╕ рдХреЛ рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИ), рдпрд╣ рд╕рдм рдХреЙрд▓ рдлрд╝реНрд░реЗрдо рдХрд╣рд▓рд╛рддрд╛ рд╣реИред рдбрд┐рдмрдЧрд░ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд░рд┐рдЯрд░реНрди рдПрдбреНрд░реЗрд╕ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдмреИрдХрдЯреНрд░реЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реНрд░реЗрдо рдкреНрд░рд╛рд░реВрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЬреЛ рд╣рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рддреА рд╣реИред рд╕реНрдЯреИрдХ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░реЛрд╕реЗрд╕рд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рднреА рдЖрдорддреМрд░ рдкрд░ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╣ рдХреЛрдб рдЬреЛ рд╕реНрдЯреИрдХ рдкрд░ рд╕реНрдерд╛рди рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡рдХ рдХрд╣рд▓рд╛рддрд╛ рд╣реИ, рд╡рд╣ рдХреЛрдб рдЬреЛ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдЯреИрдХ рдХреЛ рдЙрдкрд╕рдВрд╣рд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдХрд▓рдХ рдкрд░ рдЕрддреНрдпрдзрд┐рдХ рдирд┐рд░реНрднрд░ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рдФрд░ рдЙрдкрд╕рдВрд╣рд╛рд░ рдХреЛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЖрд░рдВрдн рдФрд░ рдЕрдВрдд рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП; рдХрднреА-рдХрднреА рдПрдХ рдлреНрд░реЗрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрднреА-рдХрднреА рдирд╣реАрдВ; рдкреНрд░реЛрд╕реЗрд╕рд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдЕрдиреНрдп рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдЖрджрд┐ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдбрд┐рдмрдЧрд░ рдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдкрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЕрдкрдирд╛ рдореВрд▓реНрдп рдХреИрд╕реЗ рдмрджрд▓рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрд╣рд╛рдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдХреЙрд▓ рдлрд╝реНрд░реЗрдо рд╕реВрдЪрдирд╛ - рдлрд╝реНрд░реЗрдо рдкреНрд░рд╛рд░реВрдк рдЬрд╛рдирдХрд╛рд░реА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрддреЗ рдХреЗ рд▓рд┐рдП (рдХреЛрдб рдпреБрдХреНрдд) рдореЗрдореЛрд░реА рдореЗрдВ рдлрд╝реНрд░реЗрдо рдХрд╛ рдкрддрд╛ (рдХреИрдиреЛрдирд┐рдХрд▓ рдлрд╝реНрд░реЗрдо рдПрдбреНрд░реЗрд╕ - рд╕реАрдПрдлрдП) рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЗрдВрдЧрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- рд░рдЬрд┐рд╕реНрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рд╣реИ
- рд░рдЬрд┐рд╕реНрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ
- рд░рдЬрд┐рд╕реНрдЯрд░ рд╕реАрдПрдлрдП + рдПрди рдореЗрдВ рд╕реНрдЯреИрдХ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рджреВрд╕рд░реЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рдХреБрдЫ рдкрддреЗ рдкрд░ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдЧрдгрдирд╛ рдПрдХ рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХреЗ рд╕реЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ
- рдЖрджрд┐
рдЪреВрдВрдХрд┐ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдХреЛрдб рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрддреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдмрд╣реБрдд рд╣реА рдЪрдордХрджрд╛рд░ рд╣реИ рдФрд░ рдЗрд╕реЗ .debug_frame рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдПрдХ рд╕рдВрдкреАрдбрд╝рд┐рдд рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣ рдкрддреЗ рд╕реЗ рдкрддреЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдмрджрд▓рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдирд┐рд░реНрджреЗрд╢ DW_CFA_xxxx рдХреЗ рд░реВрдк рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд┐рдП рдЧрдП рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрджреЗрд╢ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
- DW_CFA_set_loc - рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдкрддреЗ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ
- DW_CFA_advance_loc - рдПрдХ рд╕реВрдЪрдХ рдХреЛ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ
- DW_CFA_def_cfa - рд╕реНрдЯреИрдХ рдлрд╝реНрд░реЗрдо (рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕реНрдерд┐рд░) рдХреЗ рдкрддреЗ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ
- DW_CFA_def_cfa_register - рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо (рдкреНрд░реЛрд╕реЗрд╕рд░ рд░рдЬрд┐рд╕реНрдЯрд░ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛) рдХреЗ рдкрддреЗ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ
- DW_CFA_def_cfa_expression - рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдХреЗ рдкрддреЗ рдХреА рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ
- DW_CFA_same_value - рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рдмрджрд▓рд╛ рдЧрдпрд╛ рд╣реИ
- DW_CFA_register - рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ
- рдЖрджрд┐
.Debug_frame рдЕрдиреБрднрд╛рдЧ рдХреЗ рддрддреНрд╡ рдРрд╕реЗ рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВ рдЬреЛ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рд╕рд╛рдорд╛рдиреНрдп рд╕реВрдЪрдирд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ (CIE) рдФрд░ рдлрд╝реНрд░реЗрдо рд╡рд┐рд╡рд░рдг рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ (FDE)ред CIE рдореЗрдВ рдРрд╕реА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдЬреЛ рдХрдИ FDE рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдпрд╣ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИред FDE рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рднреА рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╕рдордп, рдбреАрдмрдЧрд░ рдкрд╣рд▓реЗ CIE рд╕реЗ рдирд┐рд░реНрджреЗрд╢ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ FDE рд╕реЗредрдореЗрд░рд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реАрдПрдлрдП рд╕реНрдк (рдЖрд░ 13) рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ CIE рдмрдирд╛рдПрдБред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ dwarf_add_frame_cie рдлрд╝рдВрдХреНрд╢рди рд╣реИ: Dwarf_Unsigned dwarf_add_frame_cie( Dwarf_P_Debug dbg, char *augmenter, Dwarf_Small code_align, Dwarf_Small data_align, Dwarf_Small ret_addr_reg, Dwarf_Ptr init_bytes, Dwarf_Unsigned init_bytes_len, Dwarf_Error *error);
- рд╕рдВрд╡рд░реНрдзрдХ рдПрдХ UTF-8 рдПрдиреНрдХреЛрдбреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ CIE рдпрд╛ FDE рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рд╣рдордиреЗ рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓рдЧрд╛рдИ
- code_align - рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдХреЛрдб рдХрд╛ рд╕рдВрд░реЗрдЦрдг (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 2 рд╣реИ)
- data_align тАФ ( -4, 4 )
- ret_addr_reg тАФ , ( 14)
- init_bytes тАФ , DW_CFA_. , . elf-, , . 3 : 0x0C, 0x0D, 0, DW_CFA_def_cfa: r13 ofs 0 (CFA r13, 0)
- init_bytes_len тАФ init_bytes
DW_DLV_NOCOUNT CIE, FDE , ┬л FDE ┬╗
, , , . , ( int, double .), .
тАФ DW_TAG_base_type. :
- ┬л┬╗ (DW_AT_name)
- ┬л┬╗ (DW_AT_encoding) тАФ , (, DW_ATE_boolean тАФ , DW_ATE_float тАФ , DW_ATE_signed тАФ , DW_ATE_unsigned тАФ .)
- ┬л┬╗ (DW_AT_byte_size тАФ DW_AT_bit_size тАФ )
.
, 32- ┬лint┬╗, DW_TAG_base_type DW_AT_name тАФ ┬лint┬╗, DW_AT_encoding тАФ DW_ATE_signed, DW_AT_byte_size тАФ 4.
. DW_AT_type тАФ . int тАФ DW_TAG_pointer_type DW_AT_type ┬лint┬╗.
dwarf_add_AT_reference:
Dwarf_P_Attribute dwarf_add_AT_reference( Dwarf_P_Debug dbg, Dwarf_P_Die ownerdie, Dwarf_Half attr, Dwarf_P_Die otherdie, Dwarf_Error *error)
- attr тАФ , DW_AT_type
- otherdie тАФ ,
рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рд▓рд╛рдЗрди рдирдВрдмрд░ рдХреА рдЬрд╛рдирдХрд╛рд░реАред рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдорд╢реАрди рдирд┐рд░реНрджреЗрд╢ рдХреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдореИрдк рдХрд░рдиреЗ рдФрд░ рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд╛рдЗрди-рдмрд╛рдп-рд▓рд╛рдЗрди рдбреАрдмрдЧрд┐рдВрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА .debug_line рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдерд╛рди рд╣реИ, рддреЛ рдпрд╣ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдРрд╕реЗ рдХреЙрд▓рдо рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдВрдХреНрддрд┐:- рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдирд╛рдо
- рдЗрд╕ рдлрд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЗрди рдирдВрдмрд░
- рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЙрд▓рдо рдирдВрдмрд░
- рдХреНрдпрд╛ рдирд┐рд░реНрджреЗрд╢ рдПрдХ рдСрдкрд░реЗрдЯрд░ рдпрд╛ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдмреНрд▓реЙрдХ рдХреА рд╢реБрд░реБрдЖрдд рд╣реИ
- рдЖрджрд┐
, . -, , -, , . , , ┬л┬╗ . , : DW_LNS_advance_pc тАФ , DW_LNS_set_file тАФ , , DW_LNS_const_add_pc тАФ ..
, libdwarf , .
рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдорд╣рдВрдЧрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдирд╛рдо рдХреЗ рдмрдЬрд╛рдп, рдЗрд╕рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ dwarf_add_file_decl рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛: Dwarf_Unsigned dwarf_add_file_decl( Dwarf_P_Debug dbg, char *name, Dwarf_Unsigned dir_idx, Dwarf_Unsigned time_mod, Dwarf_Unsigned length, Dwarf_Error *error)
- рдирд╛рдо - рдлрд╝рд╛рдЗрд▓ рдирд╛рдо
- dir_idx - рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдЬрд╣рд╛рдВ рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд┐рдд рд╣реИред рд╕реВрдЪрдХрд╛рдВрдХ dwarf_add_directory_decl рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдкреВрд░реНрдг рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк 0 рдХреЛ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ dwarf_add_directory_decec рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ
- time_mod - рдлрд╝рд╛рдЗрд▓ рд╕рдВрд╢реЛрдзрди рд╕рдордп, рдЖрдк рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ (0)
- рд▓рдВрдмрд╛рдИ - рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░, рд╡реИрдХрд▓реНрдкрд┐рдХ (0)
рдлрд╝рдВрдХреНрд╢рди рдлрд╝рд╛рдЗрд▓ рдЗрдВрдбреЗрдХреНрд╕ рдпрд╛ DW_DLV_NOCOUNT рдХреЛ рддреНрд░реБрдЯрд┐ рдкрд░ рд▓реМрдЯрд╛рдПрдЧрд╛редрдкрдВрдХреНрддрд┐ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рддреАрди рдХрд╛рд░реНрдп рд╣реИрдВ dwarf_add_line_entry_b, dwarf_lne_set_address, dwarf_lne_end_fter_ence, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдиреАрдЪреЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗредрдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдмрдирд╛рдирд╛ рдХрдИ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ:- .symtab рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рддреАрдХ рдмрдирд╛рдирд╛
- рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдиреЛрдб рдмрдирд╛рдирд╛
- FDE рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдмрдирд╛рдирд╛
- рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг
- рд▓рд╛рдЗрди рдирдВрдмрд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдмрдирд╛рдирд╛
рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рддреАрдХ рдмрдирд╛рдирд╛
┬л .symtab┬╗. . , . , , .
dwarf_new_die (. ┬л ┬╗), DW_TAG_subprogram, тАФ Compilation Unit ( ) DIE ( ). :
- ( dwarf_add_AT_name, . ┬л ┬╗)
- , ( DW_AT_decl_line), dwarf_add_AT_unsigned_const (. ┬л ┬╗)
- ( DW_AT_decl_file), dwarf_add_AT_unsigned_const (. ┬л ┬╗)
- ( DW_AT_low_pc), dwarf_add_AT_targ_address, .
- ( DW_AT_high_pc), dwarf_add_AT_targ_address, .
- ( DW_AT_type тАФ , . ┬л ┬╗). тАФ
DW_AT_low_pc DW_AT_high_pc dwarf_add_AT_targ_address_b:
Dwarf_P_Attribute dwarf_add_AT_targ_address_b( Dwarf_P_Debug dbg, Dwarf_P_Die ownerdie, Dwarf_Half attr, Dwarf_Unsigned pc_value, Dwarf_Unsigned sym_index, Dwarf_Error *error)
- attr тАФ (DW_AT_low_pc DW_AT_high_pc)
- pc_value тАФ
- sym_index - .symtab рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рддреАрдХ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХред рд╡реИрдХрд▓реНрдкрд┐рдХ, 0 рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдлрд╝рдВрдХреНрд╢рди рддреНрд░реБрдЯрд┐ рдкрд░ DW_DLV_BADADDR рд▓реМрдЯрд╛рдПрдЧрд╛редFDE рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдмрдирд╛рдирд╛
рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ "рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрдирд╛рдирд╛", рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдлреНрд░реЗрдо рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдХрдИ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ:- рдПрдХ рдирдпрд╛ FDE рдмрдирд╛рдирд╛ (рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрдирд╛рдирд╛ рджреЗрдЦреЗрдВ)
- рд╕рд╛рдорд╛рдиреНрдп рд╕реВрдЪреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдПрдлрдбреАрдИ рдмрдирд╛рдпрд╛
- рдирд┐рд░реНрдорд┐рдд FDE рдореЗрдВ рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝рдирд╛
рдЖрдк dwarf_new_fde рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдпрд╛ FDE рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ: Dwarf_P_Fde dwarf_new_fde( Dwarf_P_Debug dbg, Dwarf_Error *error)
рдлрд╝рдВрдХреНрд╢рди рддреНрд░реБрдЯрд┐ рдкрд░ рдПрдХ рдирдпрд╛ FDE рд╡рд┐рд╡рд░рдгрдХ рдпрд╛ DW_DLV_BADADDR рд▓реМрдЯрд╛рдПрдЧрд╛редрдЖрдк dwarf_add_frame_fde рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдирдпрд╛ FDE рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: Dwarf_Unsigned dwarf_add_frame_fde( Dwarf_P_Debug dbg, Dwarf_P_Fde fde, Dwarf_P_Die die, Dwarf_Unsigned cie, Dwarf_Addr virt_addr, Dwarf_Unsigned code_len, Dwarf_Unsigned sym_idx, Dwarf_Error* error)
- рдлреАрдХрд╛ - рдмрд╕ рд╕рдВрднрд╛рд▓ рд▓рд┐рдпрд╛
- рдорд░реЛ - рдорд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ (рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдиреЛрдб рдмрдирд╛рдирд╛ рджреЗрдЦреЗрдВ)
- cie - CIE рд╡рд┐рд╡рд░рдгрдХ (рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реВрдЪрдирд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрдирд╛рдирд╛ рджреЗрдЦреЗрдВ)
- virt_addr - рд╣рдорд╛рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрддрд╛
- code_len - рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд▓рдВрдмрд╛рдИ
- sym_idx - рдкреНрд░рддреАрдХ рд╕реВрдЪрдХрд╛рдВрдХ (рд╡реИрдХрд▓реНрдкрд┐рдХ, рдЖрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ 0)
рдлрд╝рдВрдХреНрд╢рди рддреНрд░реБрдЯрд┐ рдкрд░ DW_DLV_NOCOUNT рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛редрдЗрд╕ рд╕рдм рдХреЗ рдмрд╛рдж, рдЖрдк рд╣рдорд╛рд░реЗ FDE рдореЗрдВ DW_CFA_xxxx рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ dwarf_add_fde_inst рдФрд░ dwarf_fde_cfa_offset рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рд╡рд╛рд▓рд╛ рд╕реВрдЪреА рдореЗрдВ рджрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ: Dwarf_P_Fde dwarf_add_fde_inst( Dwarf_P_Fde fde, Dwarf_Small op, Dwarf_Unsigned val1, Dwarf_Unsigned val2, Dwarf_Error *error)
- fde - FDE рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░
- рдСрдк - рдирд┐рд░реНрджреЗрд╢ рдХреЛрдб (DW_CFA_xxxx)
- val1, val2 - рдирд┐рд░реНрджреЗрд╢ рдкреИрд░рд╛рдореАрдЯрд░ (рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ, рдорд╛рдирдХ рджреЗрдЦреЗрдВ, рдЦрдВрдб 6.4.2 рдХреЙрд▓ рдлрд╝реНрд░реЗрдо рдирд┐рд░реНрджреЗрд╢)
Dwarf_fde_cfa_offset рдлрд╝рдВрдХреНрд╢рди DW_CFA_offset рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЬреЛрдбрд╝рддрд╛ рд╣реИ: Dwarf_P_Fde dwarf_fde_cfa_offset( Dwarf_P_Fde fde, Dwarf_Unsigned reg, Dwarf_Signed offset, Dwarf_Error *error)
- fde - FDE рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░
- reg - рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдЬреЛ рдлреНрд░реЗрдо рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ
- рдСрдлрд╝рд╕реЗрдЯ - рдлрд╝реНрд░реЗрдо рдореЗрдВ рдЗрд╕рдХреА рдСрдлрд╝рд╕реЗрдЯреНрд╕ (рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдлрд╝реНрд░реЗрдо рдПрд▓рд┐рдореЗрдВрдЯреНрд╕ рдореЗрдВ, рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реВрдЪрдирд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрдирд╛рдирд╛, data_alide) рджреЗрдЦреЗрдВ
, , lr (r14). DW_CFA_advance_loc , 1, pc 2 (. Common Information Entry, code_align), DW_CFA_def_cfa_offset 4 ( 4 ) dwarf_fde_cfa_offset reg=14 offset=1, r14 -4 CFA.
, . ┬л ┬╗
C
:
- dwarf_lne_set_address
- рдХреЛрдб рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ (рдпрд╛ рдорд╢реАрди рдирд┐рд░реНрджреЗрд╢) рдХреЗ рд▓рд┐рдП рд╣рдо рд╕реНрд░реЛрдд рдХреЛрдб (dwarf_add_line_entry) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдмрдирд╛рддреЗ рд╣реИрдВ
- рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ, dwarf_lne_end_fterence рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢ рдмреНрд▓реЙрдХ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВ
Dwarf_lne_set_address рдлрд╝рдВрдХреНрд╢рди рдЙрд╕ рдкрддреЗ рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдирд┐рд░реНрджреЗрд╢ рдмреНрд▓реЙрдХ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ: Dwarf_Unsigned dwarf_lne_set_address( Dwarf_P_Debug dbg, Dwarf_Addr offs, Dwarf_Unsigned symidx, Dwarf_Error *error)
- рдЙрддрд░ - рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкрддрд╛ (рдкрд╣рд▓реА рдорд╢реАрди рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдкрддрд╛)
- sym_idx - рдкреНрд░рддреАрдХ рд╕реВрдЪрдХрд╛рдВрдХ (рд╡реИрдХрд▓реНрдкрд┐рдХ, рдЖрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ 0)
рд░рд┐рдЯрд░реНрди 0 (рд╕рдлрд▓рддрд╛) рдпрд╛ DW_DLV_NOCOUNT (рддреНрд░реБрдЯрд┐)редDwarf_add_line_entry_b рдлрд╝рдВрдХреНрд╢рди рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ .debug_line рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдорд╢реАрди рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ: Dwarf_Unsigned dwarf_add_line_entry_b( Dwarf_P_Debug dbg, Dwarf_Unsigned file_index, Dwarf_Addr code_offset, Dwarf_Unsigned lineno, Dwarf_Signed column_number, Dwarf_Bool is_source_stmt_begin, Dwarf_Bool is_basic_block_begin, Dwarf_Bool is_epilogue_begin, Dwarf_Bool is_prologue_end, Dwarf_Unsigned isa, Dwarf_Unsigned discriminator, Dwarf_Error *error)
- file_index - dwarf_add_file_decl рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рдкреНрд░рд╛рдкреНрдд рд╕реНрд░реЛрдд рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ (рджреЗрдЦреЗрдВ "рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдирд╛")
- code_offset - рд╡рд░реНрддрдорд╛рди рдорд╢реАрди рдЕрдиреБрджреЗрд╢ рдХрд╛ рдкрддрд╛
- рд▓рд╛рдЗрдиреЛ - рд╕реЛрд░реНрд╕ рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЗрди рдирдВрдмрд░
- column_number тАФ
- is_source_stmt_begin тАФ 1 lineno ( 1)
- is_basic_block_begin тАФ 1 ( 0)
- is_epilogue_begin тАФ 1 ( , 0)
- is_prologue_end тАФ 1 (!)
- isa тАФ instruction set architecture ( ). DW_ISA_ARM_thumb ARM Cortex M3!
- discriminator. (, , ) . . , 0
рдлрд╝рдВрдХреНрд╢рди 0 (рд╕рдлрд▓рддрд╛) рдпрд╛ DW_DLV_NOCOUNT (рддреНрд░реБрдЯрд┐) рджреЗрддрд╛ рд╣реИредрдЕрдВрдд рдореЗрдВ, dwarf_lne_end_fterence рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ: Dwarf_Unsigned dwarf_lne_end_sequence( Dwarf_P_Debug dbg, Dwarf_Addr address; Dwarf_Error *error)
- рдкрддрд╛ - рд╡рд░реНрддрдорд╛рди рдорд╢реАрди рдЕрдиреБрджреЗрд╢ рдХрд╛ рдкрддрд╛
рд░рд┐рдЯрд░реНрди 0 (рд╕рдлрд▓рддрд╛) рдпрд╛ DW_DLV_NOCOUNT (рддреНрд░реБрдЯрд┐)редрдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИредрдЪрд░ рдФрд░ рд╕реНрдерд┐рд░рд╛рдВрдХ рдмрдирд╛рдирд╛
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЪрд░ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛрддреЗ рд╣реИрдВред рдЙрдирдХреЗ рдкрд╛рд╕ рдПрдХ рдирд╛рдо, рдореЗрдореЛрд░реА рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ (рдпрд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ рд░рдЬрд┐рд╕реНрдЯрд░) рд╣реИ, рдЬрд╣рд╛рдВ рдЙрдирдХрд╛ рдбреЗрдЯрд╛ рд╕реНрдерд┐рдд рд╣реИ, рд╕рд╛рде рд╣реА рдЗрд╕ рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рдХрд╛рд░ рднреА рд╣реИред рдпрджрд┐ рд╡реИрд░рд┐рдПрдмрд▓ рд╡реИрд╢реНрд╡рд┐рдХ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЕрднрд┐рднрд╛рд╡рдХ рд╕рдВрдХрд▓рди рдЗрдХрд╛рдИ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрджрд┐ рд╕реНрдерд╛рдиреАрдп - рд╕рдВрдмрдВрдзрд┐рдд рдиреЛрдб (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдЙрдирдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП)ред рдЖрдк рдпрд╣ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЪрд░ рдШреЛрд╖рдгрд╛ рдХрд┐рд╕ рдлрд╝рд╛рдЗрд▓, рд▓рд╛рдЗрди рдФрд░ рдХреЙрд▓рдо рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред, , . , тАФ (location expressions). тАФ ( DW_OP_) - , , . , :
- DW_OP_addr тАФ
- DW_OP_fbreg тАФ ( )
- DW_OP_reg0тАж DW_OP_reg31 тАФ ,
, (dwarf_new_expr), (dwarf_add_expr_addr, dwarf_add_expr_gen .) DW_AT_location (dwarf_add_AT_location_expression).
0 :
Dwarf_Expr dwarf_new_expr( Dwarf_P_Debug dbg, Dwarf_Error *error)
dwarf_add_expr_gen:
Dwarf_Unsigned dwarf_add_expr_gen( Dwarf_P_Expr expr, Dwarf_Small opcode, Dwarf_Unsigned val1, Dwarf_Unsigned val2, Dwarf_Error *error)
- expr тАФ ,
- opcode тАФ , DW_OP_
- val1, val2 тАФ (. )
рдлрд╝рдВрдХреНрд╢рди рддреНрд░реБрдЯрд┐ рдкрд░ DW_DLV_NOCOUNT рджреЗрддрд╛ рд╣реИредрдХрд┐рд╕реА рдЪрд░ рдХрд╛ рдкрддрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рдмрдЬрд╛рдп dwarf_add_expr_addr рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: Dwarf_Unsigned dwarf_add_expr_addr( Dwarf_P_Expr expr, Dwarf_Unsigned address, Dwarf_Signed sym_index, Dwarf_Error *error)
- expr - рдкрддрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЬрд┐рд╕рдореЗрдВ рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ
- рдкрддрд╛ - рдЪрд░ рдХрд╛ рдкрддрд╛
- sym_index - .symtab рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╡рд░реНрдг рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХред рд╡реИрдХрд▓реНрдкрд┐рдХ, 0 рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдлрд╝рдВрдХреНрд╢рди рддреНрд░реБрдЯрд┐ рдкрд░ DW_DLV_NOCOUNT рднреА рд▓реМрдЯрд╛рддрд╛ рд╣реИредрдЕрдВрдд рдореЗрдВ, рдЖрдк рдмреМрдиреЗ_add_AT_location_expr рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдиреЛрдб рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рдкрддрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ: Dwarf_P_Attribute dwarf_add_AT_location_expr( Dwarf_P_Debug dbg, Dwarf_P_Die ownerdie, Dwarf_Half attr, Dwarf_P_Expr loc_expr, Dwarf_Error *error)
- рдорд╛рд▓рд┐рдХ - рд╡рд╣ рдиреЛрдб рдЬрд┐рд╕рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИ
- Attr - рд╡рд┐рд╢реЗрд╖рддрд╛ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ DW_AT_location)
- loc_expr - рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рдкрддрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕рдВрднрд╛рд▓
DW_DLV_NOCOUNT .
( ) тАФ DW_TAG_variable, DW_TAG_formal_parameter DW_TAG_const_type . :
- / ( dwarf_add_AT_name, . ┬л ┬╗)
- , ( DW_AT_decl_line), dwarf_add_AT_unsigned_const (. ┬л ┬╗)
- ( DW_AT_decl_file), dwarf_add_AT_unsigned_const (. ┬л ┬╗)
- / ( DW_AT_type тАФ , . ┬л ┬╗)
- (. ) тАФ
- рдпрд╛ рдорд╛рди - рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд▓рд┐рдП (рд╡рд┐рд╢реЗрд╖рддрд╛ DW_AT_const_value, "рдмрдирд╛рдирд╛ рдиреЛрдб рдЧреБрдг" рджреЗрдЦреЗрдВ)
рдбрд┐рдмрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╛рдЧ рдмрдирд╛рдирд╛
рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕реВрдЪрдирд╛ рдЯреНрд░реА рдХреЗ рд╕рднреА рдиреЛрдбреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдпреЛрдЧрд┐рдиреА-рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЧрдарди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рджреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ:- рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ dwarf_transform_to_disk_form рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдЖрд╡рд╢реНрдпрдХ рдпреЛрдЧрд┐рдиреА рдЕрдиреБрднрд╛рдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдерд╛ред
- рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрднрд╛рдЧ рдХреЗ рд▓рд┐рдП, dwarf_get_section_bytes рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрдВ рд╡рд╣ рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреБрднрд╛рдЧ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛
рд╕рдорд╛рд░реЛрд╣ dwarf_transform_to_disk_form ( Dwarf_P_Debug dbg, Dwarf_Error* error)
рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣рдо рдмрд╛рдЗрдирд░реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдбрд┐рд╕реНрдХ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдпрд╣ рд╣рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкрд░ рдмрдирд╛рдП рдЧрдП рдпреЛрдЧрд┐рдиреА рдЦрдВрдб рдпрд╛ DW_DLV_NOCOUNT рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рдПрдЧрд╛ред рдЙрд╕реА рд╕рдордп, рдкреНрд░рддреНрдпреЗрдХ рдЦрдВрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ dwarf_producer_init_c рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддреЗ рд╕рдордп рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред рд╣рдореЗрдВ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдпрдВ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: typedef int (*Dwarf_Callback_Func_c)( char* name, int size, Dwarf_Unsigned type, Dwarf_Unsigned flags, Dwarf_Unsigned link, Dwarf_Unsigned info, Dwarf_Unsigned* sect_name_index, void * user_data, int* error)
- рдирд╛рдо - рдпреЛрдЧрд┐рдиреА рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдирд╛рдо рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ
- рдЖрдХрд╛рд░ - рдЕрдиреБрднрд╛рдЧ рдЖрдХрд╛рд░
- рдкреНрд░рдХрд╛рд░ - рдЕрдиреБрднрд╛рдЧ рдкреНрд░рдХрд╛рд░
- рдЭрдВрдбреЗ - рдЦрдВрдб рдЭрдВрдбреЗ
- рд▓рд┐рдВрдХ - рдЕрдиреБрднрд╛рдЧ рд╕рдВрдЪрд╛рд░ рдХреНрд╖реЗрддреНрд░
- рдЬрд╛рдирдХрд╛рд░реА - рдЕрдиреБрднрд╛рдЧ рд╕реВрдЪрдирд╛ рдХреНрд╖реЗрддреНрд░
- sect_name_index - рдЖрдкрдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг (рд╡реИрдХрд▓реНрдкрд┐рдХ) рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╛рдЧ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
- user_data - рд╣рдореЗрдВ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЬрдм рд╣рдордиреЗ рдЗрд╕реЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдлрдВрдХреНрд╢рди рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдерд╛
- рдПрд░рд░ - рдпрд╣рд╛рдВ рдЖрдк рдПрд░рд░ рдХреЛрдб рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЗрд╕ рдХрд╛рд░реНрдп рдореЗрдВ, рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП:- рдПрдХ рдирдпрд╛ рдЕрдиреБрднрд╛рдЧ рдмрдирд╛рдПрдВ (elf_newscn рдлрд╝рдВрдХреНрд╢рди, рдЕрдиреБрднрд╛рдЧ рдмрдирд╛рдирд╛ рджреЗрдЦреЗрдВ)
- рдПрдХ рдЕрдиреБрднрд╛рдЧ рд╣реЗрдбрд░ рдмрдирд╛рдПрдВ (elf32_getshdr рдлрд╝рдВрдХреНрд╢рди, ibidред)
- рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рднрд░реЗрдВ (рджреЗрдЦреЗрдВ ibidред) рдпрд╣ рд╕рд░рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреБрднрд╛рдЧ рдХреЗ рд╣реЗрдбрд░ рдлрд╝реАрд▓реНрдб рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред рдЕрдиреБрдкрд▓рдмреНрдз рдлрд╝реАрд▓реНрдбреНрд╕ sh_addr, sh_offset, sh_entsize 0 рдкрд░ рд╕реЗрдЯ, рдФрд░ sh_addralign 1 рдХреЗ рд▓рд┐рдП
- рдХреНрд░рд┐рдПрдЯ рдХрд┐рдП рдЧрдП рдЦрдВрдб (рдлрд╝рдВрдХреНрд╢рди elf_ndxscn рдХрд╛ рдЗрдВрдбреЗрдХреНрд╕, "рд╕реЗрдХреНрд╢рди .symtab") рдпрд╛ -1 рджреЗрдЦреЗрдВ рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реБрдИ (рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреЛ рддреНрд░реБрдЯрд┐ рдореЗрдВ рд╕реЗрдЯ рдХрд░рдХреЗ)
- рд╣рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд▓реМрдЯрддреЗ рд╕рдордп ".rel" рдЕрдиреБрднрд╛рдЧ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ) рдХреЛ 0 рдкрд░ рд╡рд╛рдкрд╕ рдЫреЛрдбрд╝ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП
рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, dwarf_transform_to_disk_form рдлрд╝рдВрдХреНрд╢рди рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ред рд╣рдореЗрдВ рдЗрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП рдкреНрд░рддреНрдпреЗрдХ рдЦрдВрдб рдХреЗ рд▓рд┐рдП 0 рд╕реЗ рдПрдХ рдЪрдХреНрд░ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рд╣реЛрдЧрд╛:- рдмреМрдиреЗ_get_section_bytes рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдмрдирд╛рдПрдВ:
Dwarf_Ptr dwarf_get_section_bytes( Dwarf_P_Debug dbg, Dwarf_Signed dwarf_section, Dwarf_Signed *elf_section_index, Dwarf_Unsigned *length, Dwarf_Error* error)
- dwarf_section - рдЕрдиреБрднрд╛рдЧ рд╕рдВрдЦреНрдпрд╛ред рд╕реАрдорд╛ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП 0..n, рдЬрд╣рд╛рдБ n рдХреЛ dwarf_transform_to_disk_form рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛
- elf_section_index - рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕ рдЕрдиреБрднрд╛рдЧ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
- рд▓рдВрдмрд╛рдИ - рдЗрд╕ рдбреЗрдЯрд╛ рдХреА рд▓рдВрдмрд╛рдИ
- рддреНрд░реБрдЯрд┐ - рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛
рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдпрд╛ 0 (рдорд╛рдорд▓реЗ рдореЗрдВ
рдЬрдм рдХреЛрдИ рдЕрдзрд┐рдХ рдЕрдиреБрднрд╛рдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ) рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ - рд╡рд░реНрддрдорд╛рди рдЕрдиреБрднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдЯрд╛ рд╡рд┐рд╡рд░рдгрдХ рдмрдирд╛рдПрдВ (elf_newdata рдлрд╝рдВрдХреНрд╢рди, рдЕрдиреБрднрд╛рдЧ рдмрдирд╛рдирд╛ рджреЗрдЦреЗрдВ) рдФрд░ рдЗрд╕реЗ рднрд░реЗрдВ (ibid рджреЗрдЦреЗрдВ) рд╕реЗрдЯрд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛:
- d_buf - рдкрд┐рдЫрд▓реЗ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рд╕реВрдЪрдХ
- d_size - рдЗрд╕ рдбреЗрдЯрд╛ рдХрд╛ рдЖрдХрд╛рд░ (ibid)
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдЦрддреНрдо рдХрд░рдирд╛
рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЗ рдмрди рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк libdwarf рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмреМрдирд╛_рдкреНрд░реЛрдбреНрдпреВрд╕рд░_рдлрд┐рдирд┐рд╢ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: Dwarf_Unsigned dwarf_producer_finish( Dwarf_P_Debug dbg, Dwarf_Error* error)
рдлрд╝рдВрдХреНрд╢рди рддреНрд░реБрдЯрд┐ рдкрд░ DW_DLV_NOCOUNT рджреЗрддрд╛ рд╣реИредрдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдбрд┐рд╕реНрдХ рдкрд░ рд▓реЗрдЦрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ "рдИрдПрд▓рдПрдл - рдлрд╛рдЗрд▓ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдмрдирд╛рдирд╛" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПредрдирд┐рд╖реНрдХрд░реНрд╖
рд╡рд╣ рд╕рдм рд╣реИред
рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ, рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдПрдХ рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рд╡рд┐рд╖рдп рд╣реИ, рдФрд░ рдореИрдВрдиреЗ рдХрдИ рд╡рд┐рд╖рдпреЛрдВ рдХреЛ рдирд╣реАрдВ рдЫреБрдЖ, рдХреЗрд╡рд▓ рдкрд░реНрджрд╛ рдЦреЛрд▓рд╛ред рдЬреЛ рд▓реЛрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реЗ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВредрдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдореИрдВ рдЙрдирдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛редрд╕рдВрджрд░реНрдн
ELF
рдмреМрдирд╛