рдореАрдЯрд┐рдВрдЧрдЪрд╛ рднрд╛рдЧ рдореНрд╣рдгреВрди 0x0A DC7831
рдпрд╛ рд▓реЗрдЦрд╛рдд рдЖрдореНрд╣реА рдПрдореБрд▓реЗрдЯрд░рдордзреНрдпреЗ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рдлрд░реНрдорд╡реЗрдЕрд░ рдХрд╕реЗ рдЪрд╛рд▓рд╡рд╛рдпрдЪреЗ, рдбреАрдмрдЧрд░рд╕рд╣ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рджрд╛рдЪреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╕реЗ рдХрд░рд╛рд╡реЗ рдЖрдгрд┐ рдлрд░реНрдорд╡реЗрдЕрд░рдЪреЗ рд▓рд╣рд╛рди рдбрд╛рдпрдиреЕрдорд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╕реЗ рдХрд░рд╛рд╡реЗ рдпрд╛рдЪреЗ рд╡рд░реНрдгрди рдХрд░реВ.
prehistory
рдмрд░реНрдпрд╛рдЪ рдХрд╛рд│рд╛рдкреВрд░реНрд╡реА рджреВрд░рдЪреНрдпрд╛ рдЖрдХрд╛рд╢рдЧрдВрдЧреЗрдд
рдХрд╛рд╣реА рд╡рд░реНрд╖рд╛рдВрдкреВрд░реНрд╡реА рдЖрдордЪреНрдпрд╛ рдкреНрд░рдпреЛрдЧрд╢рд╛рд│реЗрдд рдЙрдкрдХрд░рдгрд╛рдЪреНрдпрд╛ рдлрд░реНрдорд╡реЗрдЕрд░рдЪреА рддрдкрд╛рд╕рдгреА рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рд╣реЛрддреА. рдлрд░реНрдорд╡реЗрдЕрд░ рд╕рдВрдХреБрдЪрд┐рдд рдЖрдгрд┐ рдмреВрдЯрд▓реЛрдбрд░рд╕рд╣ рдЕрдирдкреЕрдХ рдХреЗрд▓реЗрд▓реЗ рд╣реЛрддреЗ. рддреНрдпрд╛рдиреЗ рд╣реЗ рдЕрддреНрдпрдВрдд рдХреНрд▓рд┐рд╖реНрдЯ рдкрджреНрдзрддреАрдиреЗ рдХреЗрд▓реЗ, рдореЗрдорд░реАрдордзреАрд▓ рдбреЗрдЯрд╛ рдЕрдиреЗрдХ рд╡реЗрд│рд╛ рд╣рд▓рд╡рд▓рд╛. рдЖрдгрд┐ рдлрд░реНрдорд╡реЗрдЕрд░ рд╕реНрд╡рддрдГ рдирдВрддрд░ рд╕рдХреНрд░рд┐рдпрдкрдгреЗ рдкрд░рд┐рдзреАрдпрд╛рдВрд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрд▓рд╛. рдЖрдгрд┐ рд╣реЗ рд╕рд░реНрд╡ MIPS рдХреЛрдЕрд░рд╡рд░.
рд╡рд╕реНрддреБрдирд┐рд╖реНрда рдХрд╛рд░рдгрд╛рд╕реНрддрд╡, рдЙрдкрд▓рдмреНрдз рдЕрдиреБрдХрд░рдгрдХрд░реНрддреЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдЕрдиреБрдХреВрд▓ рдирд╡реНрд╣рддреЗ, рдкрд░рдВрддреБ рддрд░реАрд╣реА рдЖрдореНрд╣рд╛рд▓рд╛ рдХреЛрдб рдЪрд╛рд▓рд╡рд╛рдпрдЪрд╛ рд╣реЛрддрд╛. рдордЧ рдЖрдореНрд╣реА рдЖрдордЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рдПрдореБрд▓реЗрдЯрд░ рдмрдирд╡рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛, рдЬреЛ рдХрд┐рдорд╛рди рдХрд░реЗрд▓ рдЖрдгрд┐ рдЖрдореНрд╣рд╛рд▓рд╛ рдореБрдЦреНрдп рдлрд░реНрдорд╡реЗрдЕрд░ рдЕрдирдкреЕрдХ рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрдИрд▓. рдЖрдореНрд╣реА рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛ рдЖрдгрд┐ рддреЗ рдХрд╛рдо рдХреЗрд▓реЗ. рдЖрдореНрд╣реА рд╡рд┐рдЪрд╛рд░ рдХреЗрд▓рд╛ рдХреА, рдореБрдЦреНрдп рдлрд░реНрдорд╡реЗрдЕрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреЗрд░рд┐рдлреЗрд░рд▓реНрд╕ рдЬреЛрдбрд▓реЗ рддрд░ рдХрд╛рдп рд╣реЛрдИрд▓. рд╣реЗ рдлрд╛рд░рд╕реЗ рджреБрдЦрд╛рдкрдд рдЭрд╛рд▓реЗ рдирд╛рд╣реА - рдЖрдгрд┐ рддреЗ рджреЗрдЦреАрд▓ рдХрд╛рд░реНрдп рдХреЗрд▓реЗ. рдЖрдореНрд╣реА рдкреБрдиреНрд╣рд╛ рд╡рд┐рдЪрд╛рд░ рдХреЗрд▓рд╛ рдЖрдгрд┐ рдкреВрд░реНрдг рдПрдореБрд▓реЗрдЯрд░ рдмрдирд╡рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛.
рдкрд░рд┐рдгрд╛рдо рдореНрд╣рдгрдЬреЗ рд╕рдВрдЧрдгрдХ рдкреНрд░рдгрд╛рд▓реА рдПрдореБрд▓реЗрдЯрд░
рдХреЙрдкреАрдХреЕрдЯ рдХрд╛?
рд╢рдмреНрджрд╛рдВрд╡рд░ рдирд╛рдЯрдХ рдЖрд╣реЗ.
- рдирдХреНрдХрд▓ рдХрд░рдгрд╛рд░рд╛ (рдЗрдВрдЧреНрд░рдЬреА, рд╕рдВрдЬреНрдЮрд╛ [╦Иk╔Тp╔кk├жt]) - рдЕрдиреБрдХрд░рдг рдХрд░рдгрд╛рд░рд╛, рдЕрдиреБрдХрд░рдг рдХрд░рдгрд╛рд░рд╛
- рдорд╛рдВрдЬрд░ (рдЗрдВрдЧреНрд░рдЬреА, рд╕рдВрдЬреНрдЮрд╛ [╦Иk├жt]) - рдорд╛рдВрдЬрд░, рдорд╛рдВрдЬрд░ - рдкреНрд░рдХрд▓реНрдкрд╛рдЪреНрдпрд╛ рдирд┐рд░реНрдорд╛рддреНрдпрд╛рдВрдкреИрдХреА рдПрдХрд╛рдЪрд╛ рдЖрд╡рдбрддрд╛ рдкреНрд░рд╛рдгреА
- "K" рд╣реЗ рдЕрдХреНрд╖рд░ рдХреЛрдЯрд▓рд┐рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖реЗрддреАрд▓ рдЖрд╣реЗ
рдирдХреНрдХрд▓ рдХрд░рдгрд╛рд░рд╛
рдПрдореБрд▓реЗрдЯрд░ рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛, рдЕрддрд┐рд╢рдп рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рдХреНрд╖реНрдпреЗ рд╕реЗрдЯ рдХреЗрд▓реА рдЧреЗрд▓реА:
- рдирд╡реАрди рдкреЗрд░рд┐рдлреЗрд░рд▓реНрд╕, рдореЙрдбреНрдпреВрд▓реНрд╕, рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рджреНрд░реБрддрдкрдгреЗ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛;
- рд╡рд┐рд╡рд┐рдз рдореЙрдбреНрдпреВрд▓реНрд╕рдордзреВрди рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рдПрдХрддреНрд░ рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛;
- рдЖрднрд╛рд╕реА рдЙрдкрдХрд░рдгрд╛рдЪреНрдпрд╛ рдореЗрдорд░реАрдордзреНрдпреЗ рдХреЛрдгрддрд╛рд╣реА рдмрд╛рдпрдирд░реА рдбреЗрдЯрд╛ (рдлрд░реНрдорд╡реЗрдЕрд░) рд▓реЛрдб рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛;
- рд╕реНрдиреЕрдкрд╢реЙрдЯреНрд╕рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ (рд╕рд┐рд╕реНрдЯрдо рд╕реНрдерд┐рддреАрдЪреЗ рд╕реНрдиреЕрдкрд╢реЙрдЯ);
- рдмрд┐рд▓реНрдЯ-рдЗрди рдбреАрдмрдЧрд░рджреНрд╡рд╛рд░реЗ рдПрдореБрд▓реЗрдЯрд░рд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛;
- рд╡рд┐рдХрд╛рд╕рд╛рд╕рд╛рдареА рдЫрд╛рди рдЖрдзреБрдирд┐рдХ рднрд╛рд╖рд╛.
рдкрд░рд┐рдгрд╛рдореА, рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╕рд╛рдареА рдХреЛрдЯрд▓рд┐рди рдирд┐рд╡рдбрд▓реЗ рдЧреЗрд▓реЗ, рдмрд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ (рд╣реЗ рдЕрд╕реЗ рдЖрд╣реЗ рдЬреЗрд╡реНрд╣рд╛ рдореЙрдбреНрдпреВрд▓реНрд╕ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдбреЗрдЯрд╛ рдмрд╕реЗрд╕рджреНрд╡рд╛рд░реЗ рдПрдХрдореЗрдХрд╛рдВрд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрддрд╛рдд), рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рд╡рд░реНрдгрди рд╕реНрд╡рд░реВрдк рдореНрд╣рдгреВрди JSON рдЖрдгрд┐ рдбреАрдмрдЧрд░рд╢реА рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рджрд╛рд╕рд╛рдареА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореНрд╣рдгреВрди GDB RSP.
рджреЛрди рд╡рд░реНрд╖рд╛рдВрдкрд╛рд╕реВрди рд╡рд┐рдХрд╛рд╕ рдЪрд╛рд▓реВ рдЖрд╣реЗ рдЖрдгрд┐ рд╕рдХреНрд░рд┐рдпрдкрдгреЗ рдЪрд╛рд▓реВ рдЖрд╣реЗ. рдпрд╛ рд╡реЗрд│реА, MIPS, x86, V850ES, ARM, рдЖрдгрд┐ PowerPC рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ.
рдкреНрд░рдХрд▓реНрдк рд╡рд╛рдврдд рдЖрд╣реЗ рдЖрдгрд┐ рддреЛ рд╡реНрдпрд╛рдкрдХ рд▓реЛрдХрд╛рдВрд╕рдореЛрд░ рд╕рд╛рджрд░ рдХрд░рдгреНрдпрд╛рдЪреА рд╡реЗрд│ рдЖрд▓реА рдЖрд╣реЗ. рдЖрдореНрд╣реА рдирдВрддрд░ рдкреНрд░рдХрд▓реНрдкрд╛рдЪреЗ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд░реНрдгрди рдХрд░реВ, рдкрд░рдВрддреБ рд╕рдзреНрдпрд╛ рдЖрдореНрд╣реА рдХреЛрдкреАрдХреЕрдЯ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╡рд░ рд▓рдХреНрд╖ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВ.
рд╕рд░реНрд╡рд╛рдд рдЕрдзреАрд░рд╛рдВрд╕рд╛рдареА, рдПрдореБрд▓реЗрдЯрд░рдЪреА рдкреНрд░реЛрдореЛ рдЖрд╡реГрддреНрддреА рдпреЗрдереВрди рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ
рдПрдореБрд▓реЗрдЯрд░ рдордзреНрдпреЗ рдЧреЗрдВрдбрд╛
рдпрд╛рдЖрдзреА SMARTRHINO-2018 рдкрд░рд┐рд╖рджреЗрд╕рд╛рдареА рд░рд┐рд╡реНрд╣рд░реНрд╕ рдЗрдВрдЬрд┐рдиреАрдЕрд░рд┐рдВрдЧ рдХреМрд╢рд▓реНрдпреЗ рд╢рд┐рдХрд╡рдгреНрдпрд╛рд╕рд╛рдареА тАЬрдЧреЗрдВрдбрд╛тАЭ рд╣реЗ рдЪрд╛рдЪрдгреА рдЙрдкрдХрд░рдг рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдд рдЖрд▓реЗ рд╣реЛрддреЗ. рд╕реНрдерд┐рд░ рдлрд░реНрдорд╡реЗрдЕрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ
рдЖрддрд╛ "рд╕реНрдкреАрдХрд░" рдЬреЛрдбрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ рдЖрдгрд┐ рдПрдореБрд▓реЗрдЯрд░рдордзреНрдпреЗ рдлрд░реНрдорд╡реЗрдЕрд░ рдЪрд╛рд▓рд╡реВ.
рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕реЗрд▓рдГ
1) Java 1.8
2) рдкрд╛рдпрдерди рдЖрдгрд┐ рдореЙрдбреНрдпреВрд▓
рд╡рд┐рдВрдбреЛрдЬрд╕рд╛рдареА:
1)
2)
рд▓рд┐рдирдХреНрд╕рд╕рд╛рдареА:
1) socat
рддреБрдореНрд╣реА GDB рдХреНрд▓рд╛рдпрдВрдЯ рдореНрд╣рдгреВрди Eclipse, IDA Pro рдХрд┐рдВрд╡рд╛ radare2 рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛.
рддреЗ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ?
рдПрдореБрд▓реЗрдЯрд░рдордзреНрдпреЗ рдлрд░реНрдорд╡реЗрдЕрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ "рдЕрд╕реЗрдореНрдмрд▓" рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЬреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рдЪреЗ рдЕреЕрдирд╛рд▓реЙрдЧ рдЖрд╣реЗ.
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдХрд░рдг (тАЬрдЧреЗрдВрдбрд╛тАЭ) рдмреНрд▓реЙрдХ рдЖрдХреГрддреАрдордзреНрдпреЗ рджрд░реНрд╢рд╡рд┐рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ:
рдПрдореБрд▓реЗрдЯрд░рдордзреНрдпреЗ рдПрдХ рдореЙрдбреНрдпреВрд▓рд░ рд░рдЪрдирд╛ рдЖрд╣реЗ рдЖрдгрд┐ рдЕрдВрддрд┐рдо рдЖрднрд╛рд╕реА рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рдЪреЗ рд╡рд░реНрдгрди JSON рдлрд╛рдЗрд▓рдордзреНрдпреЗ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.
JSON 105 рдУрд│реА
{
"top": true,
// Plugin name should be the same as file name (or full path from library start)
"plugin": "rhino",
// Directory where plugin places
"library": "user",
// Plugin parameters (constructor parameters if jar-plugin version)
"params": [
{ "name": "tty_dbg", "type": "String"},
{ "name": "tty_bt", "type": "String"},
{ "name": "firmware", "type": "String", "default": "NUL"}
],
// Plugin outer ports
"ports": [ ],
// Plugin internal buses
"buses": [
{ "name": "mem", "size": "BUS30" },
{ "name": "nand", "size": "4" },
{ "name": "gpio", "size": "BUS32" }
],
// Plugin internal components
"modules": [
{
"name": "u1_stm32",
"plugin": "STM32F042",
"library": "mcu",
"params": {
"firmware:String": "params.firmware"
}
},
{
"name": "usart_debug",
"plugin": "UartSerialTerminal",
"library": "terminals",
"params": {
"tty": "params.tty_dbg"
}
},
{
"name": "term_bt",
"plugin": "UartSerialTerminal",
"library": "terminals",
"params": {
"tty": "params.tty_bt"
}
},
{
"name": "bluetooth",
"plugin": "BT",
"library": "mcu"
},
{ "name": "led_0", "plugin": "LED", "library": "mcu" },
{ "name": "led_1", "plugin": "LED", "library": "mcu" },
{ "name": "led_2", "plugin": "LED", "library": "mcu" },
{ "name": "led_3", "plugin": "LED", "library": "mcu" },
{ "name": "led_4", "plugin": "LED", "library": "mcu" },
{ "name": "led_5", "plugin": "LED", "library": "mcu" },
{ "name": "led_6", "plugin": "LED", "library": "mcu" },
{ "name": "led_7", "plugin": "LED", "library": "mcu" },
{ "name": "led_8", "plugin": "LED", "library": "mcu" },
{ "name": "led_9", "plugin": "LED", "library": "mcu" },
{ "name": "led_10", "plugin": "LED", "library": "mcu" },
{ "name": "led_11", "plugin": "LED", "library": "mcu" },
{ "name": "led_12", "plugin": "LED", "library": "mcu" },
{ "name": "led_13", "plugin": "LED", "library": "mcu" },
{ "name": "led_14", "plugin": "LED", "library": "mcu" },
{ "name": "led_15", "plugin": "LED", "library": "mcu" }
],
// Plugin connection between components
"connections": [
[ "u1_stm32.ports.usart1_m", "usart_debug.ports.term_s"],
[ "u1_stm32.ports.usart1_s", "usart_debug.ports.term_m"],
[ "u1_stm32.ports.usart2_m", "bluetooth.ports.usart_m"],
[ "u1_stm32.ports.usart2_s", "bluetooth.ports.usart_s"],
[ "bluetooth.ports.bt_s", "term_bt.ports.term_m"],
[ "bluetooth.ports.bt_m", "term_bt.ports.term_s"],
[ "led_0.ports.pin", "u1_stm32.buses.pin_output_a", "0x00"],
[ "led_1.ports.pin", "u1_stm32.buses.pin_output_a", "0x01"],
[ "led_2.ports.pin", "u1_stm32.buses.pin_output_a", "0x02"],
[ "led_3.ports.pin", "u1_stm32.buses.pin_output_a", "0x03"],
[ "led_4.ports.pin", "u1_stm32.buses.pin_output_a", "0x04"],
[ "led_5.ports.pin", "u1_stm32.buses.pin_output_a", "0x05"],
[ "led_6.ports.pin", "u1_stm32.buses.pin_output_a", "0x06"],
[ "led_7.ports.pin", "u1_stm32.buses.pin_output_a", "0x07"],
[ "led_8.ports.pin", "u1_stm32.buses.pin_output_a", "0x08"],
[ "led_9.ports.pin", "u1_stm32.buses.pin_output_a", "0x09"],
[ "led_10.ports.pin", "u1_stm32.buses.pin_output_a", "0x0A"],
[ "led_11.ports.pin", "u1_stm32.buses.pin_output_a", "0x0B"],
[ "led_12.ports.pin", "u1_stm32.buses.pin_output_a", "0x0C"],
[ "led_13.ports.pin", "u1_stm32.buses.pin_output_a", "0x0D"],
[ "led_14.ports.pin", "u1_stm32.buses.pin_output_a", "0x0E"],
[ "led_15.ports.pin", "u1_stm32.buses.pin_output_a", "0x0F"]
]
}
рдкреЕрд░рд╛рдореАрдЯрд░рдХрдбреЗ рд▓рдХреНрд╖ рджреНрдпрд╛ рдлрд░реНрдорд╡реЗрдЕрд░ рд╡рд┐рднрд╛рдЧ params рд╣реЗ рдПрдХрд╛ рдлрд╛рдИрд▓рдЪреЗ рдирд╛рд╡ рдЖрд╣реЗ рдЬреЗ рдлрд░реНрдорд╡реЗрдЕрд░ рдореНрд╣рдгреВрди рдЖрднрд╛рд╕реА рдЙрдкрдХрд░рдгрд╛рдд рд▓реЛрдб рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.
рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рдЖрдгрд┐ рдореБрдЦреНрдп рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдорд╕рд╣ рддреНрдпрд╛рдЪрд╛ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рдж рдЦрд╛рд▓реАрд▓ рдЖрдХреГрддреАрджреНрд╡рд╛рд░реЗ рджрд░реНрд╢рд╡рд┐рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ:
рдПрдореБрд▓реЗрдЯрд░рдЪреНрдпрд╛ рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рдЪрд╛рдЪрдгреА рдЙрджрд╛рд╣рд░рдгрд╛рдордзреНрдпреЗ рдореБрдЦреНрдп OS рдЪреНрдпрд╛ COM рдкреЛрд░реНрдЯрд╕рд╣ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рдж рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ (рдмреНрд▓реВрдЯреВрде рдореЙрдбреНрдпреВрд▓рд╕рд╛рдареА UART рдЖрдгрд┐ UART рдбреАрдмрдЧ рдХрд░рд╛). рд╣реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреЛрд░реНрдЯ рдЕрд╕реВ рд╢рдХрддрд╛рдд рдЬреНрдпрд╛рдд рдЙрдкрдХрд░рдгреЗ рдХрдиреЗрдХреНрдЯ рдХреЗрд▓реЗрд▓реА рдЖрд╣реЗрдд рдХрд┐рдВрд╡рд╛ рдЖрднрд╛рд╕реА COM рдкреЛрд░реНрдЯреНрд╕ (рдпрд╛рд╕рд╛рдареА рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдлрдХреНрдд рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ com0com/socat).
рдмрд╛рд╣реЗрд░реВрди рдПрдореБрд▓реЗрдЯрд░рд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдгреНрдпрд╛рдЪреЗ рд╕рдзреНрдпрд╛ рджреЛрди рдореБрдЦреНрдп рдорд╛рд░реНрдЧ рдЖрд╣реЗрдд:
- GDB RSP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (рддреНрдпрд╛рдиреБрд╕рд╛рд░, рдпрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓рд▓рд╛ рд╕рдорд░реНрдерди рджреЗрдгрд╛рд░реА рд╕рд╛рдзрдиреЗ Eclipse/IDA/radare2 рдЖрд╣реЗрдд);
- рдЕрдВрддрд░реНрдЧрдд рдПрдореБрд▓реЗрдЯрд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди (рдЖрд░реНрдЧрдкрд╛рд░реНрд╕ рдХрд┐рдВрд╡рд╛ рдкрд╛рдпрдерди).
рдЖрднрд╛рд╕реА COM рдкреЛрд░реНрдЯ
рдЯрд░реНрдорд┐рдирд▓рджреНрд╡рд╛рд░реЗ рд╕реНрдерд╛рдирд┐рдХ рдорд╢реАрдирд╡рд░реАрд▓ рд╡рд░реНрдЪреНрдпреБрдЕрд▓ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рдЪреНрдпрд╛ UART рд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рдВрдмрдВрдзрд┐рдд рдЖрднрд╛рд╕реА COM рдкреЛрд░реНрдЯрдЪреА рдЬреЛрдбреА рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рдПрдХ рдкреЛрд░реНрдЯ рдПрдореБрд▓реЗрдЯрд░рджреНрд╡рд╛рд░реЗ рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ рджреБрд╕рд░рд╛ рдЯрд░реНрдорд┐рдирд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорджреНрд╡рд╛рд░реЗ рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ (PuTTY рдХрд┐рдВрд╡рд╛ рд╕реНрдХреНрд░реАрди):
com0com рд╡рд╛рдкрд░рдгреЗ
рд╡рд░реНрдЪреНрдпреБрдЕрд▓ COM рдкреЛрд░реНрдЯ com0com рдХрд┐рдЯ (рдХрдиреНрд╕реЛрд▓ рдЖрд╡реГрддреНрддреА -) рдордзреАрд▓ рд╕реЗрдЯрдЕрдк рдпреБрдЯрд┐рд▓рд┐рдЯреА рд╡рд╛рдкрд░реВрди рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗ рдЖрд╣реЗрдд C:рдкреНрд░реЛрдЧреНрд░рд╛рдо рдлрд╛рдЗрд▓реНрд╕ (x86)com0comsetup╤Б.exe, рдХрд┐рдВрд╡рд╛ GUI рдЖрд╡реГрддреНрддреА - C: рдкреНрд░реЛрдЧреНрд░рд╛рдо рдлрд╛рдЗрд▓реНрд╕ (x86)com0comsetupg.exe):
рдмреЙрдХреНрд╕ рддрдкрд╛рд╕рд╛ рдмрдлрд░ рдУрд╡реНрд╣рд░рд░рди рд╕рдХреНрд╖рдо рдХрд░рд╛ рд╕рд░реНрд╡ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдкреЛрд░реНрдЯрд╕рд╛рдареА, рдЕрдиреНрдпрдерд╛ рдПрдореБрд▓реЗрдЯрд░ COM рдкреЛрд░реНрдЯрдЪреНрдпрд╛ рдкреНрд░рддрд┐рд╕рд╛рджрд╛рдЪреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрд▓.
socat рд╡рд╛рдкрд░рдгреЗ
UNIX рд╕рд┐рд╕реНрдЯреАрдорд╡рд░, socat рдпреБрдЯрд┐рд▓рд┐рдЯреА рд╡рд╛рдкрд░реВрди рдПрдореБрд▓реЗрдЯрд░рджреНрд╡рд╛рд░реЗ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ COM рдкреЛрд░реНрдЯ рдЖрдкреЛрдЖрдк рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд; рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдПрдореБрд▓реЗрдЯрд░ рд╕реБрд░реВ рдХрд░рддрд╛рдирд╛ рдлрдХреНрдд рдкреЛрд░реНрдЯ рдирд╛рд╡рд╛рдордзреНрдпреЗ рдЙрдкрд╕рд░реНрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рд╛. socat:
.
рдЕрдВрддрд░реНрдЧрдд рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлреЗрд╕ (Argparse рдХрд┐рдВрд╡рд╛ Python)
рдХреЙрдкреАрдХреЕрдЯ рд╣реЗ рдХрдиреНрд╕реЛрд▓ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдПрдореБрд▓реЗрдЯрд░ рддреНрдпрд╛рдЪреНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЖрдгрд┐ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдгреНрдпрд╛рд╕рд╛рдареА рджреЛрди рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлреЗрд╕ рдкрд░реНрдпрд╛рдп рдкреБрд░рд╡рддреЛ: Argparse рдЖрдгрд┐ Python.
Argparse рдХреЙрдкреАрдХреЕрдЯрдордзреНрдпреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓рд╛ CLI рдЖрд╣реЗ рдЖрдгрд┐ рддреЛ рдиреЗрд╣рдореА рдкреНрд░рддреНрдпреЗрдХрд╛рд╕рд╛рдареА рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ.
рдкрд░реНрдпрд╛рдпреА CLI рдореНрд╣рдгрдЬреЗ рдкрд╛рдпрдерди рдЗрдВрдЯрд░рдкреНрд░рд┐рдЯрд░. рддреЗ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рдЬреЗрдк рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЖрдгрд┐ рдкрд╛рдпрдердирд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдореБрд▓реЗрдЯрд░ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ (рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рдореБрдЦреНрдп рдкреНрд░рдгрд╛рд▓реАрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗрд▓рд╛ рдкрд╛рдпрдерди рдЗрдВрдЯрд░рдкреНрд░рд┐рдЯрд░ рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдИрд▓).
рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ Jep рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдд рдЖрд╣реЗ
Linux Jep рдЕрдВрддрд░реНрдЧрдд pip рджреНрд╡рд╛рд░реЗ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ:
pip install jep
Windows рд╡рд░ Jep рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг рдкреНрд░рдердо Windows SDK рдЖрдгрд┐ рд╕рдВрдмрдВрдзрд┐рдд Microsoft Visual Studio рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЖрдореНрд╣реА рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рдереЛрдбреЗ рд╕реЛрдкреЗ рдХреЗрд▓реЗ рдЖрд╣реЗ рдЖрдгрд┐
pip install jep-3.8.2-cp27-cp27m-win_amd64.whl
Jep рдЪреА рд╕реНрдерд╛рдкрдирд╛ рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрдирд╡рд░ рдЪрд╛рд▓рд╡рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:
python -c "import jep"
рдЦрд╛рд▓реАрд▓ рд╕рдВрджреЗрд╢ рдкреНрд░рддрд┐рд╕рд╛рджрд╛рдд рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ:
ImportError: Jep is not supported in standalone Python, it must be embedded in Java.
рддреБрдордЪреНрдпрд╛ рд╕рд┐рд╕реНрдЯрдорд╕рд╛рдареА рдПрдореБрд▓реЗрдЯрд░ рдмреЕрдЪ рдлрд╛рдЗрд▓рдордзреНрдпреЗ (copycat.bat - рд╡рд┐рдВрдбреЛрдЬрд╕рд╛рдареА, рдирдХреНрдХрд▓ рдХрд░рдгрд╛рд░рд╛ - рд▓рд┐рдирдХреНрд╕рд╕рд╛рдареА) рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдЪреНрдпрд╛ рд╕реВрдЪреАрдордзреНрдпреЗ DEFAULT_JVM_OPTS
рдЕрддрд┐рд░рд┐рдХреНрдд рдкреЕрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╛ Djava.library.path
тАФ рддреНрдпрд╛рдд рд╕реНрдерд╛рдкрд┐рдд Jep рдореЙрдбреНрдпреВрд▓рдЪрд╛ рдорд╛рд░реНрдЧ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.
рд╡рд┐рдВрдбреЛрдЬрд╕рд╛рдареА рдкрд░рд┐рдгрд╛рдо рдЕрд╢реА рдПрдХ рдУрд│ рдЕрд╕рд╛рд╡реА:
set DEFAULT_JVM_OPTS="-XX:MaxMetaspaceSize=256m" "-XX:+UseParallelGC" "-XX:SurvivorRatio=6" "-XX:-UseGCOverheadLimit" "-Djava.library.path=C:/Python27/Lib/site-packages/jep"
Kopycat рд▓рд╛рдБрдЪ рдХрд░рдд рдЖрд╣реЗ
рдПрдореБрд▓реЗрдЯрд░ рдПрдХ рдХрдиреНрд╕реЛрд▓ JVM рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд╣реЗ. рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ (sh/cmd) рджреНрд╡рд╛рд░реЗ рд▓реЙрдиреНрдЪ рдХреЗрд▓реЗ рдЬрд╛рддреЗ.
рд╡рд┐рдВрдбреЛрдЬ рдЕрдВрддрд░реНрдЧрдд рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдЪреА рдЖрдЬреНрдЮрд╛:
binkopycat -g 23946 -n rhino -l user -y library -p firmware=firmwarerhino_pass.bin,tty_dbg=COM26,tty_bt=COM28
socat рдпреБрдЯрд┐рд▓рд┐рдЯреА рд╡рд╛рдкрд░реВрди Linux рдЕрдВрддрд░реНрдЧрдд рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдЪреА рдЖрдЬреНрдЮрд╛:
./bin/kopycat -g 23946 -n rhino -l user -y library -p firmware=./firmware/rhino_pass.bin, tty_dbg=socat:./COM26,tty_bt=socat:./COM28
-g 23646
тАФ TCP рдкреЛрд░реНрдЯ рдЬреЛ GDB рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЦреБрд▓рд╛ рдЕрд╕реЗрд▓;-n rhino
- рдореБрдЦреНрдп рд╕рд┐рд╕реНрдЯрдо рдореЙрдбреНрдпреВрд▓рдЪреЗ рдирд╛рд╡ (рдЕрд╕реЗрдВрдмрд▓реНрдб рдбрд┐рд╡реНрд╣рд╛рдЗрд╕);-l user
тАФ рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА рд▓рд╛рдпрдмреНрд░рд░реАрдЪреЗ рдирд╛рд╡;-y library
тАФ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рдордзреНрдпреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдореЙрдбреНрдпреВрд▓реНрд╕ рд╢реЛрдзрдгреНрдпрд╛рдЪрд╛ рдорд╛рд░реНрдЧ;firmwarerhino_pass.bin
тАФ рдлрд░реНрдорд╡реЗрдЕрд░ рдлрд╛рдЗрд▓рдЪрд╛ рдорд╛рд░реНрдЧ;- COM26 рдЖрдгрд┐ COM28 рдЖрднрд╛рд╕реА COM рдкреЛрд░реНрдЯ рдЖрд╣реЗрдд.
рдкрд░рд┐рдгрд╛рдореА, рдПрдХ рд╕реВрдЪрдирд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдИрд▓ Python >
(рдХрд┐рдВрд╡рд╛ Argparse >
):
18:07:59 INFO [eFactoryBuilder.create ]: Module top successfully created as top
18:07:59 INFO [ Module.initializeAndRes]: Setup core to top.u1_stm32.cortexm0.arm for top
18:07:59 INFO [ Module.initializeAndRes]: Setup debugger to top.u1_stm32.dbg for top
18:07:59 WARN [ Module.initializeAndRes]: Tracer wasn't found in top...
18:07:59 INFO [ Module.initializeAndRes]: Initializing ports and buses...
18:07:59 WARN [ Module.initializePortsA]: ATTENTION: Some ports has warning use printModulesPortsWarnings to see it...
18:07:59 FINE [ ARMv6CPU.reset ]: Set entry point address to 08006A75
18:07:59 INFO [ Module.initializeAndRes]: Module top is successfully initialized and reset as a top cell!
18:07:59 INFO [ Kopycat.open ]: Starting virtualization of board top[rhino] with arm[ARMv6Core]
18:07:59 INFO [ GDBServer.debuggerModule ]: Set new debugger module top.u1_stm32.dbg for GDB_SERVER(port=23946,alive=true)
Python >
IDA Pro рд╕рд╣ рд╕рдВрд╡рд╛рдж
рдЪрд╛рдЪрдгреА рд╕реБрд▓рдн рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА IDA рдордзреАрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рд╕рд╛рдареА рд╕реНрддреНрд░реЛрдд рдлрд╛рдЗрд▓ рдореНрд╣рдгреВрди Rhino рдлрд░реНрдорд╡реЗрдЕрд░рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рддреЛ
рддреБрдореНрд╣реА рдореЗрдЯрд╛ рдорд╛рд╣рд┐рддреАрд╢рд┐рд╡рд╛рдп рдореБрдЦреНрдп рдлрд░реНрдорд╡реЗрдЕрд░ рджреЗрдЦреАрд▓ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛.
IDA Pro рдордзреНрдпреЗ Kopycat рд▓рд╛рдБрдЪ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдбреАрдмрдЧрд░ рдореЗрдиреВрдордзреНрдпреЗ рдЖрдпрдЯрдорд╡рд░ рдЬрд╛ тАЬрдбреАрдмрдЧрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рд╛..."рдЖрдгрд┐ рдирд┐рд╡рдбрд╛"рд░рд┐рдореЛрдЯ GDB рдбреАрдмрдЧрд░" рдкреБрдвреЗ, рдХрдиреЗрдХреНрд╢рди рд╕реЗрдЯ рдХрд░рд╛: рдореЗрдиреВ рдбреАрдмрдЧрд░ - рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░реНрдпрд╛рдп...
рдореВрд▓реНрдпреЗ рд╕реЗрдЯ рдХрд░рд╛:
- рдЕрдиреБрдкреНрд░рдпреЛрдЧ - рдХреЛрдгрддреЗрд╣реА рдореВрд▓реНрдп
- рд╣реЛрд╕реНрдЯрдирд╛рд╡: 127.0.0.1 (рдХрд┐рдВрд╡рд╛ рд░рд┐рдореЛрдЯ рдорд╢реАрдирдЪрд╛ IP рдкрддреНрддрд╛ рдЬрд┐рдереЗ Kopycat рдЪрд╛рд▓реВ рдЖрд╣реЗ)
- рдкреЛрд░реНрдЯ: 23946
рдЖрддрд╛ рдбреАрдмрдЧрд┐рдВрдЧ рдмрдЯрдг рдЙрдкрд▓рдмреНрдз рд╣реЛрддреЗ (F9 рдХреА):
рдПрдореБрд▓реЗрдЯрд░рдордзреАрд▓ рдбреАрдмрдЧрд░ рдореЙрдбреНрдпреВрд▓рд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреНрдпрд╛рд╡рд░ рдХреНрд▓рд┐рдХ рдХрд░рд╛. IDA рдбреАрдмрдЧрд┐рдВрдЧ рдореЛрдбрдордзреНрдпреЗ рдЬрд╛рддреЗ, рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдВрдбреЛ рдЙрдкрд▓рдмреНрдз рд╣реЛрддрд╛рдд: рдиреЛрдВрджрдгреАрдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА, рд╕реНрдЯреЕрдХрдмрджреНрджрд▓.
рдЖрддрд╛ рдЖрдкрдг рдбреАрдмрдЧрд░рдЪреА рд╕рд░реНрд╡ рдорд╛рдирдХ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ:
- рдирд┐рд░реНрджреЗрд╢рд╛рдВрдЪреА рдЪрд░рдг-рджрд░-рдЪрд░рдг рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА (рдордзреНрдпреЗ рдкрд╛рдКрд▓ рдЯрд╛рдХрд╛ ╨╕ рд╕реНрдЯреЗрдк рдУрд╡реНрд╣рд░ тАФ рдХреА F7 рдЖрдгрд┐ F8, рдЕрдиреБрдХреНрд░рдореЗ);
- рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╕реБрд░реВ рдХрд░рдгреЗ рдЖрдгрд┐ рд╡рд┐рд░рд╛рдо рджреЗрдгреЗ;
- рдХреЛрдб рдЖрдгрд┐ рдбреЗрдЯрд╛ рджреЛрдиреНрд╣реАрд╕рд╛рдареА рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рддрдпрд╛рд░ рдХрд░рдгреЗ (F2 рдХреА).
рдбреАрдмрдЧрд░рд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рдгреЗ рдореНрд╣рдгрдЬреЗ рдлрд░реНрдорд╡реЗрдЕрд░ рдХреЛрдб рдЪрд╛рд▓рд╡рдгреЗ рдЕрд╕рд╛ рд╣реЛрдд рдирд╛рд╣реА. рд╡рд░реНрддрдорд╛рди рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╕реНрдерд┐рддреА рдкрддреНрддрд╛ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ 0x08006A74
- рдХрд╛рд░реНрдпрд╛рдЪреА рд╕реБрд░реБрд╡рд╛рдд рд░реАрд╕реЗрдЯ_рд╣рдБрдбрд▓рд░. рддреБрдореНрд╣реА рд╕реВрдЪреА рдЦрд╛рд▓реА рд╕реНрдХреНрд░реЛрд▓ рдХреЗрд▓реНрдпрд╛рд╕, рддреБрдореНрд╣реА рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдкрд╛рд╣реВ рд╢рдХрддрд╛ рдореБрдЦреНрдп. рддреБрдореНрд╣реА рдпрд╛ рдУрд│реАрд╡рд░ рдХрд░реНрд╕рд░ рдареЗрд╡реВ рд╢рдХрддрд╛ (рдкрддреНрддрд╛ 0x08006ABE
) рдЖрдгрд┐ рдСрдкрд░реЗрд╢рди рдХрд░рд╛ рдХрд░реНрд╕рд░ рдкрд░реНрдпрдВрдд рдЪрд╛рд▓рд╡рд╛ (рдХреА F4).
рдкреБрдвреЗ, рдлрдВрдХреНрд╢рди рдПрдВрдЯрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА F7 рджрд╛рдмреВ рд╢рдХрддрд╛ рдореБрдЦреНрдп.
рдЖрдкрдг рдЖрджреЗрд╢ рдЪрд╛рд▓рд╡рд▓реНрдпрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрд░реВ рдареЗрд╡рд╛ (F9 рдХреА), рдирдВрддрд░ "рдХреГрдкрдпрд╛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛" рд╡рд┐рдВрдбреЛ рдПрдХрд╛ рдмрдЯрдгрд╛рд╕рд╣ рджрд┐рд╕реЗрд▓ рдирд┐рд▓рдВрдмрд┐рдд:
рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рджрд╛рдмрд╛рд▓ рдирд┐рд▓рдВрдмрд┐рдд рдлрд░реНрдорд╡реЗрдЕрд░ рдХреЛрдбрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдирд┐рд▓рдВрдмрд┐рдд рдХреЗрд▓реА рдЖрд╣реЗ рдЖрдгрд┐ рдХреЛрдбрдордзреАрд▓ рддреНрдпрд╛рдЪ рдкрддреНрддреНрдпрд╛рд╡рд░реВрди рд╕реБрд░реВ рдареЗрд╡рд▓реА рдЬрд╛рдК рд╢рдХрддреЗ рдЬрд┐рдереЗ рддреЛ рд╡реНрдпрддреНрдпрдп рдЖрд▓рд╛ рд╣реЛрддрд╛.
рддреБрдореНрд╣реА рдХреЛрдбрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╕реБрд░реВ рдареЗрд╡рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣рд╛рд▓рд╛ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ COM рдкреЛрд░реНрдЯрд╢реА рдХрдиреЗрдХреНрдЯ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЯрд░реНрдорд┐рдирд▓реНрд╕рдордзреНрдпреЗ рдЦрд╛рд▓реАрд▓ рдУрд│реА рджрд┐рд╕рддреАрд▓:
"рд╕реНрдЯреЗрдЯ рдмрд╛рдпрдкрд╛рд╕" рд▓рд╛рдЗрдирдЪреА рдЙрдкрд╕реНрдерд┐рддреА рджрд░реНрд╢рд╡рддреЗ рдХреА рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдмреНрд▓реВрдЯреВрде рдореЙрдбреНрдпреВрд▓ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ COM рдкреЛрд░реНрдЯрд╡рд░реВрди рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдореЛрдбрд╡рд░ рд╕реНрд╡рд┐рдЪ рдХреЗрд▓реЗ рдЖрд╣реЗ.
рдЖрддрд╛ рдмреНрд▓реВрдЯреВрде рдЯрд░реНрдорд┐рдирд▓рдордзреНрдпреЗ (рдЪрд┐рддреНрд░рд╛рдд COM29) рддреБрдореНрд╣реА Rhino рдкреНрд░реЛрдЯреЛрдХреЙрд▓рдиреБрд╕рд╛рд░ рдХрдорд╛рдВрдб рдЯрд╛рдХреВ рд╢рдХрддрд╛. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, тАЬMEOWтАЭ рдХрдорд╛рдВрдб рдмреНрд▓реВрдЯреВрде рдЯрд░реНрдорд┐рдирд▓рд╡рд░ тАЬmur-murтАЭ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд░рдд рдХрд░реЗрд▓:
рдорд╛рдЭреЗ рдЕрдиреБрдХрд░рдг рдкреВрд░реНрдгрдкрдгреЗ рдирд╛рд╣реА
рдПрдореБрд▓реЗрдЯрд░ рдмрдирд╡рддрд╛рдирд╛, рддреБрдореНрд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдХрд░рдгрд╛рдЪреНрдпрд╛ рддрдкрд╢реАрд▓/рдЗрдореНрдпреБрд▓реЗрд╢рдирдЪреА рдкрд╛рддрд│реА рдирд┐рд╡рдбреВ рд╢рдХрддрд╛. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдмреНрд▓реВрдЯреВрде рдореЙрдбреНрдпреВрд▓ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдкреНрд░рдХрд╛рд░реЗ рдЕрдиреБрдХрд░рдг рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ:
- рдХрдорд╛рдВрдбрдЪреНрдпрд╛ рд╕рдВрдкреВрд░реНрдг рд╕рдВрдЪрд╛рд╕рд╣ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рдкреВрд░реНрдгрдкрдгреЗ рдЕрдиреБрдХрд░рдг рдХреЗрд▓реЗ рдЖрд╣реЗ;
- AT рдЖрджреЗрд╢рд╛рдВрдЪреЗ рдЕрдиреБрдХрд░рдг рдХреЗрд▓реЗ рдЬрд╛рддреЗ рдЖрдгрд┐ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдореБрдЦреНрдп рдкреНрд░рдгрд╛рд▓реАрдЪреНрдпрд╛ COM рдкреЛрд░реНрдЯрд╡рд░реВрди рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЛ;
- рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рд▓рд╛ рд╕рдВрдкреВрд░реНрдг рдбреЗрдЯрд╛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ;
- рдПрдХ рд╕рд╛рдзрд╛ рд╕реНрдЯрдм рдореНрд╣рдгреВрди рдЬреЛ рдиреЗрд╣рдореА "рдУрдХреЗ" рдкрд░рдд рдХрд░рддреЛ.
рдПрдореБрд▓реЗрдЯрд░рдЪреА рд╡рд░реНрддрдорд╛рди рдЖрд╡реГрддреНрддреА рджреБрд╕рд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрди рд╡рд╛рдкрд░рддреЗ - рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдмреНрд▓реВрдЯреВрде рдореЙрдбреНрдпреВрд▓ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХрд░рддреЗ, рддреНрдпрд╛рдирдВрддрд░ рддреЗ рдореБрдЦреНрдп рд╕рд┐рд╕реНрдЯрдордЪреНрдпрд╛ COM рдкреЛрд░реНрдЯрд╡рд░реВрди рдПрдореБрд▓реЗрдЯрд░рдЪреНрдпрд╛ UART рдкреЛрд░реНрдЯрд╡рд░ рдбреЗрдЯрд╛ тАЬрдкреНрд░реЙрдХреНрд╕реАтАЭ рдореЛрдбрд╡рд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ.
рдкрд░рд┐рдШрд╛рдЪрд╛ рдХрд╛рд╣реА рднрд╛рдЧ рдЕрдВрдорд▓рд╛рдд рди рдЖрд▓реНрдпрд╛рд╕ рдХреЛрдбрдЪреНрдпрд╛ рд╕рд╛рдзреНрдпрд╛ рдЙрдкрдХрд░рдгрд╛рдЪреНрдпрд╛ рд╢рдХреНрдпрддреЗрдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдпрд╛. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, DMA рд▓рд╛ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЬрдмрд╛рдмрджрд╛рд░ рдЯрд╛рдпрдорд░ рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдирд╕рд▓реНрдпрд╛рд╕ (рддрдкрд╛рд╕рдгреА рдлрдВрдХреНрд╢рдирдордзреНрдпреЗ рдХреЗрд▓реА рдЬрд╛рддреЗ. ws2812b_waitрдпреЗрдереЗ рд╕реНрдерд┐рдд рдЖрд╣реЗ 0x08006840
), рдирдВрддрд░ рдлрд░реНрдорд╡реЗрдЕрд░ рдиреЗрд╣рдореА рдзреНрд╡рдЬ рд░реАрд╕реЗрдЯ рд╣реЛрдгреНрдпрд╛рдЪреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрд▓ рд╡реНрдпрд╕реНрддрдпреЗрдереЗ рд╕реНрдерд┐рдд рдЖрд╣реЗ 0x200004C4
рдЬреЗ DMA рдбреЗрдЯрд╛ рд▓рд╛рдЗрдирдЪреА рд╡реНрдпрд╛рдкреНрддреА рджрд░реНрд╢рд╡рддреЗ:
рдзреНрд╡рдЬ рд╕реНрд╡рд╣рд╕реНрддреЗ рд░реАрд╕реЗрдЯ рдХрд░реВрди рдЖрдореНрд╣реА рдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрддреВрди рдмрд╛рд╣реЗрд░ рдкрдбреВ рд╢рдХрддреЛ рд╡реНрдпрд╕реНрдд рддреЗ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рд▓рдЧреЗрдЪ. IDA Pro рдордзреНрдпреЗ, рддреБрдореНрд╣реА рдкрд╛рдпрдерди рдлрдВрдХреНрд╢рди рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рддреНрдпрд╛рд▓рд╛ рдмреНрд░реЗрдХрдкреЙрдИрдВрдЯрдордзреНрдпреЗ рдХреЙрд▓ рдХрд░реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдлреНрд▓реЕрдЧрд╡рд░ рд╡реНрд╣реЕрд▓реНрдпреВ 1 рд▓рд┐рд╣рд┐рд▓реНрдпрд╛рдирдВрддрд░ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реНрд╡рддрдГ рдХреЛрдбрдордзреНрдпреЗ рдареЗрд╡реВ рд╢рдХрддрд╛. рд╡реНрдпрд╕реНрдд.
рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╣рдБрдбрд▓рд░
рдкреНрд░рдердо, IDA рдордзреНрдпреЗ рдкрд╛рдпрдерди рдлрдВрдХреНрд╢рди рддрдпрд╛рд░ рдХрд░реВ. рдореЗрдиреВ рдлрд╛рдЗрд▓ - рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдорд╛рдВрдб...
рдбрд╛рд╡реАрдХрдбреАрд▓ рд╕реВрдЪреАрдордзреНрдпреЗ рдПрдХ рдирд╡реАрди рд╕реНрдирд┐рдкреЗрдЯ рдЬреЛрдбрд╛, рддреНрдпрд╛рд▓рд╛ рдПрдХ рдирд╛рд╡ рджреНрдпрд╛ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, BPT),
рдЙрдЬрд╡реАрдХрдбреАрд▓ рдордЬрдХреВрд░ рдлреАрд▓реНрдбрдордзреНрдпреЗ, рдлрдВрдХреНрд╢рди рдХреЛрдб рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рд╛:
def skip_dma():
print "Skipping wait ws2812..."
value = Byte(0x200004C4)
if value == 1:
PatchDbgByte(0x200004C4, 0)
return False
рддреНрдпрд╛рдирдВрддрд░ рдЖрдореНрд╣реА рджрд╛рдмрддреЛ рдЪрд╛рд▓рд╡рд╛ рдЖрдгрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдВрдбреЛ рдмрдВрдж рдХрд░рд╛.
рдЖрддрд╛ рдпреЗрдереЗ рдХреЛрдб рд╡рд░ рдЬрд╛рдКрдпрд╛ 0x0800688A
, рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рд╛ (F2 рдХреА), рддреЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рд╛ (рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рд╛...), рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдХрд╛рд░ Python рд╡рд░ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕ рд╡рд┐рд╕рд░реВ рдирдХрд╛:
рдЬрд░ рд╡рд░реНрддрдорд╛рди рдзреНрд╡рдЬ рдореВрд▓реНрдп рд╡реНрдпрд╕реНрдд 1 рдЪреНрдпрд╛ рдмрд░реЛрдмрд░реАрдЪреЗ рдЖрд╣реЗ, рддрд░ рддреБрдореНрд╣реА рдлрдВрдХреНрд╢рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ skip_dma рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдУрд│реАрдд:
рддреБрдореНрд╣реА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╕рд╛рдареА рдлрд░реНрдорд╡реЗрдЕрд░ рдЪрд╛рд▓рд╡рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣реА IDA рд╡рд┐рдВрдбреЛрдордзреНрдпреЗ рдмреНрд░реЗрдХрдкреЙрдИрдВрдЯ рд╣рдБрдбрд▓рд░ рдХреЛрдбрдЪреЗ рдЯреНрд░рд┐рдЧрд░рд┐рдВрдЧ рдкрд╛рд╣реВ рд╢рдХрддрд╛. рдЙрддреНрдкрд╛рджрди рдУрд│реАрдиреБрд╕рд╛рд░ Skipping wait ws2812...
. рдЖрддрд╛ рдлрд░реНрдорд╡реЗрдЕрд░ рдзреНрд╡рдЬ рд░реАрд╕реЗрдЯ рд╣реЛрдгреНрдпрд╛рдЪреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдгрд╛рд░ рдирд╛рд╣реА рд╡реНрдпрд╕реНрдд.
рдПрдореБрд▓реЗрдЯрд░рд╕рд╣ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рдж
рдЕрдиреБрдХрд░рдгрд╛рдЪреНрдпрд╛ рдлрд╛рдпрджреНрдпрд╛рд╕рд╛рдареА рдЕрдиреБрдХрд░рдг рдХреЗрд▓реНрдпрд╛рдиреЗ рдЖрдирдВрдж рдЖрдгрд┐ рдЖрдирдВрдж рдорд┐рд│рдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рдирд╛рд╣реА. рдЬрд░ рдПрдореБрд▓реЗрдЯрд░ рд╕рдВрд╢реЛрдзрдХрд╛рд▓рд╛ рдореЗрдорд░реАрдордзреАрд▓ рдбреЗрдЯрд╛ рдкрд╛рд╣рдгреНрдпрд╛рд╕ рдХрд┐рдВрд╡рд╛ рдереНрд░реЗрдбреНрд╕рдЪрд╛ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рдж рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдорджрдд рдХрд░рдд рдЕрд╕реЗрд▓ рддрд░ рддреЗ рдЕрдзрд┐рдХ рдордиреЛрд░рдВрдЬрдХ рдЖрд╣реЗ.
RTOS рдЯрд╛рд╕реНрдХрдордзреНрдпреЗ рдбрд╛рдпрдиреЕрдорд┐рдХрд▓реА рд╕рдВрд╡рд╛рдж рдХрд╕рд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛рдпрдЪрд╛ рддреЗ рдЖрдореНрд╣реА рддреБрдореНрд╣рд╛рд▓рд╛ рджрд╛рдЦрд╡реВ. рдХреЛрдб рдЪрд╛рд▓реВ рдЕрд╕рд▓реНрдпрд╛рд╕ рддреБрдореНрд╣реА рдкреНрд░рдердо рддреНрдпрд╛рдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдерд╛рдВрдмрд╡рд╛рд╡реА. рдлрдВрдХреНрд╢рдирд▓рд╛ рдЧреЗрд▓рд╛рдд рддрд░ bluetooth_task_entry "LED" рдХрдорд╛рдВрдбрдЪреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢рд╛рдЦреЗрдХрдбреЗ (рдкрддреНрддрд╛ 0x080057B8
), рдирдВрддрд░ рдЖрдкрдг рдкрд╛рд╣реВ рд╢рдХрддрд╛ рдХреА рдкреНрд░рдердо рдХрд╛рдп рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЖрд╣реЗ рдЖрдгрд┐ рдирдВрддрд░ рд╕рд┐рд╕реНрдЯрдо рд░рд╛рдВрдЧреЗрдд рдкрд╛рдард╡рд┐рд▓реЗ рдЖрд╣реЗ ledControlQueueHandle рдХрд╛рд╣реА рд╕рдВрджреЗрд╢.
рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХреЗрд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ ledControlQueueHandleрдпреЗрдереЗ рд╕реНрдерд┐рдд рдЖрд╣реЗ 0x20000624
рдЖрдгрд┐ рдХреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреЗ рд╕реБрд░реВ рдареЗрд╡рд╛:
рдкрд░рд┐рдгрд╛рдореА, рд╕реНрдЯреЙрдк рдкреНрд░рдердо рдкрддреНрддреНрдпрд╛рд╡рд░ рдпреЗрдИрд▓ 0x080057CA
рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА osMailAlloc, рдирдВрддрд░ рдкрддреНрддреНрдпрд╛рд╡рд░ 0x08005806
рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА osMailPut, рдирдВрддрд░ рдереЛрдбреНрдпрд╛ рд╡реЗрд│рд╛рдиреЗ - рдкрддреНрддреНрдпрд╛рд╡рд░ 0x08005BD4
(рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА osMailGet), рдЬреЗ рдлрдВрдХреНрд╢рдирд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ leds_task_entry (рдПрд▓рдИрдбреА-рдЯрд╛рд╕реНрдХ), рдореНрд╣рдгрдЬреЗ, рдХрд╛рд░реНрдпреЗ рд╕реНрд╡рд┐рдЪ рдХреЗрд▓реА рдЧреЗрд▓реА рдЖрдгрд┐ рдЖрддрд╛ рдПрд▓рдИрдбреА-рдЯрд╛рд╕реНрдХрд╡рд░ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗ.
рдпрд╛ рд╕реЛрдкреНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рддреБрдореНрд╣реА RTOS рдХрд╛рд░реНрдпреЗ рдПрдХрдореЗрдХрд╛рдВрд╢реА рдХрд╕рд╛ рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрддрд╛рдд рд╣реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВ рд╢рдХрддрд╛.
рдЕрд░реНрдерд╛рдд, рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд, рдХрд╛рд░реНрдпрд╛рдВрдЪрд╛ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рдж рдЕрдзрд┐рдХ рдХреНрд▓рд┐рд╖реНрдЯ рдЕрд╕реВ рд╢рдХрддреЛ, рдкрд░рдВрддреБ рдПрдореБрд▓реЗрдЯрд░ рд╡рд╛рдкрд░реВрди, рдпрд╛ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рджрд╛рдЪрд╛ рдорд╛рдЧреЛрд╡рд╛ рдШреЗрдгреЗ рдХрдореА рдХрд╖реНрдЯрджрд╛рдпрдХ рд╣реЛрддреЗ.
Radare2 рд╕рд╣ рд▓рд╛рдБрдЪ рдХрд░рд╛
рдЖрдкрдг Radare2 рд╕рд╛рд░рдЦреНрдпрд╛ рд╕рд╛рд░реНрд╡рддреНрд░рд┐рдХ рд╕рд╛рдзрдирд╛рдХрдбреЗ рджреБрд░реНрд▓рдХреНрд╖ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА.
r2 рд╡рд╛рдкрд░реВрди рдЗрдореНрдпреБрд▓реЗрдЯрд░рд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдХрдорд╛рдВрдб рдЕрд╕реЗ рджрд┐рд╕реЗрд▓:
radare2 -A -a arm -b 16 -d gdb://localhost:23946 rhino_fw42k6.elf
рдЖрддрд╛ рдЙрдкрд▓рдмреНрдз рд▓рд╛рдБрдЪ (dc
) рдЖрдгрд┐ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд▓рд╛ рд╡рд┐рд░рд╛рдо рджреНрдпрд╛ (Ctrl+C).
рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рдпрд╛рдХреНрд╖рдгреА, рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░ gdb рд╕рд░реНрд╡реНрд╣рд░ рдЖрдгрд┐ рдореЗрдорд░реА рд▓реЗрдЖрдЙрдЯрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдирд╛ r2 рд▓рд╛ рд╕рдорд╕реНрдпрд╛ рдЖрд╣реЗрдд; рдпрд╛рдореБрд│реЗ, рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯреНрд╕ рдЖрдгрд┐ рд╕реНрдЯреЗрдкреНрд╕ рдХрд╛рд░реНрдп рдХрд░рдд рдирд╛рд╣реАрдд (рдЖрджреЗрд╢ ds
). рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА рд╣реЗ рд▓рд╡рдХрд░рдЪ рдирд┐рд╢реНрдЪрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓.
рдЧреНрд░рд╣рдг рд╕рд╣ рдзрд╛рд╡рдгреЗ
рдПрдореБрд▓реЗрдЯрд░ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкрд░реНрдпрд╛рдпрд╛рдВрдкреИрдХреА рдПрдХ рдореНрд╣рдгрдЬреЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рдЪреЗ рдлрд░реНрдорд╡реЗрдЕрд░ рдбреАрдмрдЧ рдХрд░рдгреЗ. рд╕реНрдкрд╖реНрдЯрддреЗрд╕рд╛рдареА, рдЖрдореНрд╣реА Rhino рдлрд░реНрдорд╡реЗрдЕрд░ рджреЗрдЦреАрд▓ рд╡рд╛рдкрд░реВ. рдЖрдкрдг рдлрд░реНрдорд╡реЗрдЕрд░ рд╕реНрд░реЛрдд рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реВ рд╢рдХрддрд╛
рдЖрдореНрд╣реА рд╕рдВрдЪрд╛рддреВрди рдЧреНрд░рд╣рдг IDE рдореНрд╣рдгреВрди рд╡рд╛рдкрд░реВ
рдЗрдореНрдпреБрд▓реЗрдЯрд░рдиреЗ рдереЗрдЯ рдЧреНрд░рд╣рдг рдордзреНрдпреЗ рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓реЗрд▓реЗ рдлрд░реНрдорд╡реЗрдЕрд░ рд▓реЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рдкреЕрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ firmware=null
рдПрдореБрд▓реЗрдЯрд░ рд▓рд╛рдБрдЪ рдХрдорд╛рдВрдбрд╡рд░:
binkopycat -g 23946 -n rhino -l user -y modules -p firmware=null,tty_dbg=COM26,tty_bt=COM28
рдбреАрдмрдЧ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╕реЗрдЯ рдХрд░рдд рдЖрд╣реЗ
Eclipse рдордзреНрдпреЗ, рдореЗрдиреВ рдирд┐рд╡рдбрд╛ рдЪрд╛рд▓рд╡рд╛ - рдбреАрдмрдЧ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди... рдЙрдШрдбрдгрд╛рд▒реНрдпрд╛ рд╡рд┐рдВрдбреЛрдордзреНрдпреЗ, рд╡рд┐рднрд╛рдЧрд╛рдд GDB рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░ рдбреАрдмрдЧрд┐рдВрдЧ рддреБрдореНрд╣рд╛рд▓рд╛ рдирд╡реАрди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЬреЛрдбрдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ, рдирдВрддрд░ "рдореБрдЦреНрдп" рдЯреЕрдмрд╡рд░ рдбреАрдмрдЧрд┐рдВрдЧрд╕рд╛рдареА рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХрд▓реНрдк рдЖрдгрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рд╛:
"рдбреАрдмрдЧрд░" рдЯреЕрдмрд╡рд░ рддреБрдореНрд╣рд╛рд▓рд╛ GDB рдХрдорд╛рдВрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:
${openstm32_compiler_path}arm-none-eabi-gdb
рдЖрдгрд┐ GDB рд╕рд░реНрд╡реНрд╣рд░ (рд╣реЛрд╕реНрдЯ рдЖрдгрд┐ рдкреЛрд░реНрдЯ) рд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рджреЗрдЦреАрд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рд╛:
"рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк" рдЯреЕрдмрд╡рд░, рддреБрдореНрд╣реА рдЦрд╛рд▓реАрд▓ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:
- рдЪреЗрдХрдмреЙрдХреНрд╕ рд╕рдХреНрд╖рдо рдХрд░рд╛ рдкреНрд░рддрд┐рдорд╛ рд▓реЛрдб рдХрд░рд╛ (рдЬреЗрдгреЗрдХрд░реБрди рдПрдХрддреНрд░рд┐рдд рдлрд░реНрдорд╡реЗрдЕрд░ рдкреНрд░рддрд┐рдорд╛ рдПрдореБрд▓реЗрдЯрд░рдордзреНрдпреЗ рд▓реЛрдб рдХреЗрд▓реА рдЬрд╛рдИрд▓);
- рдЪреЗрдХрдмреЙрдХреНрд╕ рд╕рдХреНрд╖рдо рдХрд░рд╛ рдЪрд┐рдиреНрд╣реЗ рд▓реЛрдб рдХрд░рд╛;
- рд▓реЙрдиреНрдЪ рдХрдорд╛рдВрдб рдЬреЛрдбрд╛:
set $pc = *0x08000004
(рдкреАрд╕реА рд░рдЬрд┐рд╕реНрдЯрд░рд▓рд╛ рдкрддреНрддреНрдпрд╛рд╡рд░реАрд▓ рдореЗрдорд░реАрдордзреАрд▓ рдореВрд▓реНрдпрд╛рд╡рд░ рд╕реЗрдЯ рдХрд░рд╛0x08000004
- рдкрддреНрддрд╛ рддреЗрдереЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдЖрд╣реЗ рд░реАрд╕реЗрдЯрд╣рдБрдбрд▓рд░).
рд▓рдХреНрд╖ рджреНрдпрд╛, рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ Eclipse рд╡рд░реВрди рдлрд░реНрдорд╡реЗрдЕрд░ рдлрд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рд╛рдпрдЪреА рдирд╕реЗрд▓, рддрд░ рдкрд░реНрдпрд╛рдп рдкреНрд░рддрд┐рдорд╛ рд▓реЛрдб рдХрд░рд╛ ╨╕ рдЖрджреЗрд╢ рдЪрд╛рд▓рд╡рд╛ рд╕реВрдЪрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА.
рдбреАрдмрдЧ рд╡рд░ рдХреНрд▓рд┐рдХ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рддреБрдореНрд╣реА рдбреАрдмрдЧрд░ рдореЛрдбрдордзреНрдпреЗ рдХрд╛рд░реНрдп рдХрд░реВ рд╢рдХрддрд╛:
- рд╕реНрдЯреЗрдк рдмрд╛рдп рд╕реНрдЯреЗрдк рдХреЛрдбрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА
- рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯреНрд╕рд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдд рдЖрд╣реЗ
рд╢реЗрд░рд╛. рдЧреНрд░рд╣рдг, рд╣рдореНрдо... рдХрд╛рд╣реА рд╡рд┐рдЪрд┐рддреНрд░ рдЧреЛрд╖реНрдЯреА рдЖрд╣реЗрдд... рдЖрдгрд┐ рддреБрдореНрд╣рд╛рд▓рд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕реЛрдмрдд рд░рд╛рд╣рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдбреАрдмрдЧрд░ рд╕реБрд░реВ рдХрд░рддрд╛рдирд╛ тАЬ0x0тА│ рд╕рд╛рдареА рдХреЛрдгрддрд╛рд╣реА рд╕реНрд░реЛрдд рдЙрдкрд▓рдмреНрдз рдирд╛рд╣реАтАЭ рдЕрд╕рд╛ рд╕рдВрджреЗрд╢ рджрд┐рд╕рдд рдЕрд╕рд▓реНрдпрд╛рд╕, рд╕реНрдЯреЗрдк рдХрдорд╛рдВрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рд╛ (F5)
рддреНрдпрд╛рдРрд╡рдЬреА рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖
рдореВрд│ рдХреЛрдбрдЪреЗ рдЕрдиреБрдХрд░рдг рдХрд░рдгреЗ рд╣реА рдПрдХ рдЕрддрд┐рд╢рдп рдордиреЛрд░рдВрдЬрдХ рдЧреЛрд╖реНрдЯ рдЖрд╣реЗ. рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рдбреЗрд╡реНрд╣рд▓рдкрд░рд▓рд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рд╢рд┐рд╡рд╛рдп рдлрд░реНрдорд╡реЗрдЕрд░ рдбреАрдмрдЧ рдХрд░рдгреЗ рд╢рдХреНрдп рд╣реЛрддреЗ. рд╕рдВрд╢реЛрдзрдХрд╛рд╕рд╛рдареА, рдбрд╛рдпрдиреЕрдорд┐рдХ рдХреЛрдбрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдгреНрдпрд╛рдЪреА рд╣реА рдПрдХ рд╕рдВрдзреА рдЖрд╣реЗ, рдЬреА рдПрдЦрд╛рджреНрдпрд╛ рдЙрдкрдХрд░рдгрд╛рд╕рд╣ рджреЗрдЦреАрд▓ рд╢рдХреНрдп рдирд╕рддреЗ.
рдЖрдореНтАНрд╣рд╛рд▓рд╛ рддрдЬреНрдЮрд╛рдВрдирд╛ рдЕрд╕реЗ рд╕рд╛рдзрди рдкреНрд░рджрд╛рди рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗ рдЬреЗ рд╕реЛрдпреАрдЪреЗ, рдорд╛рдлрдХ рдкреНрд░рдорд╛рдгрд╛рдд рд╕реЛрдкреЗ рдЖрд╣реЗ рдЖрдгрд┐ рд╕реЗрдЯ рдЕрдк рдЖрдгрд┐ рдЪрд╛рд▓рд╡рдгреНтАНрдпрд╛рд╕рд╛рдареА рдЦреВрдк рдореЗрд╣рдирдд рдЖрдгрд┐ рд╡реЗрд│ рд▓рд╛рдЧрдд рдирд╛рд╣реА.
рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░ рдПрдореБрд▓реЗрдЯрд░ рд╡рд╛рдкрд░реВрди рддреБрдордЪреНрдпрд╛ рдЕрдиреБрднрд╡рд╛рдмрджреНрджрд▓ рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдордзреНрдпреЗ рд▓рд┐рд╣рд╛. рдЖрдореНрд╣реА рддреБрдореНрд╣рд╛рд▓рд╛ рдЪрд░реНрдЪрд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддреЛ рдЖрдгрд┐ рдкреНрд░рд╢реНрдирд╛рдВрдЪреА рдЙрддреНрддрд░реЗ рджреЗрдгреНрдпрд╛рдд рдЖрдирдВрдж рд╣реЛрдИрд▓.
рдХреЗрд╡рд│ рдиреЛрдВрджрдгреАрдХреГрдд рд╡рд╛рдкрд░рдХрд░реНрддреЗрдЪ рд╕рд░реНрд╡реЗрдХреНрд╖рдгрд╛рдд рднрд╛рдЧ рдШреЗрдК рд╢рдХрддрд╛рдд.
рддреБрдореНрд╣реА рдПрдореБрд▓реЗрдЯрд░ рдХрд╢рд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рдд рдЖрд╣рд╛рдд?
-
рдореА рдлрд░реНрдорд╡реЗрдЕрд░ (рдбреАрдмрдЧ) рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЛ
-
рдореА рдлрд░реНрдорд╡реЗрдЕрд░рд╡рд░ рд╕рдВрд╢реЛрдзрди рдХрд░рдд рдЖрд╣реЗ
-
рдореА рдЦреЗрд│ рд▓рд╛рдБрдЪ рдХрд░рддреЛ (рдбреЗрдВрдбреА, рд╕реЗрдЧрд╛, рдкреАрдПрд╕рдкреА)
-
рджреБрд╕рд░реЗ рдХрд╛рд╣реАрддрд░реА (рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдордзреНрдпреЗ рд▓рд┐рд╣рд╛)
7 рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдиреА рдорддрджрд╛рди рдХреЗрд▓реЗ. 2 рд╡рд╛рдкрд░рдХрд░реНрддреЗ рджреВрд░ рд░рд╛рд╣рд┐рд▓реЗ.
рдореВрд│ рдХреЛрдбрдЪреЗ рдЕрдиреБрдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рдХреЛрдгрддреЗ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рд╡рд╛рдкрд░рддрд╛?
-
QEMU
-
рдпреБрдирд┐рдХреЙрд░реНрди рдЗрдВрдЬрд┐рди
-
рдЗрдЪреНрдЫреЗрдиреБрд╕рд╛рд░ рд╕реНрд╡рддрдГрдЪреЗ рд╕реНрд╡рд░реБрдк
-
рджреБрд╕рд░реЗ рдХрд╛рд╣реАрддрд░реА (рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдордзреНрдпреЗ рд▓рд┐рд╣рд╛)
6 рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдиреА рдорддрджрд╛рди рдХреЗрд▓реЗ. 2 рд╡рд╛рдкрд░рдХрд░реНрддреЗ рджреВрд░ рд░рд╛рд╣рд┐рд▓реЗ.
рддреБрдореНрд╣реА рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдПрдореБрд▓реЗрдЯрд░рдордзреНрдпреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рд╕реБрдзрд╛рд░рд╛рдпрдЪреЗ рдЖрд╣реЗ?
-
рдорд▓рд╛ рд╡реЗрдЧ рд╣рд╡рд╛ рдЖрд╣реЗ
-
рдорд▓рд╛ рд╕реЗрдЯрдЕрдк/рд▓рд╛рдБрдЪрдЪреА рд╕реБрд▓рднрддрд╛ рд╣рд╡реА рдЖрд╣реЗ
-
рдорд▓рд╛ рдПрдореБрд▓реЗрдЯрд░ (API, рд╣реБрдХ) рд╕рд╣ рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдгреНрдпрд╛рд╕рд╛рдареА рдЕрдзрд┐рдХ рдкрд░реНрдпрд╛рдп рд╣рд╡реЗ рдЖрд╣реЗрдд
-
рдореА рдкреНрд░рддреНрдпреЗрдХ рдЧреЛрд╖реНрдЯреАрдд рдЖрдирдВрджреА рдЖрд╣реЗ
-
рджреБрд╕рд░реЗ рдХрд╛рд╣реАрддрд░реА (рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдордзреНрдпреЗ рд▓рд┐рд╣рд╛)
8 рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдиреА рдорддрджрд╛рди рдХреЗрд▓реЗ. 1 рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рджреВрд░ рд░рд╛рд╣рд┐рд▓рд╛.
рд╕реНрддреНрд░реЛрдд: www.habr.com