рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдХреЗ рд▓рд┐рдП рдлрд░реНрдорд╡реЗрдпрд░ рд▓рд┐рдЦрдирд╛ рдмрдВрдж рдХрд░рдирд╛ рдФрд░ рд░рд╣рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛


рд╣реИрд▓реЛ, рдореЗрд░рд╛ рдирд╛рдо рдпреВрдЬреАрди рд╣реИ, рдФрд░ рдореИрдВ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд▓рд┐рдП рдлрд░реНрдорд╡реЗрдпрд░ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдердХ рдЧрдпрд╛ рд╣реВрдВред рдпрд╣ рдХреИрд╕реЗ рд╣реБрдЖ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдЖрдЗрдП рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВред


рдЬрдм рдЖрдк рдмрдбрд╝реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ C ++, рдЬрд╛рд╡рд╛, рдкрд╛рдпрдерди рдЖрджрд┐ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдРрд╕рд╛ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЫреЛрдЯреЗ рдФрд░ рдкреЙрдЯ-рдмреЗрд▓рд┐рдб рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рд╡рд╛рдкрд╕ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдЙрдирдХреЗ рдЕрд▓реНрдк рдФрдЬрд╛рд░реЛрдВ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдПред рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдФрд░ рд╕реНрд╡рд╛рдпрддреНрддрддрд╛ рдХреЗ рдХрд╛рд░реНрдп рдПрдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдЫреЛрдбрд╝рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдВрдЧрд▓реА рд╣реИрдВред


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


рдпрд╣ рднреА рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдЫреЛрдЯреЗ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд╛рджреНрдп рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рд╣реИрдВред рдХреЗрд╡рд▓ рдлрд░реНрдорд╡реЗрдпрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдмрдЧрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред


рдФрд░ рдирдП рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдкреНрд░рдпрд╛рд╕ рдФрд░ рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдПрдХ рддреНрд░реБрдЯрд┐ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╣рд░ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдФрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдРрд╕реЗ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, REPL рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬрд╝ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реЛрддреА рд╣реИ, рддрд╛рдХрд┐ рдЖрдк рдмрд╕ рдФрд░ рджрд░реНрдж рд░рд╣рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдпреЗ рдХрд░ рд╕рдХреЗрдВ, рдХрдо рд╕реЗ рдХрдо рддреБрдЪреНрдЫ рдмрд╛рддреЗрдВ,


\


рдЗрд╕ рдкрд░ рдХреИрд╕реЗ рдЖрдирд╛ рд╣реИ, рд▓реЗрдЦреЛрдВ рдХреА рдпрд╣ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕рдорд░реНрдкрд┐рдд рд╣реИред


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


рдкрд░рд┐рдпреЛрдЬрдирд╛ рдиреЗ рджреЛ рдорд╣реАрдиреЗ рдпрд╛ рддреЛ (рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ) рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреЗ рдЯреЛрд╕реНрдЯрдорд╛рд╕реНрдЯрд░ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ред


рдареАрдХ рд╣реИ, рдпрд╣рд╛рдБ рд╣рдо рд░реЛрдиреЗ рд╡рд╛рд▓реЗ рдирд╣реАрдВ рд╣реИрдВред рдПрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реА рдФрд░ рдЕрдВрддрд╣реАрди рдлрд░реНрдорд╡реЗрдпрд░ рдХреЗ wilds рдореЗрдВ рдбреБрдмрдХреА рд▓рдЧрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдЗрд╕ рдкрд╛рда рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдЪреАрдЬ рдХреЗ рд╕рд╛рде рдордирд╛ рдпрд╛ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдВрдд рдореЗрдВ, рдЖрд▓рд╕реНрдп рдФрд░ рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рдкреНрд░рдЧрддрд┐ рдХрд╛ рдЗрдВрдЬрди рд╣реИред


рдкрд┐рдЫрд▓реА рдмрд╛рд░, рдЬрдм рдореИрдВрдиреЗ рдУрдкрдирдУрд╕реАрдбреА рдХреЛ рд╕рдордЭрд╛ рдерд╛, рддреЛ рдореИрдВ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рдкрд░ рдЖрдпрд╛ рдерд╛


http://openocd.org/doc/html/General-Commands.html 15.4 Memory access commands mdw, mdh, mdb тАФ         mww, mwh, mwb тАФ        

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


рдпрд╣рд╛рдБ stm32f103C8T6 рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдорд┐рд╖ рдПрд▓рдИрдбреА рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ


 // Step 1: Enable the clock to PORT B RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; // Step 2: Change PB0's mode to 0x3 (output) and cfg to 0x0 (push-pull) GPIOC->CRH = GPIO_CRH_MODE13_0 | GPIO_CRH_MODE13_1; // Step 3: Set PB0 high GPIOC->BSRR = GPIO_BSRR_BS13; // Step 4: Reset PB0 low GPIOC->BSRR = GPIO_BSRR_BR13; 

рдФрд░ OpenOCD рдХрдорд╛рдВрдб рдХрд╛ рдПрдХ рд╕рдорд╛рди рдХреНрд░рдо


 mww 0x40021018 0x10 mww 0x40011004 0x300000 mww 0x40011010 0x2000 mww 0x40011010 0x20000000 

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


рдЯрд┐рдкреНрдкрдгреА

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмреЗрд╢рдХ рдЖрдк рдХреНрд░рд┐рдкреНрдЯ (=) рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ


рдХрдИ рдХреЛ рдЗрдВрдЯрд░рдкреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдпрд╛рдж рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рд╣рдореЗрд╢рд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдЙрдирдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЬреАрд╡рди рдмреЗрд╣рддрд░ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдУрдкрдирдУрд╕реАрдбреА рд╕реНрд░реЛрдд рдореЗрдВ рдЖрдк рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг рднреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред


рдЕрдЬрдЧрд░ рдкрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдЦрд╛рд▓реАред


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


рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЕрдЬрдЧрд░ рддрдХ рдкрд╣реБрдБрдЪрд╛рдирд╛ ... рдХрд┐рд╕реА рджреБрдГрд╕реНрд╡рдкреНрди рдореЗрдВ рд╣рдо рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рддреЛ рдЖрдкрдХреЛ рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ C рдпрд╛ ... C ++ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдореЗрдВ, рдЖрдк рд▓рдЧрднрдЧ рд╕рднреА рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдЙрдирдХреА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдФрд░ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЖрдзрд╛рд░ рдкрддреЗ, рдЙрдирдХреА рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, stm32f10x.h рдлрд╝рд╛рдЗрд▓ рдореЗрдВ


 #define PERIPH_BB_BASE ((uint32_t)0x42000000) /*!< Peripheral base address in the bit-band region */ 

рд╕реЗ рдмрджрд▓реЗрдВ


 class InterceptAddr; InterceptAddr addr; #define PERIPH_BB_BASE (addr) /*!< Peripheral base address in the bit-band region */ 

рд▓реЗрдХрд┐рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рдХрд▓реА рдореЗрдВ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛рдЯ ...


рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг stm32f10x_i2c.c рдлрд╝рд╛рдЗрд▓ рд╣реИ:


 FlagStatus I2C_GetFlagStatus(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG) { __IO uint32_t i2creg = 0, i2cxbase = 0; тАж. /* Get the I2Cx peripheral base address */ i2cxbase = (uint32_t)I2Cx; тАж. 

рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрддреЗ рдХреЗ рдкрддреЗ рдХреЛ рд░реЛрдХрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ рд╢рд╛рдпрдж Valgrind рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдПрдХ рдЬреНрдЮрд╛рдкрди рд╣реИред рдЦреИрд░, рдЙрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкрддреЗ рдХреЛ рдХреИрд╕реЗ рд░реЛрдХрдирд╛ рд╣реИред


рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╡рд╣рд╛рдБ рдирд╣реАрдВ рджрд┐рдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ ... рдореИрдВ рд▓рдЧрднрдЧ рдкрддреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд▓рдЧрднрдЧ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП


 Int * p = ... *p = 0x123; 

рдкрддреЗ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред рдХреЗрд╡рд▓ рдЖрдВрддрд░рд┐рдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдирд╛рдо рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдореВрд▓реНрдп рдирд┐рд╣рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд┐рд╕реЗ рдореЗрдордЪреЗрдХ рд╕реЗ рдирд╣реАрдВ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


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


рддрдм рдЕрдиреНрдп рдбреАрдмреАрдЖрдИ рдЙрдкрдХрд░рдг рдереЗред


рдлреНрд░реАрдбрд╛, рдбрд╛рдпрдиреЗрдорд┐рдХ RIO, рдХреБрдЫ рдФрд░, рдФрд░ рдЕрдВрдд рдореЗрдВ рдкрд┐рдВрдЯреВрд▓ рдорд┐рд▓рд╛ред


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


рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрддреЛрдВ рдкрд░ рд▓рд┐рдЦрдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рдХреЛ рд░реЛрдХрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕ https://godbolt.org/z/nJS9ci рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдирд┐рд░реНрджреЗрд╢ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред


X64 рдХреЗ рд▓рд┐рдП, рдпрд╣ рджреЛрдиреЛрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ MOV рд╣реЛрдЧрд╛ред


рдФрд░ x86 рдХреЗ рд▓рд┐рдП рдпрд╣ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП MOV рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП MOVZ рд╣реЛрдЧрд╛ред


рдиреЛрдЯ: рдЕрдиреБрдХреВрд▓рди рдХреЛ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЕрдиреНрдп рдирд┐рд░реНрджреЗрд╢ рд╕рд╛рдордиреЗ рдЖ рд╕рдХрддреЗ рд╣реИрдВред


рд╕реНрдкрд╛рдпрд▓рд░ рд╣реЗрдбрд┐рдВрдЧ
 INS_AddInstrumentFunction(EmulateLoad, 0); INS_AddInstrumentFunction(EmulateStore, 0); ..... static VOID EmulateLoad(INS ins, VOID *v) { // Find the instructions that move a value from memory to a register if ((INS_Opcode(ins) == XED_ICLASS_MOV || INS_Opcode(ins) == XED_ICLASS_MOVZX) && INS_IsMemoryRead(ins) && INS_OperandIsReg(ins, 0) && INS_OperandIsMemory(ins, 1)) { INS_InsertCall(ins, IPOINT_BEFORE, AFUNPTR(loadAddr2Reg), IARG_MEMORYREAD_EA, IARG_MEMORYREAD_SIZE, IARG_RETURN_REGS, INS_OperandReg(ins, 0), IARG_END); // Delete the instruction INS_Delete(ins); } } static VOID EmulateStore(INS ins, VOID *v) { if (INS_Opcode(ins) == XED_ICLASS_MOV && INS_IsMemoryWrite(ins) && INS_OperandIsMemory(ins, 0)) { if (INS_hasKnownMemorySize(ins)) { if (INS_OperandIsReg(ins, 1)) { INS_InsertCall(ins, IPOINT_BEFORE, AFUNPTR(multiMemAccessStore), IARG_MULTI_MEMORYACCESS_EA, IARG_REG_VALUE, INS_OperandReg(ins, 1), IARG_END); } else if (INS_OperandIsImmediate(ins, 1)) { INS_InsertCall(ins, IPOINT_BEFORE, (AFUNPTR)multiMemAccessStore, IARG_MULTI_MEMORYACCESS_EA, IARG_UINT64, INS_OperandImmediate(ins, 1), IARG_END); } } else { if (INS_OperandIsReg(ins, 1)) { INS_InsertCall(ins, IPOINT_BEFORE, AFUNPTR(storeReg2Addr), IARG_MEMORYWRITE_EA, IARG_REG_VALUE, INS_OperandReg(ins, 1), IARG_MEMORYWRITE_SIZE, IARG_END); } else if (INS_OperandIsImmediate(ins, 1)) { INS_InsertCall(ins, IPOINT_BEFORE, AFUNPTR(storeReg2Addr), IARG_MEMORYWRITE_EA, IARG_UINT64, INS_OperandImmediate(ins, 1), IARG_UINT32, IARG_MEMORYWRITE_SIZE, IARG_END); } } } } 

рдкрддреЗ рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо loadAddr2Reg рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореВрд▓ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, loadAddr2Reg рдХреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред


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


рдЖрдЧреЗ рд╣рдореЗрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХрд┐рди рдкрддреЛрдВ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдирд╛ рд╣реИ, рд╣рдорд╛рд░реЗ stm32f103C8T6 рдЪрд┐рдк рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдореИрдк рджреЗрдЦреЗрдВ:


рдЫрд╡рд┐
рд╣рдо SRAM рдФрд░ PERIPH_BASE рдХреЗ рдкрддреЗ рдкрд░ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН 0x20000000 рд╕реЗ 0x20000000 + 128 * 1024 рдФрд░ 0x40000000 рд╕реЗ 0x40030000 рддрдХред рдареАрдХ рд╣реИ, рдпрд╛ рдмрд▓реНрдХрд┐, рдХрд╛рдлреА рдирд╣реАрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рд╣рдЯрд╛ рдирд╣реАрдВ рд╕рдХрддреЗ рдереЗред рдЗрд╕рд▓рд┐рдП, рдЗрди рдкрддреЛрдВ рдкрд░ рд░рд┐рдХреЙрд░реНрдб sigfault рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрди рдкрддреЛрдВ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдбреЗрдЯрд╛ рд╣реЛрдЧрд╛, рди рдХрд┐ рдЗрд╕ рдЪрд┐рдк рдХрд╛ рджреВрд╕рд░рд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЪрд▓реЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рд░рдгреА рдкрд░ рдХрд╣рддреЗ рд╣реИрдВред


рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдЖрдХрд╛рд░ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЖрдзрд╛рд░ рдкрддреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдореЗрдВ рдЙрдирдХреЗ рд╕рдВрдХреЗрдд рд╕реНрдерд╛рди рджреЗрддреЗ рд╣реИрдВред


рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ, рдмрдЬрд╛рдп рд╕реБрд░реНрдЦрд┐рдпреЛрдВ рдореЗрдВ


 #define SRAM_BASE ((uint32_t)0x20000000) /*!< SRAM base address in the alias region */ #define PERIPH_BASE ((uint32_t)0x40000000) /*!< Peripheral base address in the alias region */ 

рдХрд░рдирд╛


  #define SRAM_BASE ((AddrType)pAddrSRAM) #define PERIPH_BASE ((AddrType)pAddrPERIPH) 

рдФрд░ рдЬрд╣рд╛рдВ pAddrSRAM рдФрд░ pAddrPERIPH рдкреВрд░реНрд╡-рдЖрд╡рдВрдЯрд┐рдд рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рдВрдХреЗрдд рд╣реИрдВред


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


 typedef struct { addr_t start_addr; //      addr_t end_addr; //   addr_t reference_addr; //   } memoryTranslate; 

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реА рдЪрд┐рдк рдХреЗ рд▓рд┐рдП рдпрд╣ рдЗрддрдирд╛ рднрд░рд╛ рд╣реЛрдЧрд╛


 map->start_addr = (addr_t)pAddrSRAM; map->end_addr = 96*1024; map->reference_addr = (addr_t)0x20000000U; 

рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд░реЛрдХрдирд╛ рдФрд░ рдЙрд╕рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдорд╛рди рд▓реЗрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ:


 IMG_AddInstrumentFunction(ImageReplace, 0); .... static memoryTranslate *replaceMemoryMapFun(CONTEXT *context, AFUNPTR orgFuncptr, sizeMemoryTranslate_t *size) { PIN_CallApplicationFunction(context, PIN_ThreadId(), CALLINGSTD_DEFAULT, orgFuncptr, NULL, PIN_PARG(memoryTranslate *), &addrMap, PIN_PARG(sizeMemoryTranslate_t *), size, PIN_PARG_END()); sizeMap = *size; return addrMap; } static VOID ImageReplace(IMG img, VOID *v) { RTN freeRtn = RTN_FindByName(img, NAME_MEMORY_MAP_FUNCTION); if (RTN_Valid(freeRtn)) { PROTO proto_free = PROTO_Allocate(PIN_PARG(memoryTranslate *), CALLINGSTD_DEFAULT, NAME_MEMORY_MAP_FUNCTION, PIN_PARG(sizeMemoryTranslate_t *), PIN_PARG_END()); RTN_ReplaceSignature(freeRtn, AFUNPTR(replaceMemoryMapFun), IARG_PROTOTYPE, proto_free, IARG_CONTEXT, IARG_ORIG_FUNCPTR, IARG_FUNCARG_ENTRYPOINT_VALUE, 0, IARG_END); } } 

рдФрд░ рд╣рдорд╛рд░реЗ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдлрдВрдХреНрд╢рди рдХреЛ рдЗрд╕ рддрд░рд╣ рдмрдирд╛рдПрдВ:


 memoryTranslate * getMemoryMap(sizeMemoryTranslate_t * size){ ... return memoryMap; } 

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


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рд╕рдВрдЪрд╛рд░ рдХреА рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рдЫрд╡рд┐
0x123 рдкрддреЗ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдПрдХ рд╕рд░рд▓реАрдХреГрдд рд╡рд░реНрдХрдлрд╝реНрд▓реЛ:


рдЫрд╡рд┐
рдЖрдЗрдП рдПрдХ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:


рдкрд┐рдирдЯреВрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рд╣рдорд╛рд░реЗ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░реНрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ
рдХрд╛рд░реНрдпрдХреНрд░рдо рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕реЗ рдХреБрдЫ рдереНрд░реЗрдб рд╕рд░рдгреА рдкрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдкрддреЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЧреЗрдЯрдореЗрд░реАрдкреЙрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдорд╛рд░рд╛ рдкрд┐рдирдЯреВрд▓ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ 0x123 рдкрддреЗ рдкрд░ рдлрд╝реНрд▓рд┐рдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдЯреНрд░реИрдХ рдХрд░реЗрдВрдЧреЗ
PinTool рдХреНрд▓рд╛рдЗрдВрдЯ рдбрд┐рд╕реНрд╕реИрдЧреЗрдЯреЗрдб рдПрдбреНрд░реЗрд╕ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ
рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рдкрд╕ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд╣реАрдВ рди рдХрд╣реАрдВ рд╣рдорд╛рд░реЗ рдЯреНрд░реИрдХ рдХрд┐рдП рдЧрдП рдкрддреЗ рдкрд░ рдПрдХ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╣реИ 0x123ред StoreReg2Addr рдлрд╝рдВрдХреНрд╢рди рдЗрд╕рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрддрд╛ рд╣реИ
рдФрд░ OpenOCD рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд▓рд┐рдЦрд┐рдд рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ
рдХреНрд▓рд╛рдЗрдВрдЯ рдЙрддреНрддрд░ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рдпрдВрддреНрд░рдг рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИ
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХрд╣реАрдВ-рдХрд╣реАрдВ рдкрдарди рдкрддрд╛ 0x123 рдкрд░ рд╣реЛрддрд╛ рд╣реИред
loadAddr2Reg рдЗрд╕реЗ рдЯреНрд░реИрдХ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдПрдХ OpenOCD рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИред
OpenOCD рдХреНрд▓рд╛рдЗрдВрдЯ рдЗрд╕реЗ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИ
рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдордХреЗ рд░рдЬрд┐рд╕реНрдЯрд░ рд╕реЗ рдореВрд▓реНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИ
рдХрд╛рд░реНрдпрдХреНрд░рдо рдЬрд╛рд░реА рд╣реИред
рдпрд╣ рд╕рдм рдЕрднреА рдХреЗ рд▓рд┐рдП рд╣реИ, рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рдЙрджрд╛рд╣рд░рдг рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рднрд╛рдЧреЛрдВ рдореЗрдВ рд╣реЛрдВрдЧреЗред

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


All Articles