Π ΡΠ°ΠΌΠΊΠ°Ρ
Π²ΡΡΡΠ΅ΡΠΈ 0x0A DC7831
Π ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π² ΡΠΌΡΠ»ΡΡΠΎΡΠ΅, ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΎΠΌ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ.
ΠΡΠ΅Π΄ΡΡΡΠΎΡΠΈΡ
A long time ago in a galaxy far far away
ΠΠ°ΡΡ Π»Π΅Ρ Π½Π°Π·Π°Π΄ Π² Π½Π°ΡΠ΅ΠΉ Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠΈΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΠΈΠ²ΠΊΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°. ΠΡΠΎΡΠΈΠ²ΠΊΠ° Π±ΡΠ»Π° ΡΠΆΠ°ΡΠ°, ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π»Π°ΡΡ bootloader’ΠΎΠΌ. ΠΠ΅Π»Π°Π» ΠΎΠ½ ΡΡΠΎ Π²Π΅ΡΡΠΌΠ° Π·Π°ΠΌΠΎΡΠΎΡΠ΅Π½Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· ΠΏΠ΅ΡΠ΅ΠΊΠ»Π°Π΄ΡΠ²Π°Ρ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΏΠ°ΠΌΡΡΠΈ. ΠΠ° ΠΈ ΡΠ°ΠΌΠ° ΠΏΡΠΎΡΠΈΠ²ΠΊΠ° ΠΏΠΎΡΠΎΠΌ Π°ΠΊΡΠΈΠ²Π½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π»Π° Ρ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠ΅ΠΉ. Π Π²ΡΡ ΡΡΠΎ Π½Π° ΡΠ΄ΡΠ΅ MIPS.
ΠΠΌΠ΅ΡΡΠΈΠ΅ΡΡ ΡΠΌΡΠ»ΡΡΠΎΡΡ ΠΏΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ Π½Π°Ρ Π½Π΅ ΡΡΡΡΠΎΠΈΠ»ΠΈ, Π° Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π²ΡΡ-ΡΠ°ΠΊΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΊΠΎΠ΄. Π’ΠΎΠ³Π΄Π° ΡΠ΅ΡΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ²ΠΎΠΉ ΡΠΌΡΠ»ΡΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΄Π΅Π»Π°Π΅Ρ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²Π°ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΡΠΎΡΠΈΠ²ΠΊΡ. ΠΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°Π»ΠΈ β ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ. ΠΠΎΠ΄ΡΠΌΠ°Π»ΠΈ, Π° ΡΡΠΎ Π΅ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΡ, ΡΡΠΎΠ±Ρ Π΅ΡΠ΅ ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΡΠΎΡΠΈΠ²ΠΊΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ. ΠΡΠ»ΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ Π±ΠΎΠ»ΡΠ½ΠΎ β ΠΈ ΡΠΎΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ. Π‘Π½ΠΎΠ²Π° ΠΏΠΎΠ΄ΡΠΌΠ°Π»ΠΈ ΠΈ ΡΠ΅ΡΠΈΠ»ΠΈ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ ΡΠΌΡΠ»ΡΡΠΎΡ.
Π ΠΈΡΠΎΠ³Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΡΡ ΡΠΌΡΠ»ΡΡΠΎΡ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΡΠΈΡΡΠ΅ΠΌ
ΠΠΎΡΠ΅ΠΌΡ Kopycat?
ΠΠΌΠ΅Π΅Ρ ΠΌΠ΅ΡΡΠΎ ΠΈΠ³ΡΠ° ΡΠ»ΠΎΠ².
- copycat (Π°Π½Π³Π»., ΡΡΡ. [ΛkΙpΙͺkΓ¦t]) β ΠΏΠΎΠ΄ΡΠ°ΠΆΠ°ΡΠ΅Π»Ρ, ΠΈΠΌΠΈΡΠ°ΡΠΎΡ
- cat (Π°Π½Π³Π»., ΡΡΡ. [ΛkΓ¦t]) β ΠΊΠΎΡΠΊΠ°, ΠΊΠΎΡ β Π»ΡΠ±ΠΈΠΌΠΎΠ΅ ΠΆΠΈΠ²ΠΎΡΠ½ΠΎΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Π΅ΠΉ ΠΏΡΠΎΠ΅ΠΊΡΠ°
- ΠΡΠΊΠ²Π° «K» β ΠΎΡ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Kotlin
Kopycat
ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΌΡΠ»ΡΡΠΎΡΠ° ΡΡΠ°Π²ΠΈΠ»ΠΈΡΡ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ ΡΠ΅Π»ΠΈ:
- Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΡΡΡΡΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΡ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΡ, ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ΅ ΡΠ΄ΡΠΎ;
- Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ±ΡΠ°ΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΈΠ· ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ;
- Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°Π³ΡΡΠ·ΠΈΡΡ Π² ΠΏΠ°ΠΌΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π»ΡΠ±ΡΠ΅ Π΄Π²ΠΎΠΈΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ (ΠΏΡΠΎΡΠΈΠ²ΠΊΡ);
- Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΠ½Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ (ΡΠ½ΠΈΠΌΠΊΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ);
- Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΡΠΌΡΠ»ΡΡΠΎΡΠΎΠΌ ΡΠ΅ΡΠ΅Π· Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ;
- ΠΏΡΠΈΡΡΠ½ΡΠΉ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠ·ΡΠΊ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.
Π ΠΈΡΠΎΠ³Π΅, Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±ΡΠ» Π²ΡΠ±ΡΠ°Π½ Kotlin, ΡΠΈΠ½Π½Π°Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° (ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠ΄ΡΠ»ΠΈ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ΅ΡΠ΅Π· Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠΈΠ½Ρ Π΄Π°Π½Π½ΡΡ ), JSON β Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΎΡΠΌΠ°ΡΠ° ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΠΈ GDB RSP β Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΎΠΌ.
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ΄ΡΡ Π½Π° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π΄Π²ΡΡ Π»Π΅Ρ ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ. ΠΠ° ΡΡΠΎ Π²ΡΠ΅ΠΌΡ Π±ΡΠ»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΡΠ΅ ΡΠ΄ΡΠ° MIPS, x86, V850ES, ARM, PowerPC.
ΠΡΠΎΠ΅ΠΊΡ ΡΠ°ΡΡΠ΅Ρ, ΠΈ ΠΏΡΠΈΡΠ»ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ ΡΠΈΡΠΎΠΊΠΎΠΉ ΠΎΠ±ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΏΠΎΠ·ΠΆΠ΅, Π° ΡΠ΅ΠΉΡΠ°Ρ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΠΌΡΡ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Kopycat.
ΠΠ»Ρ ΡΠ°ΠΌΡΡ
Π½Π΅ΡΠ΅ΡΠΏΠ΅Π»ΠΈΠ²ΡΡ
β ΠΏΡΠΎΠΌΠΎ-Π²Π΅ΡΡΠΈΡ ΡΠΌΡΠ»ΡΡΠΎΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ ΠΏΠΎ
ΠΠΎΡΠΎΡΠΎΠ³ Π² ΡΠΌΡΠ»ΡΡΠΎΡΠ΅
ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΠ°Π½Π΅Π΅ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ SMARTRHINO-2018 Π±ΡΠ»ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΎ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ «ΠΠΎΡΠΎΡΠΎΠ³» Π΄Π»Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Π½Π°Π²ΡΠΊΠ°ΠΌ ΡΠ΅Π²Π΅ΡΡ-ΠΈΠ½ΠΆΠΈΠ½ΠΈΡΠΈΠ½Π³Π°. ΠΡΠΎΡΠ΅ΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ Π±ΡΠ» ΠΎΠΏΠΈΡΠ°Π½ Π²
Π’Π΅ΠΏΠ΅ΡΡ ΠΆΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ «Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ» ΠΈ Π·Π°ΠΏΡΡΡΠΈΠΌ ΠΏΡΠΎΡΠΈΠ²ΠΊΡ Π² ΡΠΌΡΠ»ΡΡΠΎΡΠ΅.
ΠΠ°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ:
1) Java 1.8
2) Python ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ
ΠΠ»Ρ Windows:
1)
2)
ΠΠ»Ρ Linux:
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"]
]
}
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ firmware Π² ΡΠ°Π·Π΄Π΅Π»Π΅ params β ΡΡΠΎ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³ΡΡΠΆΠ°ΡΡ Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ.
ΠΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΈ Π΅Π³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π²ΠΎΡ ΡΠ°ΠΊΠΎΠΉ ΡΡ Π΅ΠΌΠΎΠΉ:
Π’Π΅ΠΊΡΡΠΈΠΉ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΡΠΌΡΠ»ΡΡΠΎΡΠ° ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ COM-ΠΏΠΎΡΡΠ°ΠΌΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΠ‘ (ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΠΉ UART ΠΈ UART Π΄Π»Ρ Bluetooth-ΠΌΠΎΠ΄ΡΠ»Ρ). ΠΡΠΎ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ ΠΏΠΎΡΡΡ, ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΈΠ»ΠΈ ΠΆΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ COM-ΠΏΠΎΡΡΡ (Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΡΠ°Π· Π½ΡΠΆΠ΅Π½ com0com / socat).
ΠΠ»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΡΠΌΡΠ»ΡΡΠΎΡΠΎΠΌ ΠΈΠ·Π²Π½Π΅ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠΏΠΎΡΠΎΠ±Π°:
- ΠΏΡΠΎΡΠΎΠΊΠΎΠ» GDB RSP (ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠ΅ ΡΡΠΎΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ», ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ β Eclipse / IDA / radare2);
- Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ ΡΡΡΠΎΠΊΠ° ΡΠΌΡΠ»ΡΡΠΎΡΠ° (Argparse ΠΈΠ»ΠΈ Python).
ΠΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ COM-ΠΏΠΎΡΡΡ
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ UART-ΠΎΠΌ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΡΠΌΠΈΠ½Π°Π», Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠ°ΡΡ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ COM-ΠΏΠΎΡΡΠΎΠ². Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΡ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΡΠΌΡΠ»ΡΡΠΎΡ, Π° Π²ΡΠΎΡΠΎΠΉ β ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°-ΡΠ΅ΡΠΌΠΈΠ½Π°Π» (PuTTY ΠΈΠ»ΠΈ screen):
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ com0com
ΠΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ COM-ΠΏΠΎΡΡΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡΡΡ setup-ΡΡΠΈΠ»ΠΈΡΠΎΠΉ ΠΈΠ· ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ° com0com (ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½Π°Ρ Π²Π΅ΡΡΠΈΡ β C:Program Files (x86)com0comsetupΡ.exe, ΠΈΠ»ΠΈ GUI-Π²Π΅ΡΡΠΈΡ β C:Program Files (x86)com0comsetupg.exe):
Π‘Π»Π΅Π΄ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π³Π°Π»ΠΎΡΠΊΠΈ enable buffer overrun Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΏΠΎΡΡΠΎΠ², ΠΈΠ½Π°ΡΠ΅ ΡΠΌΡΠ»ΡΡΠΎΡ Π±ΡΠ΄Π΅Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΎΡΠΊΠ»ΠΈΠΊΠ° ΠΎΡ COM-ΠΏΠΎΡΡΠ°.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ socat
ΠΠ° UNIX-ΡΠΈΡΡΠ΅ΠΌΠ°Ρ
Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ COM-ΠΏΠΎΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΡΠΌΡΠ»ΡΡΠΎΡΠΎΠΌ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠΈΠ»ΠΈΡΡ socat, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠΌΡΠ»ΡΡΠΎΡΠ° Π² ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΡΡΠ° ΡΠΊΠ°Π·Π°ΡΡ ΠΏΡΠ΅ΡΠΈΠΊΡ socat:
.
ΠΠ½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ (Argparse ΠΈΠ»ΠΈ Python)
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Kopycat ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠΎ ΡΠ²ΠΎΠΈΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΡΠΌΡΠ»ΡΡΠΎΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄Π²Π° Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ: Argparse ΠΈ Python.
Argparse β ΡΡΠΎ CLI, Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π² Kopycat, ΠΎΠ½ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π²ΡΠ΅Π³Π΄Π° ΠΈ Π²ΡΠ΅ΠΌ.
ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΉ CLI β ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Python. ΠΠ»Ρ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Python-ΠΌΠΎΠ΄ΡΠ»Ρ Jep ΠΈ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠΌΡΠ»ΡΡΠΎΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Python (Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Python, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ).
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Python-ΠΌΠΎΠ΄ΡΠ»Ρ Jep
ΠΠΎΠ΄ Linux Jep ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΠ΅ΡΠ΅Π· pip:
pip install jep
ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Jep ΠΏΠΎΠ΄ Windows Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ 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.
Π ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΡΠΌΡΠ»ΡΡΠΎΡΠ° Π΄Π»Ρ Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ (kopycat.bat β Π΄Π»Ρ Windows, kopycat β Π΄Π»Ρ Linux) ΠΊ ΡΠΏΠΈΡΠΊΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² DEFAULT_JVM_OPTS
Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Djava.library.path
β ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΏΡΡΡ Π΄ΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Jep.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π΄Π»Ρ Windows Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ»ΡΡΠΈΡΡΡΡ ΡΡΡΠΎΠΊΠ° ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π²ΠΈΠ΄Π°:
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).
ΠΠΎΠΌΠ°Π½Π΄Π° Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΠΎΠ΄ Windows:
binkopycat -g 23946 -n rhino -l user -y library -p firmware=firmwarerhino_pass.bin,tty_dbg=COM26,tty_bt=COM28
ΠΠΎΠΌΠ°Π½Π΄Π° Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΠΎΠ΄ Linux Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠΈΠ»ΠΈΡΡ socat:
./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 Π΄Π»Ρ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΡΠΎΡΠΈΠ²ΠΊΡ Β«ΠΠΎΡΠΎΡΠΎΠ³Π°Β» Π² Π²ΠΈΠ΄Π΅
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΡΠΎΡΠΈΠ²ΠΊΡ Π±Π΅Π· ΠΌΠ΅ΡΠ°ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ.
ΠΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° Kopycat Π² IDA Pro Π² ΠΌΠ΅Π½Ρ Debugger ΠΈΠ΄ΡΠΌ Π² ΠΏΡΠ½ΠΊΡ «Switch debugger…» ΠΈ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ «Remote GDB debugger«. ΠΠ°Π»Π΅Π΅ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅: ΠΌΠ΅Π½Ρ Debugger β Process options…
Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
- Application β Π»ΡΠ±ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
- Hostname: 127.0.0.1 (ΠΈΠ»ΠΈ IP-Π°Π΄ΡΠ΅Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ, Π³Π΄Π΅ Π·Π°ΠΏΡΡΠ΅Π½ Kopycat)
- Port: 23946
Π’Π΅ΠΏΠ΅ΡΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΊΠ½ΠΎΠΏΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° ΠΎΡΠ»Π°Π΄ΠΊΠΈ (ΠΊΠ»Π°Π²ΠΈΡΠ° F9):
ΠΠ°ΠΆΠΈΠΌΠ°Π΅ΠΌ Π΅Ρ β ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ° Π² ΡΠΌΡΠ»ΡΡΠΎΡΠ΅. IDA ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠ΅ΠΆΠΈΠΌ ΠΎΡΠ»Π°Π΄ΠΊΠΈ, ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΠΊΠ½Π°: ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°Ρ , ΠΎ ΡΡΠ΅ΠΊΠ΅.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΎΠΌ:
- ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ (Step into ΠΈ Step over β ΠΊΠ»Π°Π²ΠΈΡΠΈ F7 ΠΈ F8, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ);
- Π·Π°ΠΏΡΡΠΊ ΠΈ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ;
- ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΎΡΠ΅ΠΊ ΠΎΡΡΠ°Π½ΠΎΠ²Π° ΠΊΠ°ΠΊ Π½Π° ΠΊΠΎΠ΄, ΡΠ°ΠΊ ΠΈ Π½Π° Π΄Π°Π½Π½ΡΠ΅ (ΠΊΠ»Π°Π²ΠΈΡΠ° F2).
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΡ Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠΎΠ΄Π° ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ. Π’Π΅ΠΊΡΡΠ΅ΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠ΅ΠΉ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π°Π΄ΡΠ΅Ρ 0x08006A74
β Π½Π°ΡΠ°Π»ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ Reset_Handler. ΠΡΠ»ΠΈ ΠΏΡΠΎΠΊΡΡΡΠΈΡΡ Π»ΠΈΡΡΠΈΠ½Π³ Π½ΠΈΠΆΠ΅, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ main. ΠΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΊΡΡΡΠΎΡ Π½Π° ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ (Π°Π΄ΡΠ΅Ρ 0x08006ABE
) ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Run until cursor (ΠΊΠ»Π°Π²ΠΈΡΠ° F4).
ΠΠ°Π»Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΆΠ°ΡΡ F7, ΡΡΠΎΠ±Ρ Π·Π°ΠΉΡΠΈ Π² ΡΡΠ½ΠΊΡΠΈΡ main.
ΠΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Continue process (ΠΊΠ»Π°Π²ΠΈΡΠ° F9), ΡΠΎ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΎΠΊΠ½ΠΎ «Please wait» Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ Suspend:
ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Suspend Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΎ Ρ ΡΠΎΠ³ΠΎ ΠΆΠ΅ Π°Π΄ΡΠ΅ΡΠ° Π² ΠΊΠΎΠ΄Π΅, Π³Π΄Π΅ Π±ΡΠ»ΠΎ ΠΏΡΠ΅ΡΠ²Π°Π½ΠΎ.
ΠΡΠ»ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, ΡΠΎ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°Ρ , ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π½ΡΡ ΠΊ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌ COM-ΠΏΠΎΡΡΠ°ΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ:
ΠΠ°Π»ΠΈΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ «state bypass» Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ Bluetooth-ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ» Π² ΡΠ΅ΠΆΠΈΠΌ ΠΏΡΠΈΡΠΌΠ° Π΄Π°Π½Π½ΡΡ ΠΎΡ COM-ΠΏΠΎΡΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
Π’Π΅ΠΏΠ΅ΡΡ Π² Bluetooth-ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅ (Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ β COM29) ΠΌΠΎΠΆΠ½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠΌ «ΠΠΎΡΠΎΡΠΎΠ³Π°». ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ «MEOW» Π² Bluetooth-ΡΠ΅ΡΠΌΠΈΠ½Π°Π» Π²Π΅ΡΠ½ΡΡΡΡ ΡΡΡΠΎΠΊΠ° «mur-mur»:
ΠΠΌΡΠ»ΠΈΡΡΠΉ ΠΌΠ΅Π½Ρ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ
ΠΡΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΈ ΡΠΌΡΠ»ΡΡΠΎΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΡΡΠ΅ΠΏΠ΅Π½Ρ Π΄Π΅ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ/ΡΠΌΡΠ»ΡΡΠΈΠΈ ΡΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π°. Π’Π°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠ΄ΡΠ»Ρ Bluetooth ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ:
- ΡΠΌΡΠ»ΠΈΡΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Ρ ΠΏΠΎΠ»Π½ΡΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄;
- ΡΠΌΡΠ»ΠΈΡΡΡΡΡΡ AT-ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π° ΠΏΠΎΡΠΎΠΊ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΡΡΡ Ρ COM-ΠΏΠΎΡΡΠ° ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ;
- Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ;
- Π² Π²ΠΈΠ΄Π΅ ΠΏΡΠΎΡΡΠΎΠΉ Π·Π°Π³Π»ΡΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ΅Π³Π΄Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ «OK».
Π ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ ΡΠΌΡΠ»ΡΡΠΎΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΡΠΎΡΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ β Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ Bluetooth-ΠΌΠΎΠ΄ΡΠ»Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠ΅ΠΆΠΈΠΌ «ΠΏΡΠΎΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ» Π΄Π°Π½Π½ΡΡ ΠΈΠ· COM-ΠΏΠΎΡΡΠ° ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π² UART-ΠΏΠΎΡΡ ΡΠΌΡΠ»ΡΡΠΎΡΠ°.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π° Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ ΡΠ°ΡΡΡ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π½Π΅ ΡΠΎΠ·Π΄Π°Π½ ΡΠ°ΠΉΠΌΠ΅Ρ, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠΉ Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ
Π² DMA (ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ ws2812b_wait, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ 0x08006840
), ΡΠΎ ΠΏΡΠΎΡΠΈΠ²ΠΊΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠ΅Π³Π΄Π° ΠΆΠ΄Π°ΡΡ ΡΠ±ΡΠΎΡΠ° ΡΠ»Π°Π³Π° busy, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ 0x200004C4
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π·Π°Π½ΡΡΠΎΡΡΡ Π»ΠΈΠ½ΠΈΠΈ Π΄Π°Π½Π½ΡΡ
DMA:
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΠΎΠΉΡΠΈ ΡΠ°ΠΊΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ ΠΏΡΡΡΠΌ «ΡΡΡΠ½ΠΎΠ³ΠΎ» ΡΠ±ΡΠΎΡΠ° ΡΠ»Π°Π³Π° busy ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ Π΅Π³ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ. Π IDA Pro ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Python-ΡΡΠ½ΠΊΡΠΈΡ ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡ Π΅Ρ Π² breakpoint’Π΅, ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠ°ΠΌ breakpoint ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ Π² ΠΊΠΎΠ΄Π΅ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΠΈΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ 1 Π²ΠΎ ΡΠ»Π°Π³ busy.
Breakpoint-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ
Π‘Π½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Python-ΡΡΠ½ΠΊΡΠΈΡ Π² IDA. ΠΠ΅Π½Ρ File β Script command…
ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΡΠ½ΠΈΠΏΠΏΠ΅Ρ Π² ΡΠΏΠΈΡΠΊΠ΅ ΡΠ»Π΅Π²Π°, Π΄Π°ΡΠΌ Π΅ΠΌΡ ΠΈΠΌΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, BPT),
Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅ ΡΠΏΡΠ°Π²Π° Π²Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΠ΄ ΡΡΠ½ΠΊΡΠΈΠΈ:
def skip_dma():
print "Skipping wait ws2812..."
value = Byte(0x200004C4)
if value == 1:
PatchDbgByte(0x200004C4, 0)
return False
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ Run ΠΈ Π·Π°ΠΊΡΡΠ²Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ ΡΠΊΡΠΈΠΏΡΠΎΠ².
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΡΠΌ Π² ΠΊΠΎΠ΄ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ 0x0800688A
, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ breakpoint (ΠΊΠ»Π°Π²ΠΈΡΠ° F2), ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠ΅ΠΌ Π΅Π³ΠΎ (ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠ΅ ΠΌΠ΅Π½Ρ Edit breakpointβ¦), Π½Π΅ Π·Π°Π±ΡΠ΄Π΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΈΠΏ ΡΠΊΡΠΈΠΏΡΠ° β Python:
ΠΡΠ»ΠΈ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π°Π³Π° busy ΡΠ°Π²Π½ΠΎ 1, ΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ skip_dma Π² ΡΡΡΠΎΠΊΠ΅ ΡΠΊΡΠΈΠΏΡΠΎΠ²:
ΠΡΠ»ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΡΠΈΠ²ΠΊΡ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΡΠΎ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° breakpoint-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π² IDA Π² ΠΎΠΊΠ½Π΅ Output ΠΏΠΎ ΡΡΡΠΎΠΊΠ΅ Skipping wait ws2812...
. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΡΠΈΠ²ΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΡΠ±ΡΠΎΡ ΡΠ»Π°Π³Π° busy.
ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΡΠΌΡΠ»ΡΡΠΎΡΠΎΠΌ
ΠΠΌΡΠ»ΡΡΠΈΡ ΡΠ°Π΄ΠΈ ΡΠΌΡΠ»ΡΡΠΈΠΈ Π²ΡΡΠ΄ Π»ΠΈ Π²ΡΠ·ΠΎΠ²Π΅Ρ Π²ΠΎΡΡΠΎΡΠ³ ΠΈ ΡΠ°Π΄ΠΎΡΡΡ. ΠΠΎΡΠ°Π·Π΄ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π΅Π΅, Π΅ΡΠ»ΠΈ ΡΠΌΡΠ»ΡΡΠΎΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ².
ΠΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ RTOS-ΡΠ°ΡΠΊΠΎΠ². ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ Π·Π°ΠΏΡΡΠ΅Π½ΠΎ. ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² ΡΡΠ½ΠΊΡΠΈΡ bluetooth_task_entry Π² Π²Π΅ΡΠΊΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ «LED » (Π°Π΄ΡΠ΅Ρ 0x080057B8
), ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΡΠ½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ, Π° ΠΏΠΎΡΠΎΠΌ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ledControlQueueHandle Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅.
Π‘Π»Π΅Π΄ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ breakpoint Π½Π° ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ledControlQueueHandle, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ 0x20000624
ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°:
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ ΠΎΡΡΠ°Π½ΠΎΠ² ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ 0x080057CA
ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ osMailAlloc, Π΄Π°Π»Π΅Π΅ β ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ 0x08005806
ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ osMailPut, ΠΏΠΎΡΠΎΠΌ ΡΠ΅ΡΠ΅Π· Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ β ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ 0x08005BD4
(ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ osMailGet), ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ leds_task_entry (LED-ΡΠ°ΡΠΊ), ΡΠΎ Π΅ΡΡΡ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΠΊΠΎΠ², ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠ» LED-ΡΠ°ΡΠΊ.
Π’Π°ΠΊΠΈΠΌ Π½Π΅Ρ ΠΈΡΡΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ, ΠΊΠ°ΠΊ ΡΠ°ΡΠΊΠΈ RTOS Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠ°ΡΠΊΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΡΡΠΎΠ΅Π½ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, Π½ΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΌΡΠ»ΡΡΠΎΡΠ° ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΡΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΌΠ΅Π½Π΅Π΅ ΡΡΡΠ΄ΠΎΠ΅ΠΌΠΊΠΎ.
ΠΠ°ΠΏΡΡΠΊ Ρ Radare2
ΠΠ΅Π»ΡΠ·Ρ ΠΎΠ±ΠΎΠΉΡΠΈ ΡΡΠΎΡΠΎΠ½ΠΎΠΉ ΡΠ°ΠΊΠΎΠΉ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΊΠ°ΠΊ Radare2.
ΠΠ»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ ΡΠΌΡΠ»ΡΡΠΎΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ r2 ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
radare2 -A -a arm -b 16 -d gdb://localhost:23946 rhino_fw42k6.elf
Π‘Π΅ΠΉΡΠ°Ρ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π·Π°ΠΏΡΡΠΊ (dc
) ΠΈ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (Ctrl+C).
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π² r2 Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Ρ
Π°ΡΠ΄Π²Π°ΡΠ½ΡΠΌ gdb-ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΊΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ, ΠΈΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΡΠΊΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²Π° ΠΈ Step’Ρ (ΠΊΠΎΠΌΠ°Π½Π΄Π° ds
). ΠΠ°Π΄Π΅Π΅ΠΌΡΡ, Π² Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ.
ΠΠ°ΠΏΡΡΠΊ Ρ Eclipse
ΠΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΌΡΠ»ΡΡΠΎΡΠ° β ΠΎΡΠ»Π°Π΄ΠΊΠ° ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π°. ΠΠ»Ρ Π½Π°Π³Π»ΡΠ΄Π½ΠΎΡΡΠΈ Π±ΡΠ΄Π΅ΠΌ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΠΈΠ²ΠΊΡ Β«ΠΠΎΡΠΎΡΠΎΠ³Π°Β». Π‘ΠΊΠ°ΡΠ°ΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ IDE Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Eclipse ΠΈΠ· Π½Π°Π±ΠΎΡΠ°
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π² ΡΠΌΡΠ»ΡΡΠΎΡ Π·Π°Π³ΡΡΠΆΠ°Π»Π°ΡΡ ΠΏΡΠΎΡΠΈΠ²ΠΊΠ° Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΎΠ±ΡΠ°Π½Π½Π°Ρ Π² Eclipse, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ firmware=null
Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠΌΡΠ»ΡΡΠΎΡΠ°:
binkopycat -g 23946 -n rhino -l user -y modules -p firmware=null,tty_dbg=COM26,tty_bt=COM28
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° debug-ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
Π Eclipse Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΌΠ΅Π½Ρ Run β Debug Configurations… Π ΠΎΡΠΊΡΡΠ²ΡΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ GDB Hardware Debugging Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ «Main» ΡΠΊΠ°Π·Π°ΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ:
ΠΠ° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ «Debugger» Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·Π°ΡΡ GDB-ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
${openstm32_compiler_path}arm-none-eabi-gdb
Π ΡΠ°ΠΊΠΆΠ΅ Π²Π²Π΅ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ GDB-ΡΠ΅ΡΠ²Π΅ΡΡ (Ρ ΠΎΡΡ ΠΈ ΠΏΠΎΡΡ):
ΠΠ° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ «Startup» Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
- Π²ΠΊΠ»ΡΡΠΈΡΡ Π³Π°Π»ΠΎΡΠΊΡ Load image (ΡΡΠΎΠ±Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΠ° Π² ΡΠΌΡΠ»ΡΡΠΎΡ ΡΠΎΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·Π° ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ);
- Π²ΠΊΠ»ΡΡΠΈΡΡ Π³Π°Π»ΠΎΡΠΊΡ Load symbols;
- Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π°ΠΏΡΡΠΊΠ°:
set $pc = *0x08000004
(Π²ΡΡΡΠ°Π²ΠΈΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡ PC Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ0x08000004
β ΡΠ°ΠΌ Ρ ΡΠ°Π½ΠΈΡΡΡ Π°Π΄ΡΠ΅Ρ ResetHandler’Π°).
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ Ρ ΠΎΡΠΈΡΠ΅ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΡΠ°ΠΉΠ» ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ ΠΈΠ· Eclipse, ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Load image ΠΈ Run commands ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ.
ΠΠΎΡΠ»Π΅ Π½Π°ΠΆΠ°ΡΠΈΡ Debug ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ°:
- ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°
- Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΡΠΎΡΠΊΠ°ΠΌΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²Π°
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅. Π Eclipse Π΅ΡΡΡ, Ρ ΠΌΠΌβ¦ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈβ¦ ΠΈ Ρ Π½ΠΈΠΌΠΈ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΆΠΈΡΡ. ΠΠΎΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ° ΠΏΠΎΡΠ²ΠΈΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ «No source available for «0x0″», ΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Step (F5)
ΠΠΌΠ΅ΡΡΠΎ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
ΠΠΌΡΠ»ΡΡΠΈΡ Π½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° β Π΄Π΅Π»ΠΎ Π²Π΅ΡΡΠΌΠ° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅. ΠΠ»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΡΡΡΠΎΠΉΡΡΠ² ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°ΡΡ ΠΏΡΠΎΡΠΈΠ²ΠΊΡ Π±Π΅Π· ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π°. ΠΠ»Ρ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Ρ β Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΠ΄Π°, ΡΡΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π°.
ΠΡ Ρ ΠΎΡΠΈΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠ°ΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» Π±Ρ ΡΠ΄ΠΎΠ±Π΅Π½, Π² ΠΌΠ΅ΡΡ ΠΏΡΠΎΡΡ ΠΈ Π½Π΅ ΠΎΡΠ½ΠΈΠΌΠ°Π» ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΈΠ» ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΡΠ²ΠΎΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ ΠΈ Π·Π°ΠΏΡΡΠΊ.
ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ ΠΎ ΡΠ²ΠΎΡΠΌ ΠΎΠΏΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΡ ΡΠΌΡΠ»ΡΡΠΎΡΠΎΠ². ΠΡΠΈΠ³Π»Π°ΡΠ°Π΅ΠΌ ΠΊ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ Π±ΡΠ΄Π΅ΠΌ ΡΠ°Π΄Ρ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π½Π° Π²ΠΎΠΏΡΠΎΡΡ.
Π’ΠΎΠ»ΡΠΊΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ ΡΡΠ°ΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΠΎΠΏΡΠΎΡΠ΅.
ΠΠ»Ρ ΡΠ΅Π³ΠΎ ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠΌΡΠ»ΡΡΠΎΡ?
-
ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Ρ (ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°Ρ) ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ
-
ΠΈΡΡΠ»Π΅Π΄ΡΡ ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ
-
Π·Π°ΠΏΡΡΠΊΠ°Ρ ΠΈΠ³ΡΡ (Dendi, Sega, PSP)
-
ΡΡΠΎ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠ΅ (Π½Π°ΠΏΠΈΡΠΈΡΠ΅ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ)
ΠΡΠΎΠ³ΠΎΠ»ΠΎΡΠΎΠ²Π°Π»ΠΈ 7 ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΠΎΠ·Π΄Π΅ΡΠΆΠ°Π»ΠΈΡΡ 2 ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
ΠΠ°ΠΊΠΎΠΉ ΡΠΎΡΡ ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π΄Π»Ρ ΡΠΌΡΠ»ΡΡΠΈΠΈ Π½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°?
-
QEMU
-
Unicorn engine
-
Proteus
-
ΡΡΠΎ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠ΅ (Π½Π°ΠΏΠΈΡΠΈΡΠ΅ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ)
ΠΡΠΎΠ³ΠΎΠ»ΠΎΡΠΎΠ²Π°Π»ΠΈ 6 ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΠΎΠ·Π΄Π΅ΡΠΆΠ°Π»ΠΈΡΡ 2 ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
Π§ΡΠΎ Π±Ρ ΠΠ°ΠΌ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ ΡΠ»ΡΡΡΠΈΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΌ ΡΠΌΡΠ»ΡΡΠΎΡΠ΅?
-
Ρ ΠΎΡΠ΅ΡΡΡ ΡΠΊΠΎΡΠΎΡΡΠΈ
-
Ρ ΠΎΡΠ΅ΡΡΡ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ/Π·Π°ΠΏΡΡΠΊΠ°
-
Ρ ΠΎΡΠ΅ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΡΠΌΡΠ»ΡΡΠΎΡΠΎΠΌ (API, Ρ ΡΠΊΠΈ)
-
ΠΌΠ΅Π½Ρ Π²ΡΡ ΡΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ
-
ΡΡΠΎ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠ΅ (Π½Π°ΠΏΠΈΡΠΈΡΠ΅ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ)
ΠΡΠΎΠ³ΠΎΠ»ΠΎΡΠΎΠ²Π°Π»ΠΈ 8 ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΠΎΠ·Π΄Π΅ΡΠΆΠ°Π»ΡΡ 1 ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com