Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Као део састанка 0к0А ДЦ7831 ДЕФ ЦОН Нижњи Новгород 16. фебруара смо представили извештај о основним принципима емулације бинарног кода и сопственом развоју - емулатору хардверске платформе Цопицат.

У овом чланку ћемо описати како покренути фирмвер уређаја у емулатору, показати интеракцију са програмом за отклањање грешака и извршити малу динамичку анализу фирмвера.

praistorija

Давно у далекој галаксији

Пре неколико година у нашој лабораторији се појавила потреба да се испита фирмвер уређаја. Фирмвер је компримован и распакован помоћу покретачког програма. Урадио је то на веома компликован начин, померајући податке у меморији неколико пута. И сам фирмвер је тада активно деловао са периферним уређајима. И све ово на МИПС језгру.

Из објективних разлога, доступни емулатори нам нису одговарали, али смо ипак желели да покренемо код. Тада смо одлучили да направимо сопствени емулатор, који би урадио минимум и омогућио нам да распакујемо главни фирмвер. Пробали смо и успело је. Помислили смо, шта ако додамо периферне уређаје да би такође извршили главни фирмвер. Није много болело - и такође је успело. Поново смо размислили и одлучили да направимо пуноправни емулатор.

Резултат је био емулатор рачунарских система Цопицат.

Носорог унутар мачке - покрените фирмвер у Копицат емулатору
Зашто Копицат?

Постоји игра речи.

  1. цопицат (енглески, именица [ˈкɒпɪкӕт]) - имитатор, имитатор
  2. како (енглески, именица [ˈкӕт]) - мачка, мачка - омиљена животиња једног од креатора пројекта
  3. Слово „К“ је из програмског језика Котлин

Цопицат

Приликом креирања емулатора постављени су врло конкретни циљеви:

  • могућност брзог креирања нових периферних уређаја, модула, процесорских језгара;
  • могућност склапања виртуелног уређаја из различитих модула;
  • могућност учитавања било којих бинарних података (фирмвера) у меморију виртуелног уређаја;
  • способност рада са снимцима (снимци стања система);
  • могућност интеракције са емулатором преко уграђеног дебагера;
  • леп савремени језик за развој.

Као резултат тога, Котлин је изабран за имплементацију, архитектура магистрале (ово је када модули комуницирају једни са другима преко виртуелних магистрала података), ЈСОН као формат описа уређаја и ГДБ РСП као протокол за интеракцију са дебагером.

Развој траје нешто више од две године и активно се одвија. Током овог времена имплементирана су процесорска језгра МИПС, к86, В850ЕС, АРМ и ПоверПЦ.

Пројекат расте и време је да га представимо широј јавности. Касније ћемо урадити детаљан опис пројекта, али за сада ћемо се фокусирати на коришћење Копицат-а.

За оне најнестрпљивије, може се преузети промо верзија емулатора веза.

Рхино у емулатору

Подсетимо се да је раније за конференцију СМАРТРХИНО-2018 креиран тест уређај „Носорог” за подучавање вештинама обрнутог инжењеринга. Процес статичке анализе фирмвера је описан у Овај чланак.

Сада покушајмо да додамо „звучнике“ и покренемо фирмвер у емулатору.

Требаће нам:
1) Јава 1.8
2) Пајтон и модул Је п да користите Питхон унутар емулатора. Можете да направите ВХЛ модул Јеп за Виндовс преузми овде.

За Виндовс:
1) цом0цом
2) ПуТТИ

За Линук:
1) сокат

Можете користити Ецлипсе, ИДА Про или радаре2 као ГДБ клијент.

Како то функционише?

Да бисте извршили фирмвер у емулатору, потребно је "саставити" виртуелни уређај, који је аналог стварног уређаја.

Прави уређај („носорог“) се може приказати на блок дијаграму:

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Емулатор има модуларну структуру и коначни виртуелни уређај се може описати у ЈСОН датотеци.

ЈСОН 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 одељак парамс је назив датотеке која се може учитати у виртуелни уређај као фирмвер.

Виртуелни уређај и његова интеракција са главним оперативним системом могу се представити следећим дијаграмом:

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Тренутна пробна инстанца емулатора укључује интеракцију са ЦОМ портовима главног оперативног система (дебуг УАРТ и УАРТ за Блуетоотх модул). То могу бити стварни портови на које су повезани уређаји или виртуелни ЦОМ портови (за ово вам је само потребно цом0цом/соцат).

Тренутно постоје два главна начина за интеракцију са емулатором споља:

  • ГДБ РСП протокол (према томе, алати који подржавају овај протокол су Ецлипсе / ИДА / радаре2);
  • интерна командна линија емулатора (Аргпарсе или Питхон).

Виртуелни ЦОМ портови

Да бисте остварили интеракцију са УАРТ-ом виртуелног уређаја на локалној машини преко терминала, потребно је да креирате пар повезаних виртуелних ЦОМ портова. У нашем случају, један порт користи емулатор, а други терминалски програм (ПуТТИ или екран):

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Коришћењем цом0цом

Виртуелни ЦОМ портови се конфигуришу помоћу услужног програма за подешавање из цом0цом комплета (верзија за конзолу - Ц:Програм Филес (к86)цом0цомсетупс.еке, или ГУИ верзија - Ц:Програмске датотеке (к86)цом0цомсетупг.еке):

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Означите поља омогући прекорачење бафера за све креиране виртуелне портове, иначе ће емулатор чекати одговор са ЦОМ порта.

Користећи соцат

На УНИКС системима, виртуелни ЦОМ портови се аутоматски креирају од стране емулатора користећи соцат услужни програм да бисте то урадили, само наведите префикс у називу порта када покрећете емулатор socat:.

Интерни интерфејс командне линије (Аргпарсе или Питхон)

Пошто је Копицат конзолна апликација, емулатор пружа две опције интерфејса командне линије за интеракцију са својим објектима и променљивим: Аргпарсе и Питхон.

Аргпарсе је ЦЛИ уграђен у Копицат и увек је доступан свима.

Алтернативни ЦЛИ је Питхон интерпретер. Да бисте га користили, потребно је да инсталирате Јеп Питхон модул и конфигуришете емулатор да ради са Питхон-ом (користиће се Питхон интерпретер инсталиран на главном систему корисника).

Инсталирање Питхон модула Јеп

Под Линуком Јеп се може инсталирати преко пип-а:

pip install jep

Да бисте инсталирали Јеп на Виндовс, прво морате да инсталирате Виндовс СДК и одговарајући Мицрософт Висуал Студио. Мало смо вам олакшали и ВХЛ гради ЈЕП за тренутне верзије Питхон-а за Виндовс, тако да се модул може инсталирати из датотеке:

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

Да бисте проверили инсталацију Јеп-а, потребно је да покренете на командној линији:

python -c "import jep"

Као одговор требало би да добијете следећу поруку:

ImportError: Jep is not supported in standalone Python, it must be embedded in Java.

У батцх датотеци емулатора за ваш систем (цопицат.бат - за Виндовс, цопицат - за Линук) на листу параметара DEFAULT_JVM_OPTS додајте додатни параметар Djava.library.path — мора да садржи путању до инсталираног Јеп модула.

Резултат за Виндовс би требало да буде ова линија:

set DEFAULT_JVM_OPTS="-XX:MaxMetaspaceSize=256m" "-XX:+UseParallelGC" "-XX:SurvivorRatio=6" "-XX:-UseGCOverheadLimit" "-Djava.library.path=C:/Python27/Lib/site-packages/jep"

Покретање Копицат-а

Емулатор је конзолна ЈВМ апликација. Покретање се врши преко скрипте командне линије оперативног система (сх/цмд).

Команда за покретање на Виндовс-у:

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

Команда за покретање под Линуком помоћу услужног програма соцат:

./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 — ТЦП порт који ће бити отворен за приступ ГДБ серверу;
  • -n rhino — назив главног системског модула (склопљеног уређаја);
  • -l user — назив библиотеке за тражење главног модула;
  • -y library — путања за тражење модула укључених у уређај;
  • firmwarerhino_pass.bin — путања до датотеке фирмвера;
  • ЦОМ26 и ЦОМ28 су виртуелни ЦОМ портови.

Као резултат тога, биће приказан упит 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 >

Интеракција са ИДА Про

Да бисмо поједноставили тестирање, користимо Рхино фирмвер као изворни фајл за анализу у ИДА у облику ЕЛФ фајл (тамо се чувају мета информације).

Такође можете користити главни фирмвер без мета информација.

Након покретања Копицат-а у ИДА Про, у менију Дебуггер идите на ставку „Промени програм за отклањање грешака…" и изаберите "Удаљени ГДБ дебагер„. Затим подесите везу: мени Отклањање грешака – опције обраде…

Подесите вредности:

  • Апликација - било која вредност
  • Име хоста: 127.0.0.1 (или ИП адреса удаљене машине на којој је покренут Копицат)
  • Лука: КСНУМКС

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Сада дугме за отклањање грешака постаје доступно (тастер Ф9):

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Кликните на њега да бисте се повезали са модулом за отклањање грешака у емулатору. ИДА прелази у режим за отклањање грешака, постају доступни додатни прозори: информације о регистрима, о стеку.

Сада можемо да користимо све стандардне карактеристике програма за отклањање грешака:

  • корак по корак извршавање инструкција (Закорачити и Искорачи — тастери Ф7 и Ф8, респективно);
  • покретање и паузирање извршења;
  • креирање тачака прекида и за код и за податке (тастер Ф2).

Повезивање са дебагером не значи покретање кода фирмвера. Тренутна позиција извршења мора бити адреса 0x08006A74 — почетак функције Ресет_Хандлер. Ако скролујете надоле по листи, можете видети позив функције главни. Можете поставити курсор на ову линију (адреса 0x08006ABE) и извршите операцију Покрени до курсора (тастер Ф4).

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Затим можете притиснути Ф7 да бисте ушли у функцију главни.

Если виполнит команду Наставите процес (тастер Ф9), тада ће се прозор „Молим сачекати“ појавити са једним дугметом Обуставити:

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Када притиснете Обуставити извршење кода фирмвера је суспендовано и може се наставити са исте адресе у коду на којој је прекинуто.

Ако наставите да извршавате код, видећете следеће линије у терминалима повезаним са виртуелним ЦОМ портовима:

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Присуство линије „заобилажење стања“ указује на то да је виртуелни Блуетоотх модул прешао у режим пријема података са ЦОМ порта корисника.

Сада у Блуетоотх терминал (ЦОМ29 на слици) можете уносити команде у складу са Рхино протоколом. На пример, команда „МЕОВ“ ће вратити низ „мур-мур“ на Блуетоотх терминал:

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Не опонашајте ме у потпуности

Када правите емулатор, можете одабрати ниво детаља/емулације одређеног уређаја. На пример, Блуетоотх модул се може емулирати на различите начине:

  • уређај је у потпуности емулиран са пуним скупом команди;
  • АТ команде се емулирају, а ток података се прима са ЦОМ порта главног система;
  • виртуелни уређај обезбеђује потпуно преусмеравање података на прави уређај;
  • као једноставан стуб који увек враћа „ОК“.

Тренутна верзија емулатора користи други приступ - виртуелни Блуетоотх модул врши конфигурацију, након чега се пребацује на режим „проксија“ података са ЦОМ порта главног система на УАРТ порт емулатора.

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Размотримо могућност једноставне инструментације кода у случају да неки део периферије није имплементиран. На пример, ако тајмер одговоран за контролу преноса података у ДМА није креиран (провера се врши у функцији вс2812б_ваит, располојен по адреси 0x08006840), тада ће фирмвер увек чекати да се заставица ресетује заузетналази на 0x200004C4који показује заузетост ДМА линије података:

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Ову ситуацију можемо заобићи ручним ресетовањем заставе заузет одмах након инсталирања. У ИДА Про, можете креирати Питхон функцију и позвати је у тачки прекида и ставити саму тачку прекида у код након што упишете вредност 1 у заставицу заузет.

Руковалац тачке прекида

Прво, хајде да направимо Питхон функцију у ИДА. Мени Фајл - команда скрипте...

Додајте нови исечак на листу са леве стране, дајте му име (нпр. БПТ),
У поље за текст са десне стране унесите код функције:

def skip_dma():
    print "Skipping wait ws2812..."
    value = Byte(0x200004C4)
    if value == 1:
        PatchDbgByte(0x200004C4, 0)
return False

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Након тога, кликните трчање и затворите прозор скрипте.

Сада идемо на код на 0x0800688A, поставите тачку прекида (тастер Ф2), уредите је (контекстни мени Измени тачку прекида...), не заборавите да подесите тип скрипте на Питхон:

Носорог унутар мачке - покрените фирмвер у Копицат емулатору
Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Ако је тренутна вредност заставице заузет једнако 1, онда би требало да извршите функцију скип_дма у реду скрипте:

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Ако покренете фирмвер за извршење, покретање кода за руковање тачком прекида се може видети у прозору ИДА Излаз по линији Skipping wait ws2812.... Сада фирмвер неће чекати да се заставица ресетује заузет.

Интеракција са емулатором

Мало је вероватно да ће емулација зарад опонашања изазвати одушевљење и радост. Много је интересантније ако емулатор помаже истраживачу да види податке у меморији или успостави интеракцију нити.

Показаћемо вам како да динамички успоставите интеракцију између РТОС задатака. Прво би требало да паузирате извршавање кода ако је покренут. Ако одете на функцију блуетоотх_таск_ентри у грану за обраду команде „ЛЕД“ (адреса 0x080057B8), тада можете видети шта се прво креира, а затим шаље у системски ред ледЦонтролКуеуеХандле нека порука.

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Требало би да поставите тачку прекида за приступ променљивој ледЦонтролКуеуеХандле, располојен по адреси 0x20000624 и наставите са извршавањем кода:

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Као резултат, заустављање ће се прво догодити на адреси 0x080057CA пре позивања функције осМаилАллоц, затим на адреси 0x08005806 пре позивања функције осМаилПут, па после неког времена - на адресу 0x08005BD4 (пре позивања функције осМаилГет), који припада функцији ледс_таск_ентри (ЛЕД-задатак), односно задаци су се заменили и сада је ЛЕД-задатак добио контролу.

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

На овај једноставан начин можете установити како РТОС задаци међусобно комуницирају.

Наравно, у стварности, интеракција задатака може бити компликованија, али коришћењем емулатора праћење ове интеракције постаје мање напорно.

Овде Можете погледати кратак видео о покретању емулатора и интеракцији са ИДА Про.

Покрени са Радаре2

Не можете занемарити такав универзални алат као што је Радаре2.

Да бисте се повезали са емулатором помоћу р2, команда би изгледала овако:

radare2 -A -a arm -b 16 -d gdb://localhost:23946 rhino_fw42k6.elf

Покрени сада доступно (dc) и паузирајте извршење (Цтрл+Ц).

Нажалост, тренутно р2 има проблема при раду са хардверским гдб сервером и распоредом меморије због тога, тачке прекида и кораци не раде (команда ds). Надамо се да ће ово ускоро бити поправљено.

Трчање са Ецлипсе-ом

Једна од опција за коришћење емулатора је отклањање грешака у фирмверу уређаја који се развија. Ради јасноће, користићемо и фирмвер Рхино. Можете преузети изворе фирмвера стога.

Користићемо Ецлипсе из скупа као ИДЕ Системски радни сто за СТМ32.

Да би емулатор учитао фирмвер директно компајлиран у Ецлипсе-у, потребно је да додате параметар firmware=null на команду за покретање емулатора:

binkopycat -g 23946 -n rhino -l user -y modules -p firmware=null,tty_dbg=COM26,tty_bt=COM28

Подешавање конфигурације за отклањање грешака

У Ецлипсе-у изаберите мени Покрени – отклањање грешака конфигурација... У прозору који се отвори, у одељку ГДБ отклањање грешака у хардверу потребно је да додате нову конфигурацију, а затим на картици „Маин“ наведите тренутни пројекат и апликацију за отклањање грешака:

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

На картици „Дебуггер“ морате да наведете ГДБ команду:
${openstm32_compiler_path}arm-none-eabi-gdb

Такође унесите параметре за повезивање са ГДБ сервером (хост и порт):

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

На картици „Покретање“ морате навести следеће параметре:

  • омогући поље за потврду Учитај слику (тако да се састављена слика фирмвера учитава у емулатор);
  • омогући поље за потврду Учитавање симбола;
  • додајте наредбу за покретање: set $pc = *0x08000004 (подесите ПЦ регистар на вредност из меморије на адреси 0x08000004 - адреса се чува тамо РесетХандлер).

Обратите внимание, ако не желите да преузмете датотеку фирмвера са Ецлипсе-а, онда опције Учитај слику и Покрени команде нема потребе да се указује.

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Након што кликнете на Отклањање грешака, можете да радите у режиму за отклањање грешака:

  • корак по корак извршавање кода
    Носорог унутар мачке - покрените фирмвер у Копицат емулатору
  • интеракција са тачкама прекида
    Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Приметити. Ецлипсе има, хмм... неке чудне ствари... и мораш да живиш са њима. На пример, ако се приликом покретања програма за отклањање грешака појави порука „Нема доступног извора за „0к0″“, онда извршите команду корак (Ф5)

Носорог унутар мачке - покрените фирмвер у Копицат емулатору

Уместо закључка

Емулација изворног кода је веома интересантна ствар. За програмера уређаја, постаје могуће отклањање грешака у фирмверу без правог уређаја. За истраживача је то прилика да спроведе динамичку анализу кода, што није увек могуће чак ни са уређајем.

Желимо да пружимо стручњацима алат који је згодан, умерено једноставан и који не захтева много труда и времена за постављање и покретање.

Напишите у коментарима своје искуство коришћења хардверских емулатора. Позивамо вас на дискусију и радо ћемо одговорити на питања.

Само регистровани корисници могу учествовати у анкети. Пријавите се, Добродошао си.

За шта користите емулатор?

  • Развијам (отклањам грешке) фирмвер

  • Истражујем фирмвер

  • Покрећем игре (Денди, Сега, ПСП)

  • нешто друго (напишите у коментарима)

Гласало је 7 корисника. 2 корисника су била уздржана.

Који софтвер користите за емулацију изворног кода?

  • КЕМУ

  • Једнорог мотор

  • Протеј

  • нешто друго (напишите у коментарима)

Гласало је 6 корисника. 2 корисника су била уздржана.

Шта бисте желели да побољшате у емулатору који користите?

  • Желим брзину

  • Желим једноставност подешавања/покретања

  • Желим више опција за интеракцију са емулатором (АПИ, куке)

  • Задовољан сам са свиме

  • нешто друго (напишите у коментарима)

Гласало је 8 корисника. 1 корисник је био уздржан.

Извор: ввв.хабр.цом

Додај коментар