
áĄá ááşá¸áĄááąá¸á áá áşá áááşáá áşáááŻááşá¸áĄááąááźááˇáş 0x0A DC7831 ááąááąáŹáşááŤááŽá 16 áááşááąáˇáá˝ááşá ááťá˝ááşáŻááşáááŻáˇáááş binary code emulation ááĄááźáąááśáá°ááťáŹá¸áážááˇáşááťá˝ááşáŻááşáááŻáˇááááŻááşáááŻááşáá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻáááŻááşááŹáĄá áŽáááşááśá Ꮰ- hardware platform emulator .
á¤ááąáŹááşá¸ááŤá¸áá˝ááş emulator áá˝ááş device firmware áááŻáááşáááŻáˇ run ááááşá debugger áážááˇáş áĄááźááşáĄáážááşáĄááťááŻá¸áááşááąáŹááşáážáŻááᯠáááŻááşááźááźáŽá¸ firmware á ááąá¸áááşááąáŹ dynamic analysis áááŻááŻááşááąáŹááşáááşááᯠá¤ááąáŹááşá¸ááŤá¸áá˝ááş ááąáŹáşááźááŤáááşá
á áąáŹáááŻááťá¸ááŹá
áááŻá¸áĄááąá¸á áááŤá¸áá˝áąáˇáááşá¸áážáŹ
áá˝ááşáá˛áˇááąáŹáážá áşáĄáááşá¸áááşá ááťá˝ááşáŻááşáááŻáˇáááŹááşáá˝á˛áááşá¸áá˝ááş á ááşáá ášá ááşá¸áá áşááŻá Firmware ááᯠá áŻáśá ááşá¸á á áşááąá¸áááş áááŻáĄááşááŤáááşá Firmware ááᯠááťáŻáśáˇááźáŽá¸ bootloader ááźááˇáş ááŻááşáááŻá¸ááŹá¸áááşá áá°áááş á¤áĄááŹááᯠáĄáá˝ááşáážáŻááşáá˝áąá¸ááąáŹáááşá¸ááźááˇáş ááźáŻááŻááşáá˛áˇááźáŽá¸ áážááşááŹááşáá˛áá˝ááş ááąááŹááťáŹá¸ááᯠáĄááźáááşááąáŤááşá¸ááťáŹá¸á á˝áŹ áá˝ážáąáˇááźáąáŹááşá¸ááąá¸áá˛áˇáááşá áááŻáˇááąáŹááş Firmware áááŻááşáááŻááşá áĄááśáá ášá ááşá¸ááťáŹá¸áážááˇáş áááşááźá˝á á˝áŹ ááŻáśáˇááźááşáá˛áˇáááşá á¤áĄááŹáĄáŹá¸ááŻáśá¸ááᯠMIPS core áá˝ááşáážááááşá
áááşáá˝ááşááťááşáĄááźáąáŹááşá¸áĄáááşá¸ááźáąáŹááˇáşá ááážááááŻááşááąáŹ emulator ááťáŹá¸áááş ááťá˝ááşáŻááşáááŻáˇáážááˇáş ááááŻááşááŽááąáŹáşáááşá¸á ááťá˝ááşáŻááşáááŻáˇáááş ááŻááşááᯠrun ááťááşááąá¸áááşá áááŻáˇááąáŹááş ááťá˝ááşáŻááşáááŻáˇáááş áĄááááˇáşááŻáśá¸ááŻááşááąáŹááşáááŻááşááźáŽá¸ áááşá firmware ááᯠááŻááşáááŻá¸áááŻááşá áąáááˇáş ááťá˝ááşáŻááşáááŻáˇááááŻááşáááŻááş emulator ááźáŻááŻááşáááş ááŻáśá¸ááźááşáá˛áˇáááşá ááťá˝ááşááąáŹáşáááŻáˇ á ááşá¸ááźááˇáşááąáŹáˇ áĄááŻááşááźá áşáá˝áŹá¸áááşá áááşá áááŻááşá¸áá˛ááᯠááŻááşááąáŹááşáááş áĄááśááááááŹááťáŹá¸ áááˇáşááťážááş ááŹááŻááşáááşáááşá¸áᯠááťá˝ááşáŻááşáááŻáˇ áá˝áąá¸áá˛áˇáááşá áĄáááşá¸áááŹááŤáá°á¸ - ááźáŽá¸áá˝áŹá¸ááŹáááşá¸ ááąáŹááşá¸ááŤáááşá ááťá˝ááşáŻááşáááŻáˇ áááşáá˝áąá¸ááźáŽá¸ ááźááˇáşá áŻáśááąáŹ emulator áá áşááŻááᯠááźáŻááŻááşáááş ááŻáśá¸ááźááşáá˛áˇáááşá
ááááşáážáŹ áá˝ááşááťá°ááŹá áá áş emulator ááźá áşáááşá .

ááŹááźáąáŹááˇáş Kopycat
á ááŹá¸ááŻáśá¸ááťáŹá¸ááąáŤáşáá˝ááş ááźááŹááşáá áşááŻáážááááşá
- copycat (áĄááşášáááááşá ááŹááş [ËkÉpÉŞkĂŚt]) - áĄááŻáá°áá°á áĄááŻáá°áá°á
- áá˝áąáŹááť (áĄááşášáááááşá ááŹááş [ËkĂŚt]) - ááźáąáŹááşá ááźáąáŹááş - áááąáŹááťááşáááşááŽá¸áá°áá˝áąáá˛á áĄááźááŻááşááŻáśá¸áááá ášááŹááş
- á áŹááŻáśá¸ "K" áááş Kotlin ááááŻááááşá¸áááşá¸ááŹááŹá ááŹá¸áážááźá áşáááşá
Copycat
emulator áááŻáááşááŽá¸ááąáŹáĄááŤá áĄáá˝ááşááááťááąáŹáááşá¸áááŻááşááťáŹá¸ááᯠáááşáážááşáá˛áˇáááş-
- áĄááśááááááŹááťáŹá¸á ááąáŹáşááťá°á¸ááťáŹá¸á ááááŻáááşáᏠcores áĄáá áşááťáŹá¸ááᯠááťááşááźááşá á˝áŹ áááşááŽá¸áááŻááşáážáŻá
- áĄááťááŻá¸ááťááŻá¸ááąáŹ modules ááťáŹá¸ááž virtual device áááŻá áŻááąá¸áááŻááşáážáŻá
- áááşáááˇáş binary data (firmware) áááŻáááᯠvirtual device ááážááşááŹááşáá˛áááŻáˇ load ááŻááşáááŻááşá á˝ááşá¸;
- ááťážááşáá áşááźááşáááŻááşááťááşááťáŹá¸ (á áá áşáĄááźáąáĄááąáááťážááşáá áşááźááşááŻáśááťáŹá¸) áážááˇáşáĄááŻááşááŻááşáááŻááşáážáŻá
- Built-in debugger áážááááˇáş emulator áážááˇáş áĄááźááşáĄáážááşááŻáśáˇááźááşáááŻááşáážáŻá
- ááąááşááŽáá˝áśáˇááźááŻá¸áááŻá¸áááşááąáŹ ááŹááŹá ááŹá¸ááąáŹááşá¸ááťáŹá¸á
ááááşáĄááąááźááˇáş Kotlin ááᯠáĄááąáŹááşáĄáááşááąáŹáşáááşáĄáá˝ááş áá˝áąá¸ááťááşááśáá˛áˇááááşá áááşá áşááŹá¸ááááŻááŹáááşáᏠ(á¤áááşáážáŹ ááąáŹáşááťá°á¸ááťáŹá¸áĄááťááşá¸ááťááşá¸ virtual data buses ááťáŹá¸áážááááˇáş áááşáá˝ááşáááˇáşáĄááŤ)á JSON ááᯠá ááşáá ášá ááşá¸ááąáŹáşááźááťááşááąáŹáşáááşáĄááźá áşá áážááˇáş GDB RSP áážááˇáş debugger áážááˇáşáĄááźááşáĄáážááşáááşááśáááşáĄáá˝ááş protocol áĄááźá áş GDB RSP áááŻáˇááźá áşáááşá
áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻáážáŹ áážá áşáážá áşááťáąáŹáşáááˇáşáᏠáážáááąá¸ááźáŽá¸ áááşááźá˝á á˝áŹ ááŻááşááąáŹááşááąááŤáááşá áááŻáĄááťáááşáĄááąáŹáĄáá˝ááşá¸ MIPSá x86á V850ESá ARM áážááˇáş PowerPC ááááŻáááşáᏠcore ááťáŹá¸ááᯠáĄááąáŹááşáĄáááşááąáŹáşáá˛áˇáááşá
áááąáŹááťááşáááş ááźáŽá¸áá˝áŹá¸ááŹáᏠáá°áĄááťáŹá¸ááᯠááťááşááťááşááźááˇáşááźááˇáşáááşááźáááş áĄááťáááşááťááąáŹááşááŹááźáŽááźá áşáááşá ááťá˝ááşáŻááşáááŻáˇáááş ááąáŹááşáááŻááşá¸áá˝ááş áááąáŹááťááşá áĄááąá¸á áááşááąáŹáşááźááťááşááᯠááŻááşááąáŹááşáááşááźá áşááąáŹáşáááşá¸ áááŻáĄááťáááşáá˝ááş Kopycat ááᯠáĄááŻáśá¸ááźáŻáááş áĄáŹááŻáśá ááŻááşááŤáááşá
á áááşááážááşáá°ááťáŹá¸áĄáá˝ááşá ááááŻáááŻá¸áážááşá¸ááŹá¸áážááşá¸ááᯠemulator ááž ááąáŤááşá¸ááŻááşááŻááşáááŻááşááŤáááşá .
emulator áá˝ááşááźáśáˇ
SMARTRHINO-2018 áá˝ááşááááˇáşáĄáá˝ááş áĄá áąáŹáááŻááşá¸áá˝ááş ááźáąáŹááşá¸ááźááşáĄááşááťááşááŽááŹá á˝ááşá¸áááşááᯠáááşááźáŹá¸áááşáĄáá˝ááş á ááşá¸áááşáááááᏠâááźáśáˇâ ááᯠáááşááŽá¸áá˛áˇááźáąáŹááşá¸ ááááááźááŤá ááŻáˇá Static Firmware áá˝á˛ááźááşá¸á áááşááźáŹáážáŻ ááŻááşáááşá¸á ááşááᯠááąáŹáşááźááŹá¸ááŤáááşá .
ááᯠ"á ááŽááŹááťáŹá¸" áááŻáááˇáşáá˝ááşá¸ááźáŽá¸ emulator áá˝ááş firmware ááᯠrun ááźááŤá ááŻáˇá
ááťááąáŹáşáááŻáˇáááŻáĄááşááŤáááş:
1) Java 1.8
2) Python áážááˇáş module emulator áá˛áážáŹ Python áááŻááŻáśá¸áááŻáˇá Jep module áá˛áˇ WHL build áĄáąáŹááşáážáŹ Windows áááŻááş .
áĄáá˝ááş Windows:
1)
2)
áĄáá˝ááş Linux:
1) áááŻáááş
áááşáááş Eclipseá IDA Pro áááŻáˇáááŻááş radare2 ááᯠGDB ááŻáśá¸á á˝á˛áá°áĄááźá áş áĄááŻáśá¸ááźáŻáááŻááşáááşá
áááşáááŻáĄááŻááşááŻááşááá˛
emulator áá˝ááş firmware áááŻááŻááşááąáŹááşáááşáĄáá˝ááşá ááááˇáşááááááŹá analogueááźá áşáááˇáş virtual device ááᯠ"á áŻááąá¸" áááş áááŻáĄááşááŤáááşá
ááááááŹáĄá á áş (âááźáśáˇâ) ááᯠáááąáŹááşááŻáśáá˝ááş ááźáááŻááşáááş-

emulator áá˝ááş modular áá˝á˛áˇá ááşá¸ááŻáśáážáááźáŽá¸ ááąáŹááşááŻáśá¸ virtual device ááᯠ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"]
]
}Parameter áááŻáĄáŹááŻáśá ááŻááşááŤá firmware ááᯠáĄáááŻááşá¸ ááąáŹááşááťáŹá¸ firmware áĄááźá áş virtual device áá˝ááşáááşáááŻááşááąáŹáááŻááşáá áşááŻááĄáááşááźá áşáááşá
virtual device áážááˇáş áááşááááşáááşáážáŻá áá áşáážááˇáş áááşá¸ááĄááźááşáĄáážááşáĄááťááŻá¸áááşááąáŹááşáážáŻááᯠáĄáąáŹááşááŤááŻáśááźááşá¸ááźááˇáş áááŻááşá áŹá¸ááźáŻáááŻááşáááş-

emulator á áááşáážáá ááşá¸áááşáážáŻ áĽáááŹáá˝ááş áááşá OS á COM port ááťáŹá¸ (ááá°á¸ááŻááş ááąáŹáşááťá°á¸áĄáá˝ááş áĄáážáŹá¸áĄáá˝ááşá¸ UART áážááˇáş UART) áážááˇáş áĄááźááşáĄáážááşáĄááťááŻá¸áááşááąáŹááşáážáŻ ááŤáááşáááşá áááşá¸áááŻáˇáááş á ááşáá ášá ááşá¸ááťáŹá¸áážááˇáş ááťáááşáááşááŹá¸áááˇáş áĄá á áşáĄáážááş port ááťáŹá¸ áááŻáˇáááŻááş virtual COM port ááťáŹá¸ááźá áşáááŻááşáááş (áááşá¸áĄáá˝ááş áááşááŹáááŻáĄááşáááşá com0com/socat).
ááąáŹááąáŹáááşáá˝ááş ááźááşáááž emulator áážááˇáş áĄááźááşáĄáážááşááŻáśáˇááźááşáááş áĄááááááşá¸áááşá¸áážá áşááŻáážááááşá
- GDB RSP ááááŻáááŻááąáŹ (áĄáááŻáĄáá á¤ááááŻáááŻááąáŹááᯠááśáˇáááŻá¸ááąá¸áááˇáş ááááááŹááťáŹá¸áážáŹ Eclipse / IDA / radare2);
- internal emulator command line (Argparse áááŻáˇáááŻááş Python)á
Virtual COM áĄááąáŤááşááťáŹá¸
terminal áážááááˇáş á ááşáá˝ááşá¸áážá ááááá ááşáá áşááŻá UART áážááˇáş áĄááźááşáĄáážááşááŻáśáˇááźááşáááşáĄáá˝ááşá áááşá ááş virtual COM ports áá áşá áŻáśááᯠáááşááŽá¸áááş áááŻáĄááşáááşá ááťá˝ááşáŻááşáááŻáˇááĄááźáąáĄááąáá˝ááşá ááááşáááşá¸áá áşááŻááᯠemulator áážáĄááŻáśá¸ááźáŻááźáŽá¸ ááŻááááá áşááŻááᯠterminal ááááŻááááş (PuTTY áááŻáˇáááŻááş screen) áážáĄááŻáśá¸ááźáŻáááş-

com0com ááᯠáĄááŻáśá¸ááźáŻ
Virtual COM port ááťáŹá¸ááᯠcom0com kit ááž setup utility ááᯠáĄááŻáśá¸ááźáŻá configure ááŻááşááŹá¸áááş (console version - C:Program Files (x86)com0comsetupŃ.exeá áááŻáˇáááŻááş GUI ááŹá¸áážááşá¸ - C:Program Files (x86)com0comsetupg.exe):

ááąáášááŹááťáŹá¸áááŻá á áşááąá¸ááŤá buffer overrun áááŻáá˝ááˇáşááŤá áááşááŽá¸ááŹá¸ááąáŹ virtual port ááťáŹá¸áĄáŹá¸ááŻáśá¸áĄáá˝ááşá áááŻááşááŤá emulator áááş COM port ááž ááŻáśáˇááźááşáážáŻááᯠá áąáŹááˇáşááááˇáşáááşá
socat áááŻáĄááŻáśá¸ááźáŻááźááşá¸á
UNIX á
áá
áşááťáŹá¸áá˝ááş socat utility áááŻáĄááŻáśá¸ááźáŻá emulator ááž virtual COM port ááťáŹá¸ááᯠáĄáááŻáĄááťáąáŹááşáááşááŽá¸ááąá¸ááŤáááşá áááşá¸áááŻááŻááşááąáŹááşáááşáĄáá˝ááşá emulator áááŻá
áááşááąáŹáĄá፠port name áá˝ááş prefix áááŻáááşáážááşááŻáśááŹááźá
áşáááşá socat:.
áĄáá˝ááşá¸áááŻááşá¸ áĄááááˇáşááąá¸á áŹááźáąáŹááşá¸ ááťááşáážáŹááźááş (Argparse áááŻáˇáááŻááş Python)
Kopycat áááş áá˝ááşáááŻá¸ááşáĄáááŽááąá¸áážááşá¸áá áşááŻááźá áşááąáŹááźáąáŹááˇáşá emulator áááş áááşá¸ááĄááŹááášááŻááťáŹá¸áážááˇáş variable ááťáŹá¸áážááˇáş áĄááźááşáĄáážááşááŻáśáˇááźááşáááşáĄáá˝ááş command line interface áá˝áąá¸ááťááşá ááŹáážá áşááŻááᯠááąá¸ááąáŹááşáááş- Argparse áážááˇáş Pythoná
Argparse áááş Kopycat áá˝ááşáááşááąáŹááşááŹá¸ááąáŹ CLI áá áşááŻááźá áşááźáŽá¸ áá°áááŻááşá¸áĄáá˝ááş áĄááźá˛áááşá¸áĄááŻáśá¸ááźáŻáááŻááşááŤáááşá
áĄááźáŹá¸áá˝áąá¸ááťááşá áᏠCLI áááş Python á ááŹá¸ááźááşááźá áşáááşá áááşá¸áááŻáĄááŻáśá¸ááźáŻáááşáĄáá˝ááş áááşáááş Jep Python module áááŻáááˇáşáá˝ááşá¸ááźáŽá¸ Python áážááˇáşáĄááŻááşááŻááşáááş emulator ááᯠconfigure ááŻááşáááş áááŻáĄááşáááş (áĄááŻáśá¸ááźáŻáá°ááááşáá áá áşáá˝ááşáááˇáşáá˝ááşá¸ááŹá¸áááˇáş Python á ááŹá¸ááźááşááᯠáĄááŻáśá¸ááźáŻááŤáááş)á
Python module ááᯠJep áááˇáşáá˝ááşá¸ááźááşá¸á
áĄáąáŹááşáá˝ááş Linux Jep ááᯠpip áážáá áşáááˇáş áááˇáşáá˝ááşá¸áááŻááşáááş-
pip install jepJep ááᯠáĄáąáŹááşáážáŹ áááşáááşáááŻáˇ Windows ááźááŻáááşáááˇáşáá˝ááşá¸ááŹá¸ááááş Windows SDK áážááˇáş áááşáááŻááşáᏠMicrosoft Visual Studioá ááťá˝ááşáŻááşáááŻáˇáááş áááˇáşáĄáá˝ááş áĄááŹááťáŹá¸ááᯠáĄáááşá¸áááşáááŻáááŻáá˝ááşáá°áĄáąáŹááş ááźáŻááŻááşááąá¸ááŹá¸ááźáŽá¸ áááşáážá Python ááŹá¸áážááşá¸ááťáŹá¸áĄáá˝ááş JEP Windows, áááŻáˇááźáąáŹááˇáş module ááᯠáááŻááşáá áşááŻááž install ááŻááşáááŻááşáááş-
pip install jep-3.8.2-cp27-cp27m-win_amd64.whlJep áááşáááşáážáŻáááŻá á áşááąá¸áááşá áááşáááş command line áá˝ááş run áááşáááŻáĄááşáááş-
python -c "import jep"ááŻáśáˇááźááşáážáŻááźááˇáş áĄáąáŹááşááŤá áŹááᯠáááşááśáááŤáááş-
ImportError: Jep is not supported in standalone Python, it must be embedded in Java.áááˇáşá
áá
áşáĄáá˝ááş emulator batch áááŻááşáá˝ááş (copycat.bat - áááŻáˇ Windows, áááášáá°ááźáąáŹááş - áááŻáˇ Linux) áááˇáşáááşááťááşááťáŹá¸á
áŹáááşá¸áááŻáˇ DEFAULT_JVM_OPTS ááąáŹááşáááş parameter áá
áşááŻáááˇáşááŤá Djava.library.path â áááşá¸áá˝ááş áááˇáşáá˝ááşá¸ááŹá¸ááąáŹ Jep module áááŻáˇ áááşá¸ááźáąáŹááşá¸ááŤáááşááááşá
ááááşáĄááąáá˛áˇáĄáá˝ááş 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 ááᯠá áááşááźááşá¸
emulator áááş console JVM application áá áşááŻááźá áşáááşá áá˝ážááşáááşááźááşá¸ááᯠoperating system command line script (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 utility ááᯠáĄááŻáśá¸ááźáŻá
./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- GDB ááŹááŹáááŻáˇáááşááąáŹááşáááşáá˝ááˇáşáááˇáş TCP ááąáŤááşá-n rhinoâ áááşáá áá áş module ááĄáááş (á áŻááąá¸ááŹá¸ááąáŹááááááŹ);-l userâ áááşá module áááŻáážáŹáá˝áąáááş á áŹááźááˇáşáááŻááşáĄáááşá-y libraryâ á ááşáá˝ááşááŤáážáááąáŹ module ááťáŹá¸áááŻáážáŹáá˝áąáááşáááşá¸ááźáąáŹááşá¸áfirmwarerhino_pass.bin- firmware áááŻááşáááŻáˇáááşá¸ááźáąáŹááşá¸;- COM26 áážááˇáş COM28 ááťáŹá¸áááş virtual COM port ááťáŹá¸ááźá áşáááşá
ááááşáĄááąáá˛áˇ áĄááťááşááźááŤááááˇáşáááşá 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 firmware ááᯠáĄááŻáśá¸ááźáŻááŤáááşá (áááşááŹáĄááťááşáĄáááşááᯠáááŻááąááŹáá˝ááş ááááşá¸áááşá¸ááŹá¸áááşá)
áááşááŹáĄááťááşáĄáááşáááŤáᲠáááşá Firmware áááŻáááşá¸ áááşáĄááŻáśá¸ááźáŻáááŻááşááŤáááşá
IDA Pro áá˝ááş Kopycat áááŻáá˝ááˇáşááźáŽá¸ááąáŹááşá Debugger ááŽáá°á¸áá˝ááş áááŻááşááᯠâáĄáážáŹá¸áážáŹááźááşááááááŹááᯠááźáąáŹááşá¸ááŤ..."ááźáŽá¸ááąáŹáˇáá˝áąá¸"áĄááąá¸ááááşá¸ GDB áĄáážáŹá¸áážáŹááźááşâ . áááŻáˇááąáŹááş ááťáááşáááşáážáŻ-ááŽáá°á¸ááᯠáááşáážááşááŤá áĄáážáŹá¸áážáŹááźááşáá° - ááŻááşáááşá¸á ááş áá˝áąá¸ááťááşá ááŹááťáŹá¸...
áááşáááŻá¸ááťáŹá¸ááᯠáááşáážááşááŤ-
- ááťážáąáŹááşáá˝ážáŹ - áááşáááˇáşáááşáááŻá¸
- áááşááśáá°áĄáááş- 127.0.0.1 (áááŻáˇáááŻááş Kopycat ááŻááşááąáŹááşááąáááˇáş áĄááąá¸ááááşá¸á ááşá IP ááááşá áŹ)
- ááááşáááşá¸: 23946

ááᯠáĄáážáŹá¸áážáŹááźááşááźááşá¸áááŻááşááᯠááááŻááşááŤááźáŽ (F9 ááŽá¸)á
![]()
emulator áážá debugger module áááŻáˇááťáááşáááşáááş áááşá¸áááŻáážáááşááŤá IDA áááş áĄáážáŹá¸áážáŹááźááşááźááşá¸ááŻááşáááŻáˇ ááąáŹááşáá˝áŹá¸áááşá áĄáááŻáááşá¸áááŻá¸ááťáŹá¸ ááážááááŻááşáááş- áážááşááŻáśáááşáážáŻááťáŹá¸áĄááźáąáŹááşá¸ áĄááťááşáĄáááşá stack áĄááźáąáŹááşá¸á
ááᯠááťá˝ááşáŻááşáááŻáˇáááş áĄáážáŹá¸áážáŹááźááşááááááŹá á áśáĄááşášááŤáááşáĄáŹá¸ááŻáśá¸ááᯠááŻáśá¸áááŻááşáááş-
- áá˝ážááşááźáŹá¸ááťááşááťáŹá¸ááᯠáĄáááˇáşáááˇáşááŻááşááąáŹááşááźááşá¸ (áááŻáˇáĄáááˇáş и áĄáááˇáşááťáąáŹáş - ááąáŹáˇ F7 áážááˇáş F8 áĄááŽá¸ááŽá¸);
- áá˝ááşááťááşáážáŻááᯠá áááşááźááşá¸áážááˇáş ááąáášááááşááźááşá¸á
- ááŻááşáážááˇáş ááąáᏠ(F2 ááąáŹáˇ) áážá áşááŻá ááŻáśá¸áĄáá˝ááş breakpoints ááťáŹá¸ááᯠáááşááŽá¸ááźááşá¸á
áĄáážáŹá¸áážáŹááźááşááááááŹáááŻáˇ ááťáááşáááşááźááşá¸áááş ááŹááşá¸áá˛ááşááŻááşááᯠááŻááşááąáŹááşááźááşá¸áᯠááááŻáááŻááŤá áááşáážáááŻááşááąáŹááşáážáŻáĄááąáĄááŹá¸áááş ááááşá
áŹááźá
áşááááşá 0x08006A74 - ááŻááşááąáŹááşááťááşá
áááşááźááşá¸á Reset_Handler. á
áŹáááşá¸ááᯠáĄáąáŹááşáááŻáˇ áá˝ážáąáˇááŤáá ááŻááşááąáŹááşááťááşááąáŤáşáááŻáážáŻááᯠáááşáá˝áąáˇááźááşáááŻááşááŤáááşá áĄááá. á¤á
áŹááźáąáŹááşá¸ááąáŤáşáá˝ááş ááŹááŹááᯠáááşááŹá¸áááŻááşáááş (ááááşá
Ꮰ0x08006ABE) áážááˇáş ááŻááşááąáŹááşááťááşááᯠááŻááşááąáŹááşááŤá cursor áĄáá ááźáąá¸ááŤá (ááąáŹáˇ F4)á

áááŻáˇááąáŹááş ááŻááşááąáŹááşááťááşááᯠáááşááąáŹááşáááş F7 ááᯠáážáááşáááŻááşáááşá áĄááá.
áááşá command ááᯠrun ááŻááşáááşá¸á ááşááᯠáááşááŻááşááŤá (F9 ááąáŹáˇ)á áááŻáˇááąáŹááş âááąáášáá áąáŹááˇáşááŤâ áááşá¸áááŻá¸áááş áááŻááşáá áşááťááşááźááˇáş ááąáŤáşááŹááááˇáşáááşá áááşáááŻááşá¸ááŹá¸:

áážáááşáááŻááşááŹáá˛áˇ áááşáááŻááşá¸ááŹá¸ Firmware ááŻááşá ááŻááşááąáŹááşáážáŻááᯠáááŻááşá¸ááśáˇááŹá¸ááźáŽá¸ áááşá¸ááᯠáĄáážáąáŹááˇáşáĄáážááşááźá áşá áąáááˇáş ááŻááşáážá ááááşá áŹáá áşááŻáááşá¸ááž áááşáááşááŻááşááąáŹááşáááŻááşáááşá
áááşáááş ááŻááşááᯠáááşáááşááŻááşááąáŹááşááŤáá virtual COM port ááťáŹá¸áážááˇáş ááťáááşáááşááŹá¸ááąáŹ terminals ááťáŹá¸áá˝ááş áĄáąáŹááşááŤáááŻááşá¸ááťáŹá¸ááᯠáá˝áąáˇáááááˇáşáááş-


"state bypass" line ááážáąáˇáážáąáŹááşáá˝ááşáážáááąááźááşá¸áááş virtual Bluetooth module áááşáĄááŻáśá¸ááźáŻáá°á COM port áážááąááŹáááşááśááźááşá¸ááŻááşáááŻáˇááźáąáŹááşá¸áá˝áŹá¸áááşáááŻááąáŹáşááźáááşá
ááᯠBluetooth terminal (ááŻáśáá˝ááşááŤáážáááąáŹ COM29) áá˝ááş Rhino protocol áážááˇáşáĄáᎠcommand ááťáŹá¸áááŻáááŻááşáááˇáşáááŻááşááŤáááşá áĽáááŹáĄáŹá¸ááźááˇáşá "MEOW" áĄááááˇáşáááş "mur-mur" ááźááŻá¸ááᯠBluetooth terminal áááŻáˇááźááşááąá¸ááááˇáşáááş-

áĄááŻáá°á áᏠááŻáśá¸á áááŻááşááŤá
emulator áá áşááŻááᯠáááşááąáŹááşááąáŹáĄááŤá áááşáááş ááŽá¸ááźáŹá¸á ááşáá ášá ááşá¸áá áşááŻá áĄááąá¸á áááş/áĄááŻáá°áážáŻáĄáááˇáşááᯠáá˝áąá¸ááťááşáááŻááşáááşá áĽáááŹáĄáŹá¸ááźááˇáşá Bluetooth module ááᯠááá°ááŽááąáŹáááşá¸áááşá¸ááťáŹá¸ááźááˇáş áĄááŻáá°áááŻááşáááş-
- ááááááŹáĄáŹá¸ áĄááźááˇáşáĄá áĄááááˇáşááąá¸áážáŻááťáŹá¸ááźááˇáş áĄááźááˇáşáĄá áĄááŻáá°ááŤáááşá
- AT áĄááááˇáşááťáŹá¸ááᯠáĄááŻáá°áᏠáááşáá áá áşá COM port ááž ááąááŹá áŽá¸ááźáąáŹááşá¸ááᯠáááşááśááážááááşá
- virtual device áááş ááźáŽá¸ááźááˇáşá áŻáśááąáŹ data redirection ááᯠreal device áááŻáˇ ááśáˇáááŻá¸ááąá¸áááşá
- áĄááźá˛áááşá¸ "OK" ááźááşááąá¸áááˇáş áááŻá¸áážááşá¸ááąáŹ ááąáŹááşá¸ááŤá¸áááŻááźá áşáááşá
emulator ááááşáážáááŹá¸áážááşá¸áááş ááŻááááááşá¸áááşá¸áááŻáĄááŻáśá¸ááźáŻáááş - virtual Bluetooth module áááş configuration áááŻááŻááşááąáŹááşáááşá áááŻáˇááąáŹááş áááşáá áá áşá COM port ááž data ááťáŹá¸ááᯠ"proxying" mode áááŻáˇááźáąáŹááşá¸ááźáŽá¸ emulator á UART port áááŻáˇááźáąáŹááşá¸áááşá

áĄá
á˝ááşáĄááťáŹá¸á áĄá
áááşáĄáááŻááşá¸áĄááťááŻáˇááᯠáĄááąáŹááşáĄáááş áááąáŹáşááŤá ááŻááşá áááŻá¸áážááşá¸ááąáŹ ááááááŹáááşááŹááᏠááźá
áşáááŻááşááźáąááᯠááŻáśá¸áááşááźááˇáşááźááŤá
ááŻáˇá áĽáááŹáĄáŹá¸ááźááˇáşá DMA áááŻáˇ ááąááŹáá˝ážá˛ááźáąáŹááşá¸ááźááşá¸ááᯠááááşá¸ááťáŻááşáááş ááŹáááşáážááááˇáş áĄááťáááşáááŻááşá¸ááááááŹááᯠááááşááŽá¸ááŹá¸ááŤá (á
á
áşááąá¸áážáŻáááş ááŻááşááąáŹááşáážáŻáá˝ááş ááŻááşááąáŹááşáááş ws2812b_á
áąáŹááˇáşááŤááá˝ááşáááşáážááááşá 0x08006840) áááŻáˇááąáŹááş firmware áááş áĄááśáĄáŹá¸ ááźááşáááşáááşáážááşáááş áĄááźá˛áááşá¸á
áąáŹááˇáşáááŻááşá¸ááąáááşááźá
áşáááşá áĄááŻááşáážáŻááşáááşáá˝ááşáááşáážááááşá 0x200004C4áááşá¸áááş DMA ááąááŹáááŻááşá¸á ááááşá¸áááŻááşáážáŻááᯠááźááááş-

áĄááśááᯠáááŻááşáááŻááşááźááşáááşáááşáážááşááźááşá¸ááźááˇáş á¤áĄááźáąáĄááąáááŻáˇ ááťá˝ááşáŻááşáááŻáˇááąáŹááşáážááááŻááşáááşá áĄááŻááşáážáŻááşáááş áááşá¸ááᯠinstall ááźáŽá¸ááąáŹááşááťááşááťááşá¸á IDA Pro áá˝ááşá áááşáááş Python ááŻááşááąáŹááşááťááşááᯠáááşááŽá¸ááźáŽá¸ ááźááşáážááşáá áşááŻáá˝ááş ááąáŤáşáááŻáááŻááşááźáŽá¸ áááşáááŻá¸ 1 ááᯠáĄááśáá˝ááş ááąá¸ááŹá¸ááźáŽá¸ááąáŹááş breakpoint ááᯠááŻááşáá˝ááş áááŻááşáááŻááşáááˇáşáááŻááşáááşá áĄááŻááşáážáŻááşáááş.
Breakpoint áááŻááşáá˝ááşáá°
áĄáááşááŻáśá¸ IDA áážáŹ Python function áá áşááŻááᯠáááşááŽá¸ááźááˇáşááĄáąáŹááşá ááŽáá°á¸ áááŻááş - Script áĄááááˇáş...
áááşáááşáážá á
áŹáááşá¸áá˝ááş áĄáááŻáĄáá˝áŹáĄáá
áşáá
áşááŻááᯠáááˇáşááŤá áááşá¸ááᯠááŹáááşááąá¸ (áĽáááŹá BPT),
ááŹáááşáážá á
áŹááŹá¸áĄáá˝ááşáá˝ááş ááŻááşááąáŹááşááťááşááŻááşááᯠáááˇáşááŤ-
def skip_dma():
print "Skipping wait ws2812..."
value = Byte(0x200004C4)
if value == 1:
PatchDbgByte(0x200004C4, 0)
return False 
áĄá˛ááŽááąáŹááş ááťááąáŹáşáááŻáˇ áážáááşáááşá áá˝áąá¸áážáŹá¸ ááźáŽá¸ááťážááş script window áááŻááááşááŤá
áᲠááŻááşááśááŤááşááᯠáá˝áŹá¸ááźááˇáşááĄáąáŹááş 0x0800688Aáá˝á˛áážááşáá
áşáᯠáááşáážááşá፠(F2 ááąáŹáˇ)á áááşá¸ááźááşá፠(áĄááźáąáŹááşá¸áĄááŹááŽáá°á¸ ááźááşáážááşááᯠáááşá¸ááźááşááŤ...) ááŹááşáá˝ážááşá¸áĄááťááŻá¸áĄá
áŹá¸ááᯠPython áĄááźá
áş áááşáážááşáááş áááąáˇááŤáážááˇáşá


áááşáážá áĄááśáááşáááŻá¸ áááŻááťážááş áĄááŻááşáážáŻááşáááş 1 áážááˇáş ááŽááťážáááş á áááŻáˇááąáŹááş áááşáááş ááŻááşááąáŹááşááťááşááᯠááŻááşááąáŹááşáááˇáşáááşá skip_dma ááŹááşáá˝ážááşá¸áááŻááşá¸áá˝ááş-

áĄáááşá áááşáááş ááŻááşááąáŹááşááťááşáĄáá˝ááş firmware ááᯠrun ááŤáá breakpoint handler code á áĄá
ááťááŻá¸ááźááşá¸ááᯠIDA window áá˝ááş áá˝áąáˇááźááşáááŻááşáááş output áááŻááşá¸áĄáŹá¸ááźááˇáş Skipping wait ws2812.... ááᯠFirmware áááş áĄááśááᯠááźááşáááşáááşáážááşáááş á
áąáŹááˇáşáááşáááŻááşááŤá áĄááŻááşáážáŻááşáááş.
emulator áážááˇáşáĄááźááşáĄáážááşááŻáśáˇááźááşáážáŻ
áĄááŻáá°áááşáĄáááŻáˇáážáŹ áĄááŻáá°ááźááşá¸áááş ááťáąáŹáşáá˝ážááşáážáŻáážááˇáş áá˝ážááşáááşá¸áážáŻááᯠááźá áşá áąáááŻááşáá˝ááşááážáááŤá emulator áááş ááŻááąááŽáĄáŹá¸ áážááşááŹááşáá˛áá˝ááş ááąááŹááťáŹá¸ááᯠááźááşáááŻááşá áąáááş áááŻáˇáááŻááş thread ááťáŹá¸á áĄááźááşáĄáážááşáĄááťááŻá¸áááşááąáŹááşáážáŻááᯠáá°ááąáŹááşáááŻááşááťážááş áááŻáá áááşáááşá áŹá¸á ááŹááąáŹááşá¸ááŤáááşá
RTOS ááŻááşáááşá¸ááąáŹááşááŹááťáŹá¸ááźáŹá¸áá˝ááş áĄááşáááŻááşáĄáŹá¸áááŻááş áĄááźááşáĄáážááşááŻáśáˇááźááşááŻáśááᯠáááˇáşáĄáŹá¸ ááźáááŤáááşá áááşá¸áááş áĄááŻááşááŻááşááąááŤá ááŻááşáááŻááşááąáŹááşáážáŻááᯠáŚá¸á
á˝áŹááąáášááááşáááˇáşáááşá function áááŻááąáŹááşáá˝áŹá¸áááş bluetooth_task_entry âLEDâ áá˝ážááşááźáŹá¸ááťááşá ááŻááşááąáŹááşáá˛ááŹááá˝á˛áááŻáˇ (ááááşá
Ꮰ0x080057B8) áááŻáˇááąáŹááş áááşáááˇáşáĄááŹááᯠáááááŻáśá¸áááşááŽá¸ááźáŽá¸ á
áá
áşáááşá¸á
áŽáááŻáˇ ááąá¸áááŻáˇáááşááᯠáááşáá˝áąáˇáááŻááşááŤáááşá ledControlQueueHandle message áá
áşááťááŻáˇ

variable áááŻáááşááąáŹááşáááş breakpoint áá
áşááŻáááşáážááşááŹá¸áááˇáşáááşá ledControlQueueHandleáá˝ááşáááşáážááááşá 0x20000624 ááŻááşááᯠáááşáááşááŻááşááąáŹááşááŤ-

ááááşáĄááąááźááˇáş áááşáááˇáşááááˇáşááááşá
áŹáážáŹ ááááŚá¸á
á˝áŹ ááźá
áşááąáŤáşáááşááźá
áşáááşá 0x080057CA function áááŻáááąáŤáşáᎠosMailAllocááźáŽá¸ááąáŹáˇ ááááşá
áŹáážáŹ 0x08005806 function áááŻáááąáŤáşáᎠosMailPutáááĄááźáŹ - ááááşá
áŹáááŻáˇ 0x08005BD4 ( function áááŻáááąáŤáşáᎠosMailGet) function áážááˇáşáááşáááŻááşáááşá leds_task_entry (LED-task) áááŻáááŻáááşáážáŹ áĄááŻááşááťáŹá¸ááᯠááźáąáŹááşá¸áá˛áˇááźáŽá¸ ááᯠLED-task áááş ááááşá¸ááťáŻááşáážáŻááᯠáááşááśááážááá˛áˇáááşá

á¤áááŻá¸áážááşá¸ááąáŹáááşá¸áááşá¸ááźááˇáş RTOS áĄááŻááşááťáŹá¸áááş áĄááťááşá¸ááťááşá¸áĄááźááşáĄáážááşáĄááťááŻá¸áááşááąáŹááşááŻáśááᯠáááşáááşáážááşáááŻááşáááşá
áĄáážááşáážáŹá áĄááŻááşááťáŹá¸ááĄááźááşáĄáážááşáĄááźááşáĄáážááşáááşááśááąá¸áááşáááŻáááŻáážáŻááşáá˝áąá¸áááŻááşááąáŹáşáááşá¸ emulator áááŻáĄááŻáśá¸ááźáŻááźááşá¸ááźááˇáş á¤áĄááźááşáĄáážááşááŻáśáˇááźááşáážáŻáááŻááźáąááŹááśááźááşá¸áááş áááşáááşá¸áážáŻáááşá¸ááŤáááşá
emulator á áááşááźááşá¸áážááˇáş IDA Pro áážááˇáş áĄááźááşáĄáážááşááŻáśáˇááźááşááźááşá¸áááŻááşáᏠááŽááŽáááŻáĄáááŻááᯠáááşááźááˇáşáážáŻáááŻááşáááşá
Radare2 ááźááˇáş á áááşááŤá
Radare2 áá˛áˇáááŻáˇááąáŹ universal tool ááᯠáááş ááťá áşááťá°áážáŻáááááŤá
r2 ááᯠáĄááŻáśá¸ááźáŻá emulator áážááˇáş ááťáááşáááşáááşá command áááş á¤áá˛áˇáááŻáˇ ááźá áşáááş-
radare2 -A -a arm -b 16 -d gdb://localhost:23946 rhino_fw42k6.elfá
áááşáĄááŻáśá¸ááźáŻáááŻááşááŤááźáŽ (dc) áážááˇáş ááŻááşááąáŹááşááťááşááᯠááąáášááááşá፠(Ctrl+C)á
ááśáááąáŹááşá¸á
á˝áŹáá˛á ááąáŹááąáŹáááşáá˝ááş r2 áááş hardware gdb server áážááˇáş memory layout ááźááˇáşáĄááŻááşááŻááşááŹáá˝ááş ááźáżááŹááťáŹá¸áážáááąáááşá áááşá¸ááźáąáŹááˇáşá breakpoints áážááˇáş Steps ááťáŹá¸ áĄááŻááşáááŻááşá፠(command ds) ááŤááᯠáááźáŹáááşáážáŹ ááźáŻááźááşáááŻááşááááˇáşáááşáááŻáˇ ááťá˝ááşááąáŹáşáááŻáˇ ááťážáąáŹáşáááˇáşááŤáááşá
Eclipse ááźááˇáş ááźáąá¸ááźááşá¸á
emulator áááŻáĄááŻáśá¸ááźáŻááźááşá¸áĄáá˝ááş áá˝áąá¸ááťááşá ááŹááťáŹá¸áá˛ááž áá áşááŻáááş ááŽáá˝ááşááąááąáŹ device á firmware ááᯠdebug ááŻááşáááşááźá áşáááşá áážááşá¸áááşá¸áááşáĄáá˝ááşá ááťá˝ááşáŻááşáááŻáˇáááş Rhino firmware áááŻáááşá¸ áĄááŻáśá¸ááźáŻááŤáááşá Firmware áĄáááşá¸áĄááźá áşááťáŹá¸ááᯠáááşááąáŤááşá¸ááŻááşááŻááşáááŻááşááŤáááşá .
ááťá˝ááşáŻááşáááŻáˇáááş áááşáážááşáážáŻááž Eclipse ááᯠIDE áĄááźá áş áĄááŻáśá¸ááźáŻááŤáááşá .
emulator áááş Eclipse áá˝ááş á
áŻá
ááşá¸ááŹá¸ááąáŹ firmware ááᯠáááŻááşáááŻááşáááşáááŻááşá
áąáááşáĄáá˝ááş parameter áááŻáááˇáşáá˝ááşá¸áááşáááŻáĄááşáááş firmware=null emulator launch command áááŻáˇ
binkopycat -g 23946 -n rhino -l user -y modules -p firmware=null,tty_dbg=COM26,tty_bt=COM28áĄáážáŹá¸áážáŹááźááşáááşáážáŻááᯠá áá áşáááˇáşáá˝ááşá¸ááźááşá¸á
Eclipse áá˝ááş ááŽáá°á¸ááᯠáá˝áąá¸ááŤá Run - Debug Configurations... áá˝ááˇáşááŹááąáŹááźáááşá¸ááąáŤááşáá˝ááşá áĄáááŻááşá¸á GDB Hardware Debugging áááşáá˝á˛áˇá ááşá¸ááŻáśáĄáá áşáá áşááŻáááˇáşáááşáááŻáĄááşáááşá áááŻáˇááąáŹááş "áááşá" áááşááşáá˝ááş áááşáážááááąáŹááťááşáážááˇáş áĄáážáŹá¸áážáŹááźááşááźááşá¸áĄáá˝ááş áĄáááŽááąá¸áážááşá¸ááᯠáááşáážááşááŤ-

"Debugger" áááşááşáá˝ááş GDB áĄááááˇáşááᯠáááşáážááşáááş áááŻáĄááşáááş-
${openstm32_compiler_path}arm-none-eabi-gdb
GDB ááŹáᏠ(áĄáááşáážááşáážááˇáş áááŻáˇááş) áááŻáˇ ááťáááşáááşáááşáĄáá˝ááş áááˇáşáááşááťááşááťáŹá¸áááŻáááşá¸ áááˇáşáá˝ááşá¸ááŤá

"Startup" tab áá˝ááşá áááşáááş áĄáąáŹááşá፠parameters ááťáŹá¸ááᯠáááşáážááşáááŤáááşá
- checkbox áááŻáá˝ááˇáşááŤá ááŻáśáááşááŤá (áááŻáˇááźáąáŹááˇáş á áŻá ááşá¸ááŹá¸ááąáŹ Firmware ááŻáśáĄáŹá¸ emulator áá˛áááŻáˇ áááşááąá¸áá˝áŹá¸ááŤáááşá
- checkbox áááŻáá˝ááˇáşááŤá áááşášááąáááťáŹá¸ááᯠáááşááŤá;
- launch command áááŻáááˇáşááŤ
set $pc = *0x08000004(PC register ááᯠááááşá áŹáážá memory ááž áááşáááŻá¸áĄááźá áş áááşáážááşááŤá0x08000004- ááááşá áŹááᯠáĄá˛ááŽáážáŹ ááááşá¸ááŹá¸áááşá ResetHandler).
ááťáąá¸áá°á¸ááźáŻ. áááááźáŻááŤEclipse ááž firmware áááŻááşááᯠááąáŤááşá¸ááŻááşáááŻááşáááŻááŤáá áá˝áąá¸ááťááşá ááŹááťáŹá¸ ááŻáśáááşááŤá и áá˝ážááşááźáŹá¸ááťááşááťáŹá¸ááᯠááŻááşááąáŹááşááŤá ááąáŹáşááźáááşááááŻáĄááşááŤá

Debug áááŻáážáááşááźáŽá¸ááąáŹááşá áááşáááş áĄáážáŹá¸áážáŹááźááşááŻááşáá˝ááş áĄááŻááşááŻááşáááŻááşáááş-
- ááŻááşááᯠáĄáááˇáşáááˇáşááŻááşááąáŹááşááźááşá¸á

- breakpoints ááťáŹá¸áážááˇáş áĄááźááşáĄáážááşáááşááśááźááşá¸á

áá˝áąáŹáááŻ. Eclipse áážáŹ áá°á¸áá°á¸ááźáŹá¸ááźáŹá¸ áá°á¸áá°á¸ááźáŹá¸ááźáŹá¸ áá áşááťááŻáˇ áážáááŤáááş... áá°áááŻáˇáá˛áˇ áĄáá°ááąááááşá áĽáááŹáĄáŹá¸ááźááˇáşá áĄáážáŹá¸áážáŹááźááşááááááŹááᯠá áááşááąáŹáĄá፠â0x0â áĄáá˝ááş áĄáááşá¸áĄááźá áşááážáááąáŹ áááşááąáˇááťáş ááąáŤáşááŹááŤáá áááŻáˇááąáŹááş áĄáááˇáşáĄááááˇáşááąáŹáş (F5) ááᯠááŻááşááąáŹááşááŤá

áĄá˛ááŽáĄá áŹá¸áá áşáĽáŽá¸ááááŻáśá¸áááŻááşá¸á
áá°áááşá¸ááŻááşááᯠáĄááŻáá°ááźááşá¸áááş áĄáá˝ááşá áááşáááşá áŹá¸á ááŹááąáŹááşá¸ááąáŹ áĄááŹáá áşááŻááźá áşáááşá á ááşáá ášá ááşá¸ ááąáŹáˇááşáá˛áĄááşááťááşááŽááŹáááş á á áşáážááşááąáŹ ááááááŹáááŤáᲠfirmware ááᯠáĄáážáŹá¸áážáŹááźááşáááş ááźá áşáááŻááşáááşá ááŻááąááŽáá áşáŚá¸áĄáá˝ááşá áááşá¸áááş á ááşáá ášá ááşá¸áá áşááŻáážááˇáşáááş áĄááźá˛áááşá¸áááźá áşáááŻááşááąáŹ áááŻááşá¸ááá áşááŻááşáá˝á˛ááźááşá¸á áááşááźáŹáážáŻááᯠááŻááşááąáŹááşáááş áĄáá˝ááˇáşáĄááąá¸áá áşááŻááźá áşáááşá
ááťá˝ááşáŻááşáááŻáˇáááş ááťá˝ááşá¸ááťááşáá°ááťáŹá¸ááᯠáĄáááşááźáąááźáąá ááąáŹáşááŻáśáááşááŻáś áááŻá¸áááŻá¸áážááşá¸áážááşá¸áážááˇáş á áááşáááşáážááşáááşáážááˇáş ááŻááşááąáŹááşáááş áĄááťáááşááťáŹá¸á á˝áŹ á ááŻááşááŻááşáááş ááááŻáĄááşááąáŹ ááááááŹáá áşááŻááᯠááśáˇáááŻá¸ááąá¸áááŻááŤáááşá
Hardware emulators ááťáŹá¸áĄááŻáśá¸ááźáŻááźááşá¸áááŻááşáᏠáááˇáşáĄáá˝áąáˇáĄááźáŻáśáĄááźáąáŹááşá¸ áážááşááťááşááťáŹá¸áá˝ááş ááąá¸ááŤá áá˝áąá¸áá˝áąá¸áááş ááááşááąáŤáşááźáŽá¸ ááąá¸áá˝ááşá¸ááťáŹá¸ááᯠááťáąááťáąáááşáááş ááźáąááźáŹá¸ááąá¸ááŤáááşá
á áŹáááşá¸áá˝ááşá¸áĄááŻáśá¸ááźáŻáá°ááťáŹá¸áᏠá á áşáááşá¸áá˝ááş ááŤáááşáááŻááşááŤáááşá , ááťáąá¸áá°á¸ááźáŻá
áááş emulator ááᯠááŹáĄáá˝ááş ááŻáśá¸ááŹáá˛á
á፠(ááŽááŹááş) firmware ááᯠdevelop ááŻááşáááşá
Firmware áááŻááąáˇááŹááąááŤáááşá
ááááşá¸ááťáŹá¸ (Dendiá Segaá PSP) áááŻáá˝ááˇáşáááş
áĄááźáŹá¸áá áşááŻáᯠ(áážááşááťááşááťáŹá¸áá˝ááşááąá¸ááŤ)
áĄááŻáśá¸ááźáŻáá° ááá áŚá¸ áá˛ááąá¸áá˛áˇáááşá áĄááŻáśá¸ááźáŻáá° 7 áŚá¸ ááźáŹá¸ááąáá˛áˇááŤáááşá
áá°áááşá¸ááŻááşáááŻáĄááŻáá°áááş áááşáááˇáşááąáŹáˇááşáá˛ááşááᯠáĄááŻáśá¸ááźáŻááááşá¸á
Qemu
Unicorn áĄááşááťááş
Proteus
áĄááźáŹá¸áá áşááŻáᯠ(áážááşááťááşááťáŹá¸áá˝ááşááąá¸ááŤ)
áĄááŻáśá¸ááźáŻáá° ááá áŚá¸ áá˛ááąá¸áá˛áˇáááşá áĄááŻáśá¸ááźáŻáá° 6 áŚá¸ ááźáŹá¸ááąáá˛áˇááŤáááşá
áááşáĄááŻáśá¸ááźáŻááąááąáŹ emulator áá˝ááş áááşááŹááᯠááźážááˇáşáááşáááŻááááşá¸á
áĄáážáááşáááŻááťááşáááşá
á áá áşáááˇáşáá˝ááşá¸ááźááşá¸/áá˝ááˇáşááźááşá¸áááŻáˇááᯠáá˝ááşáá°á áąááŤáááşá
emulator (APIá ááťáááşááťáŹá¸) áážááˇáşáĄááźááşáĄáážááşáááşááśáááşáĄáá˝ááş ááąáŹááşáááşáá˝áąá¸ááťááşá ááŹááťáŹá¸ áááŻááťááşááŤáááş
áĄááŹááŹáááŻááşá¸ááᯠááťáąáŹáşáááşá
áĄááźáŹá¸áá áşááŻáᯠ(áážááşááťááşááťáŹá¸áá˝ááşááąá¸ááŤ)
áĄááŻáśá¸ááźáŻáá° áá áŚá¸ áá˛ááąá¸áá˛áˇáááşá áĄááŻáśá¸ááźáŻáá° 8 áŚá¸ áážáąáŹááşáá˛áˇáááşá
source: www.habr.com


