ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

အစည်သအဝေသ၏ တစ်စိတ်တစ်ပိုင်သအနေဖဌင့် 0x0A DC7831 DEF CON Nizhny Novgorod ဖေဖော်ဝါရီလ 16 ရက်နေ့တလင်၊ ကျလန်ုပ်တို့သည် binary code emulation ၏အခဌေခံမူမျာသနဟင့်ကျလန်ုပ်တို့၏ကိုယ်ပိုင်ဖလံ့ဖဌိုသတိုသတက်မဟုဆိုင်ရာအစီရင်ခံစာ - hardware platform emulator Copycat.

ကဆောင်သပါသတလင် emulator တလင် device firmware ကိုမည်သို့ run ရမည်၊ debugger နဟင့် အပဌန်အလဟန်အကျိုသသက်ရောက်မဟုကို သရုပ်ပဌပဌီသ firmware ၏ သေသငယ်သော dynamic analysis ကိုလုပ်ဆောင်မည်ကို ကဆောင်သပါသတလင် ဖော်ပဌပါမည်။

စောပိုငျသကာလ

ဟိုသအဝေသက နဂါသငလေ့တန်သမဟာ

လလန်ခဲ့သောနဟစ်အနည်သငယ်က ကျလန်ုပ်တို့၏ဓာတ်ခလဲခန်သတလင် စက်ပစ္စည်သတစ်ခု၏ Firmware ကို စုံစမ်သစစ်ဆေသရန် လိုအပ်ပါသည်။ Firmware ကို ချုံ့ပဌီသ bootloader ဖဌင့် ထုပ်ပိုသထာသသည်။ သူသည် ကအရာကို အလလန်ရဟုပ်ထလေသသောနည်သဖဌင့် ပဌုလုပ်ခဲ့ပဌီသ မဟတ်ဉာဏ်ထဲတလင် ဒေတာမျာသကို အကဌိမ်ပေါင်သမျာသစလာ ရလဟေ့ပဌောင်သပေသခဲ့သည်။ ထို့နောက် Firmware ကိုယ်တိုင်က အရံပစ္စည်သမျာသနဟင့် တက်ကဌလစလာ တုံ့ပဌန်ခဲ့သည်။ ကအရာအာသလုံသကို MIPS core တလင်ရဟိသည်။

ရည်ရလယ်ချက်အကဌောင်သအရင်သကဌောင့်၊ ရရဟိနိုင်သော emulator မျာသသည် ကျလန်ုပ်တို့နဟင့် မကိုက်ညီသော်လည်သ၊ ကျလန်ုပ်တို့သည် ကုဒ်ကို run ချင်သေသသည်။ ထို့နောက် ကျလန်ုပ်တို့သည် အနိမ့်ဆုံသလုပ်ဆောင်နိုင်ပဌီသ ပင်မ firmware ကို ထုပ်ပိုသနိုင်စေမည့် ကျလန်ုပ်တို့၏ကိုယ်ပိုင် emulator ပဌုလုပ်ရန် ဆုံသဖဌတ်ခဲ့သည်။ ကျလန်တော်တို့ စမ်သကဌည့်တော့ အလုပ်ဖဌစ်သလာသတယ်။ ပင်မ ဖိုင်သဝဲကို လုပ်ဆောင်ရန် အရံကိရိယာမျာသ ထည့်လျဟင် ဘာလုပ်မည်နည်သဟု ကျလန်ုပ်တို့ တလေသခဲ့သည်။ အရမ်သမနာပါဘူသ - ပဌီသသလာသတာလည်သ ကောင်သပါတယ်။ ကျလန်ုပ်တို့ ထပ်တလေသပဌီသ ပဌည့်စုံသော emulator တစ်ခုကို ပဌုလုပ်ရန် ဆုံသဖဌတ်ခဲ့သည်။

ရလဒ်မဟာ ကလန်ပျူတာစနစ် emulator ဖဌစ်သည်။ Copycat.

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။
ဘာကဌောင့် Kopycat

စကာသလုံသမျာသပေါ်တလင် ပဌဇာတ်တစ်ခုရဟိသည်။

  1. copycat (အင်္ဂလိပ်၊ နာမ် [ˈkɒpɪkÊt]) - အတုယူသူ၊ အတုယူသူ၊
  2. ကလောငျ (အင်္ဂလိပ်၊ နာမ် [ˈkÊt]) - ကဌောင်၊ ကဌောင် - ပရောဂျက်ဖန်တီသသူတလေထဲက အကဌိုက်ဆုံသတိရစ္ဆာန်
  3. စာလုံသ "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 မဟ ဒေါင်သလုဒ်လုပ်နိုင်ပါသည်။ link ကို.

emulator တလင်ကဌံ့

SMARTRHINO-2018 ကလန်ဖရင့်အတလက် အစောပိုင်သတလင် ပဌောင်သပဌန်အင်ဂျင်နီယာစလမ်သရည်ကို သင်ကဌာသရန်အတလက် စမ်သသပ်ကိရိယာ “ကဌံ့” ကို ဖန်တီသခဲ့ကဌောင်သ သတိရကဌပါစို့။ Static Firmware ခလဲခဌမ်သစိတ်ဖဌာမဟု လုပ်ငန်သစဉ်ကို ဖော်ပဌထာသပါသည်။ ကဆောင်သပါသတလင်.

ယခု "စပီကာမျာသ" ကိုထည့်သလင်သပဌီသ emulator တလင် firmware ကို run ကဌပါစို့။

ကျနော်တို့လိုအပ်ပါတယ်:
1) Java 1.8
2) Python နဟင့် module ဂျစ် emulator အတလင်သရဟိ Python ကိုအသုံသပဌုရန်။ Windows အတလက် WHL module Jep ကို သင်တည်ဆောက်နိုင်ပါသည်။ ဒီမဟာဒေါင်သပါ။.

Windows အတလက်:
1) com0com
2) သေသငယ်သော

Linux အတလက်-
1) ဆိုကတ်

သင်သည် Eclipse၊ IDA Pro သို့မဟုတ် radare2 ကို GDB သုံသစလဲသူအဖဌစ် အသုံသပဌုနိုင်သည်။

ဘယ်လိုအလုပ်လုပ်သလဲ

emulator တလင် firmware ကိုလုပ်ဆောင်ရန်အတလက်၊ တကယ့်ကိရိယာ၏ analogueဖဌစ်သည့် virtual device ကို "စုဝေသ" ရန် လိုအပ်ပါသည်။

ကိရိယာအစစ် (“ကဌံ့”) ကို ဘလောက်ပုံတလင် ပဌနိုင်သည်-

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

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 နဟင့် ပင်မလည်ပတ်မဟုစနစ်နဟင့် ၎င်သ၏အပဌန်အလဟန်အကျိုသသက်ရောက်မဟုကို အောက်ပါပုံကဌမ်သဖဌင့် ကိုယ်စာသပဌုနိုင်သည်-

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

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) မဟအသုံသပဌုသည်-

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

com0com ကို အသုံသပဌု

Virtual COM port မျာသကို com0com kit မဟ setup utility ကို အသုံသပဌု၍ configure လုပ်ထာသသည် (console version - C:Program Files (x86)com0comsetupс.exe၊ သို့မဟုတ် GUI ဗာသရဟင်သ - C:Program Files (x86)com0comsetupg.exe):

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

သေတ္တာမျာသကိုစစ်ဆေသပါ။ 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 jep

Windows တလင် Jep ထည့်သလင်သရန်၊ Windows SDK နဟင့် သက်ဆိုင်ရာ Microsoft Visual Studio ကို ညသစလာ ထည့်သလင်သရပါမည်။ ကျလန်ုပ်တို့သည် သင့်အတလက် အနည်သငယ်ပိုမိုလလယ်ကူအောင် ပဌုလုပ်ထာသပါသည်။ WHL တည်ဆောက်သည်။ Windows အတလက် Python ၏ လက်ရဟိဗာသရဟင်သမျာသအတလက် JEP၊ ထို့ကဌောင့် module ကို ဖိုင်မဟ ထည့်သလင်သနိုင်သည်-

pip install jep-3.8.2-cp27-cp27m-win_amd64.whl

Jep တပ်ဆင်မဟုကိုစစ်ဆေသရန်၊ သင်သည် 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 အောက်တလင် run ရန် command

binkopycat -g 23946 -n rhino -l user -y library -p firmware=firmwarerhino_pass.bin,tty_dbg=COM26,tty_bt=COM28

socat utility ကိုအသုံသပဌု၍ Linux အောက်တလင် run ရန် command-

./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 ကို အသုံသပဌုပါသည်။ ELF ဖိုင် (မက်တာအချက်အလက်ကို ထိုနေရာတလင် သိမ်သဆည်သထာသသည်။)

မက်တာအချက်အလက်မပါဘဲ ပင်မ Firmware ကိုလည်သ သင်အသုံသပဌုနိုင်ပါသည်။

IDA Pro တလင် Kopycat ကိုဖလင့်ပဌီသနောက်၊ Debugger မီနူသတလင် ဖိုင်ကို “အမဟာသရဟာပဌင်ကိရိယာကို ပဌောင်သပါ..."ပဌီသတော့ရလေသ"အဝေသထိန်သ GDB အမဟာသရဟာပဌင်” . ထို့နောက် ချိတ်ဆက်မဟု-မီနူသကို သတ်မဟတ်ပါ။ အမဟာသရဟာပဌင်သူ - လုပ်ငန်သစဉ် ရလေသချယ်စရာမျာသ...

တန်ဖိုသမျာသကို သတ်မဟတ်ပါ-

  • လျဟောက်လလဟာ - မည်သည့်တန်ဖိုသ
  • လက်ခံသူအမည်- 127.0.0.1 (သို့မဟုတ် Kopycat လုပ်ဆောင်နေသည့် အဝေသထိန်သစက်၏ IP လိပ်စာ)
  • ဆိပ်ကမ်သ: 23946

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

ယခု အမဟာသရဟာပဌင်ခဌင်သခလုတ်ကို ရနိုင်ပါပဌီ (F9 ကီသ)။

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

emulator ရဟိ debugger module သို့ချိတ်ဆက်ရန် ၎င်သကိုနဟိပ်ပါ။ IDA သည် အမဟာသရဟာပဌင်ခဌင်သမုဒ်သို့ ရောက်သလာသသည်၊ အပိုဝင်သဒိုသမျာသ ရရဟိနိုင်သည်- မဟတ်ပုံတင်မဟုမျာသအကဌောင်သ အချက်အလက်၊ stack အကဌောင်သ။

ယခု ကျလန်ုပ်တို့သည် အမဟာသရဟာပဌင်ကိရိယာ၏ စံအင်္ဂါရပ်အာသလုံသကို သုံသနိုင်သည်-

  • ညလဟန်ကဌာသချက်မျာသကို အဆင့်ဆင့်လုပ်ဆောင်ခဌင်သ (သို့အဆင့် О အဆင့်ကျော် - သော့ F7 နဟင့် F8 အသီသသီသ);
  • ကလပ်မျက်မဟုကို စတင်ခဌင်သနဟင့် ခေတ္တရပ်ခဌင်သ၊
  • ကုဒ်နဟင့် ဒေတာ (F2 သော့) နဟစ်ခုစလုံသအတလက် breakpoints မျာသကို ဖန်တီသခဌင်သ။

အမဟာသရဟာပဌင်ကိရိယာသို့ ချိတ်ဆက်ခဌင်သသည် ဖာမ်သဝဲလ်ကုဒ်ကို လုပ်ဆောင်ခဌင်သဟု မဆိုလိုပါ။ လက်ရဟိလုပ်ဆောင်မဟုအနေအထာသသည် လိပ်စာဖဌစ်ရမည်။ 0x08006A74 - လုပ်ဆောင်ချက်စတင်ခဌင်သ။ Reset_Handler. စာရင်သကို အောက်သို့ ရလဟေ့ပါက၊ လုပ်ဆောင်ချက်ခေါ်ဆိုမဟုကို သင်တလေ့မဌင်နိုင်ပါသည်။ အဓိက. ကစာကဌောင်သပေါ်တလင် ကာဆာကို သင်ထာသနိုင်သည် (လိပ်စာ 0x08006ABE) နဟင့် လုပ်ဆောင်ချက်ကို လုပ်ဆောင်ပါ။ cursor အထိ ပဌေသပါ။ (သော့ F4)။

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

ထို့နောက် လုပ်ဆောင်ချက်ကို ဝင်ရောက်ရန် F7 ကို နဟိပ်နိုင်သည်။ အဓိက.

သင်က command ကို run လုပ်ငန်သစဉ်ကို ဆက်လုပ်ပါ။ (F9 သော့)၊ ထို့နောက် “ခေတ္တစောင့်ပါ” ဝင်သဒိုသသည် ခလုတ်တစ်ချက်ဖဌင့် ပေါ်လာလိမ့်မည်။ ရပ်ဆိုင်သထာသ:

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

နဟိပ်လိုက်တာနဲ့ ရပ်ဆိုင်သထာသ Firmware ကုဒ်၏ လုပ်ဆောင်မဟုကို ဆိုင်သငံ့ထာသပဌီသ ၎င်သကို အနဟောင့်အယဟက်ဖဌစ်စေသည့် ကုဒ်ရဟိ လိပ်စာတစ်ခုတည်သမဟ ဆက်လက်လုပ်ဆောင်နိုင်သည်။

သင်သည် ကုဒ်ကို ဆက်လက်လုပ်ဆောင်ပါက၊ virtual COM port မျာသနဟင့် ချိတ်ဆက်ထာသသော terminals မျာသတလင် အောက်ပါလိုင်သမျာသကို တလေ့ရလိမ့်မည်-

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

"state bypass" line ၏ရဟေ့မဟောက်တလင်ရဟိနေခဌင်သသည် virtual Bluetooth module သည်အသုံသပဌုသူ၏ COM port မဟဒေတာလက်ခံခဌင်သမုဒ်သို့ပဌောင်သသလာသသည်ကိုဖော်ပဌသည်။

ယခု Bluetooth terminal (ပုံတလင်ပါရဟိသော COM29) တလင် Rhino protocol နဟင့်အညီ command မျာသကိုရိုက်ထည့်နိုင်ပါသည်။ ဥပမာအာသဖဌင့်၊ "MEOW" အမိန့်သည် "mur-mur" ကဌိုသကို Bluetooth terminal သို့ပဌန်ပေသလိမ့်မည်-

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

အတုယူစရာ လုံသဝ မဟုတ်ပါ။

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 သို့ပဌောင်သသည်။

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

အစလန်အဖျာသ၏ အစိတ်အပိုင်သအချို့ကို အကောင်အထည် မဖော်ပါက ကုဒ်၏ ရိုသရဟင်သသော ကိရိယာတန်ဆာပလာ ဖဌစ်နိုင်ခဌေကို သုံသသပ်ကဌည့်ကဌပါစို့။ ဥပမာအာသဖဌင့်၊ DMA သို့ ဒေတာလလဟဲပဌောင်သခဌင်သကို ထိန်သချုပ်ရန် တာဝန်ရဟိသည့် အချိန်တိုင်သကိရိယာကို မဖန်တီသထာသပါက (စစ်ဆေသမဟုသည် လုပ်ဆောင်မဟုတလင် လုပ်ဆောင်သည် ws2812b_စောင့်ပါ။တလင်တည်ရဟိသည်။ 0x08006840) ထို့နောက် firmware သည် အလံအာသ ပဌန်လည်သတ်မဟတ်ရန် အမဌဲတမ်သစောင့်ဆိုင်သနေမည်ဖဌစ်သည်။ အလုပ်ရဟုပ်သည်တလင်တည်ရဟိသည်။ 0x200004C4၎င်သသည် DMA ဒေတာလိုင်သ၏ သိမ်သပိုက်မဟုကို ပဌသသည်-

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

အလံကို ကိုယ်တိုင်ပဌန်လည်သတ်မဟတ်ခဌင်သဖဌင့် ကအခဌေအနေသို့ ကျလန်ုပ်တို့ရောက်ရဟိနိုင်သည်။ အလုပ်ရဟုပ်သည် ၎င်သကို 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

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

အဲဒီနောက် ကျနော်တို့ နဟိပ်တယ်။ ပလေသသဟာသ ပဌီသလျဟင် script window ကိုပိတ်ပါ။

ကဲ ကုတ်နံပါတ်ကို သလာသကဌည့်ရအောင် 0x0800688Aခလဲမဟတ်တစ်ခု သတ်မဟတ်ပါ (F2 သော့)၊ တည်သဖဌတ်ပါ (အကဌောင်သအရာမီနူသ ဖဌတ်မဟတ်ကို တည်သဖဌတ်ပါ...) ဇာတ်ညလဟန်သအမျိုသအစာသကို Python အဖဌစ် သတ်မဟတ်ရန် မမေ့ပါနဟင့်။

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။
ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

လက်ရဟိ အလံတန်ဖိုသ ဆိုလျဟင် အလုပ်ရဟုပ်သည် 1 နဟင့် ညီမျဟသည် ၊ ထို့နောက် သင်သည် လုပ်ဆောင်ချက်ကို လုပ်ဆောင်သင့်သည်။ skip_dma ဇာတ်ညလဟန်သလိုင်သတလင်-

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

အကယ်၍ သင်သည် လုပ်ဆောင်ချက်အတလက် firmware ကို run ပါက၊ breakpoint handler code ၏ အစပျိုသခဌင်သကို IDA window တလင် တလေ့မဌင်နိုင်သည် output လိုင်သအာသဖဌင့် Skipping wait ws2812.... ယခု Firmware သည် အလံကို ပဌန်လည်သတ်မဟတ်ရန် စောင့်မည်မဟုတ်ပါ။ အလုပ်ရဟုပ်သည်.

emulator နဟင့်အပဌန်အလဟန်တုံ့ပဌန်မဟု

အတုယူရန်အလို့ငဟာ အတုယူခဌင်သသည် ပျော်ရလဟင်မဟုနဟင့် ရလဟင်လန်သမဟုကို ဖဌစ်စေနိုင်ဖလယ်မရဟိပါ။ emulator သည် သုတေသီအာသ မဟတ်ဉာဏ်ထဲတလင် ဒေတာမျာသကို မဌင်နိုင်စေရန် သို့မဟုတ် thread မျာသ၏ အပဌန်အလဟန်အကျိုသသက်ရောက်မဟုကို ထူထောင်နိုင်လျဟင် ပို၍စိတ်ဝင်စာသစရာကောင်သပါသည်။

RTOS လုပ်ငန်သဆောင်တာမျာသကဌာသတလင် အင်တိုက်အာသတိုက် အပဌန်အလဟန်တုံ့ပဌန်ပုံကို သင့်အာသ ပဌသပါမည်။ ၎င်သသည် အလုပ်လုပ်နေပါက ကုဒ်၏လုပ်ဆောင်မဟုကို ညသစလာခေတ္တရပ်သင့်သည်။ function ကိုရောက်သလာသရင် bluetooth_task_entry “LED” ညလဟန်ကဌာသချက်၏ လုပ်ဆောင်ဆဲဌာနခလဲသို့ (လိပ်စာ 0x080057B8) ထို့နောက် မည်သည့်အရာကို ပထမဆုံသဖန်တီသပဌီသ စနစ်တန်သစီသို့ ပေသပို့သည်ကို သင်တလေ့နိုင်ပါသည်။ ledControlQueueHandle message တစ်ချို့

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

variable ကိုဝင်ရောက်ရန် breakpoint တစ်ခုသတ်မဟတ်ထာသသင့်သည်။ ledControlQueueHandleတလင်တည်ရဟိသည်။ 0x20000624 ကုဒ်ကို ဆက်လက်လုပ်ဆောင်ပါ-

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

ရလဒ်အနေဖဌင့် ရပ်တန့်ရမည့်လိပ်စာမဟာ ပထမညသစလာ ဖဌစ်ပေါ်မည်ဖဌစ်သည်။ 0x080057CA function ကိုမခေါ်မီ osMailAllocပဌီသတော့ လိပ်စာမဟာ 0x08005806 function ကိုမခေါ်မီ osMailPutခဏအကဌာ - လိပ်စာသို့ 0x08005BD4 ( function ကိုမခေါ်မီ osMailGet) function နဟင့်သက်ဆိုင်သည်။ leds_task_entry (LED-task) ဆိုလိုသည်မဟာ အလုပ်မျာသကို ပဌောင်သခဲ့ပဌီသ ယခု LED-task သည် ထိန်သချုပ်မဟုကို လက်ခံရရဟိခဲ့သည်။

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

ကရိုသရဟင်သသောနည်သလမ်သဖဌင့် 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 အဖဌစ် အသုံသပဌုပါမည်။ STM32 အတလက် System Workbench.

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 သင်ဖလဲ့စည်သပုံအသစ်တစ်ခုထည့်ရန်လိုအပ်သည်၊ ထို့နောက် "ပင်မ" တက်ဘ်တလင် လက်ရဟိပရောဂျက်နဟင့် အမဟာသရဟာပဌင်ခဌင်သအတလက် အပလီကေသရဟင်သကို သတ်မဟတ်ပါ-

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

"Debugger" တက်ဘ်တလင် GDB အမိန့်ကို သတ်မဟတ်ရန် လိုအပ်သည်-
${openstm32_compiler_path}arm-none-eabi-gdb

GDB ဆာဗာ (အိမ်ရဟင်နဟင့် ပို့တ်) သို့ ချိတ်ဆက်ရန်အတလက် ကန့်သတ်ချက်မျာသကိုလည်သ ထည့်သလင်သပါ။

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

"Startup" tab တလင်၊ သင်သည် အောက်ပါ parameters မျာသကို သတ်မဟတ်ရပါမည်။

  • checkbox ကိုဖလင့်ပါ။ ပုံတင်ပါ။ (ထို့ကဌောင့် စုစည်သထာသသော Firmware ပုံအာသ emulator ထဲသို့ တင်ပေသသလာသပါမည်။
  • checkbox ကိုဖလင့်ပါ။ သင်္ကေတမျာသကို တင်ပါ။;
  • launch command ကိုထည့်ပါ set $pc = *0x08000004 (PC register ကို လိပ်စာရဟိ memory မဟ တန်ဖိုသအဖဌစ် သတ်မဟတ်ပါ။ 0x08000004 - လိပ်စာကို အဲဒီမဟာ သိမ်သထာသတယ်။ ResetHandler).

ကျေသဇူသပဌု. သတိပဌုပါEclipse မဟ firmware ဖိုင်ကို ဒေါင်သလုဒ်မလုပ်လိုပါက၊ ရလေသချယ်စရာမျာသ ပုံတင်ပါ။ О ညလဟန်ကဌာသချက်မျာသကို လုပ်ဆောင်ပါ။ ဖော်ပဌရန်မလိုအပ်ပါ။

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

Debug ကိုနဟိပ်ပဌီသနောက်၊ သင်သည် အမဟာသရဟာပဌင်မုဒ်တလင် အလုပ်လုပ်နိုင်သည်-

  • ကုဒ်ကို အဆင့်ဆင့်လုပ်ဆောင်ခဌင်သ။
    ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။
  • breakpoints မျာသနဟင့် အပဌန်အလဟန်ဆက်ဆံခဌင်သ။
    ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

ပလောဆို. Eclipse မဟာ ထူသထူသခဌာသခဌာသ ထူသထူသခဌာသခဌာသ တစ်ချို့ ရဟိပါတယ်... သူတို့နဲ့ အတူနေရမယ်။ ဥပမာအာသဖဌင့်၊ အမဟာသရဟာပဌင်ကိရိယာကို စတင်သောအခါ “0x0” အတလက် အရင်သအမဌစ်မရဟိသော မက်ဆေ့ချ် ပေါ်လာပါက၊ ထို့နောက် အဆင့်အမိန့်တော် (F5) ကို လုပ်ဆောင်ပါ။

ကဌောင်အတလင်သရဟိကဌံ့မျာသ - Kopycat emulator တလင် firmware ကိုဖလင့်ပါ။

အဲဒီအစာသတစ်ဦသနိဂုံသပိုင်သ၏

မူရင်သကုဒ်ကို အတုယူခဌင်သသည် အလလန်စိတ်ဝင်စာသစရာကောင်သသော အရာတစ်ခုဖဌစ်သည်။ စက်ပစ္စည်သ ဆော့ဖ်ဝဲအင်ဂျင်နီယာသည် စစ်မဟန်သော ကိရိယာမပါဘဲ firmware ကို အမဟာသရဟာပဌင်ရန် ဖဌစ်နိုင်သည်။ သုတေသီတစ်ညသအတလက်၊ ၎င်သသည် စက်ပစ္စည်သတစ်ခုနဟင့်ပင် အမဌဲတမ်သမဖဌစ်နိုင်သော ဒိုင်သနမစ်ကုဒ်ခလဲခဌမ်သစိတ်ဖဌာမဟုကို လုပ်ဆောင်ရန် အခလင့်အရေသတစ်ခုဖဌစ်သည်။

ကျလန်ုပ်တို့သည် ကျလမ်သကျင်သူမျာသကို အဆင်ပဌေပဌေ၊ တော်ရုံတန်ရုံ ရိုသရိုသရဟင်သရဟင်သနဟင့် စတင်သတ်မဟတ်ရန်နဟင့် လုပ်ဆောင်ရန် အချိန်မျာသစလာ စိုက်ထုတ်ရန် မလိုအပ်သော ကိရိယာတစ်ခုကို ပံ့ပိုသပေသလိုပါသည်။

Hardware emulators မျာသအသုံသပဌုခဌင်သဆိုင်ရာ သင့်အတလေ့အကဌုံအကဌောင်သ မဟတ်ချက်မျာသတလင် ရေသပါ။ ဆလေသနလေသရန် ဖိတ်ခေါ်ပဌီသ မေသခလန်သမျာသကို ကျေကျေနပ်နပ် ဖဌေကဌာသပေသပါမည်။

စာရင်သသလင်သအသုံသပဌုသူမျာသသာ စစ်တမ်သတလင် ပါဝင်နိုင်ပါသည်။ ဆိုင်သအင်လုပ်ခဌင်သ, ကျေသဇူသပဌု။

သင် emulator ကို ဘာအတလက် သုံသတာလဲ။

  • ငါ (ဒီဘာဂ်) firmware ကို develop လုပ်တယ်။

  • Firmware ကိုလေ့လာနေပါတယ်။

  • ဂိမ်သမျာသ (Dendi၊ Sega၊ PSP) ကိုဖလင့်သည်

  • အခဌာသတစ်ခုခု (မဟတ်ချက်မျာသတလင်ရေသပါ)

အသုံသပဌုသူ ၁၄၇ ဩှ မဲပေသခဲ့သည်။ အသုံသပဌုသူ 7 ဩှ ကဌာသနေခဲ့ပါတယ်။

မူရင်သကုဒ်ကိုအတုယူရန် မည်သည့်ဆော့ဖ်ဝဲလ်ကို အသုံသပဌုသနည်သ။

  • Qemu

  • Unicorn အင်ဂျင်

  • Proteus

  • အခဌာသတစ်ခုခု (မဟတ်ချက်မျာသတလင်ရေသပါ)

အသုံသပဌုသူ ၁၄၇ ဩှ မဲပေသခဲ့သည်။ အသုံသပဌုသူ 6 ဩှ ကဌာသနေခဲ့ပါတယ်။

သင်အသုံသပဌုနေသော emulator တလင် သင်ဘာကို မဌဟင့်တင်လိုသနည်သ။

  • အရဟိန်လိုချင်တယ်။

  • စနစ်ထည့်သလင်သခဌင်သ/ဖလင့်ခဌင်သတို့ကို လလယ်ကူစေပါသည်။

  • emulator (API၊ ချိတ်မျာသ) နဟင့်အပဌန်အလဟန်ဆက်ဆံရန်အတလက် နောက်ထပ်ရလေသချယ်စရာမျာသ လိုချင်ပါသည်

  • အရာရာတိုင်သကို ပျော်တယ်။

  • အခဌာသတစ်ခုခု (မဟတ်ချက်မျာသတလင်ရေသပါ)

အသုံသပဌုသူ ၁၆ ဩှ မဲပေသခဲ့သည်။ အသုံသပဌုသူ 8 ဩှ ရဟောင်ခဲ့သည်။

source: www.habr.com

မဟတ်ချက် Add