ကြောင်အတွင်းရှိကြံ့များ - 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 ကိုသုံးဖို့။ Jep module ရဲ့ WHL build အောက်မှာ Windows နိုင် ဒီမှာဒေါင်းပါ။.

အတွက် 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

Jep ကို အောက်မှာ တပ်ဆင်ဖို့ Windows ကြိုတင်ထည့်သွင်းထားရမည် Windows SDK နှင့် သက်ဆိုင်ရာ Microsoft Visual Studio။ ကျွန်ုပ်တို့သည် သင့်အတွက် အရာများကို အနည်းငယ်ပိုမိုလွယ်ကူအောင် ပြုလုပ်ပေးထားပြီး WHL တည်ဆောက်သည်။ လက်ရှိ Python ဗားရှင်းများအတွက် JEP Windows, ထို့ကြောင့် module ကို ဖိုင်တစ်ခုမှ install လုပ်နိုင်သည်-

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:

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 ကို အသုံးပြုပါသည်။ 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

DDoS ကာကွယ်ရေး၊ VPS VDS ဆာဗာများပါသည့် ဆိုက်များအတွက် ယုံကြည်စိတ်ချရသော hosting ကို ဝယ်ယူပါ။ 🔥 DDoS ကာကွယ်မှု၊ VPS VDS ဆာဗာများပါရှိသော ယုံကြည်စိတ်ချရသော ဝဘ်ဆိုက် hosting ကို ဝယ်ယူပါ | ProHoster