Bħala parti mil-laqgħa 0x0A DC7831
F'dan l-artikolu ser niddeskrivu kif tħaddem il-firmware tal-apparat fl-emulator, nuru l-interazzjoni mad-debugger, u nwettqu analiżi dinamika żgħira tal-firmware.
preistorja
Żmien twil ilu f'galaxie 'l bogħod
Ftit snin ilu fil-laboratorju tagħna kien hemm bżonn li jiġi investigat il-firmware ta 'apparat. Il-firmware kien ikkompressat u mhux ippakkjat b'bootloader. Huwa għamel dan b'mod ikkumplikat ħafna, biddel id-data fil-memorja diversi drabi. U l-firmware innifsu mbagħad interaġixxa b'mod attiv mal-periferali. U dan kollu fuq il-qalba tal-MIPS.
Għal raġunijiet oġġettivi, l-emulaturi disponibbli ma kinux adattati għalina, iżda xorta ridna nħaddmu l-kodiċi. Imbagħad iddeċidejna li nagħmlu l-emulatur tagħna stess, li jagħmel il-minimu u jippermettilna li nispakkjaw il-firmware prinċipali. Ippruvajna u ħadem. Ħsibna, x'jiġri jekk inżidu periferali biex iwettqu wkoll il-firmware prinċipali. Ma weġġgħetx ħafna - u ħadmet ukoll. Erġajna ħsibna u ddeċidejna li nagħmlu emulatur sħiħ.
Ir-riżultat kien emulatur tas-sistemi tal-kompjuter
Għaliex Kopycat?
Hemm logħob tal-kliem.
- kopjatur (Ingliż, nom [ˈkɒpɪkæt]) - imitatur, imitatur
- qattus (Ingliż, nom [ˈkæt]) - qattus, qattus - l-annimal favorit ta’ wieħed mill-ħallieqa tal-proġett
- L-ittra "K" hija mil-lingwa ta 'programmar Kotlin
Copycat
Meta ħoloq l-emulator, ġew stabbiliti miri speċifiċi ħafna:
- l-abbiltà li toħloq malajr periferali, moduli, cores tal-proċessuri ġodda;
- l-abbiltà li tiġbor apparat virtwali minn diversi moduli;
- l-abbiltà li tagħbija kwalunkwe data binarja (firmware) fil-memorja ta 'apparat virtwali;
- abbiltà li taħdem ma 'snapshots (snapshots ta' l-istat tas-sistema);
- l-abbiltà li jinteraġixxu ma 'l-emulator permezz tad-debugger inkorporat;
- lingwaġġ modern sabiħ għall-iżvilupp.
Bħala riżultat, Kotlin intgħażel għall-implimentazzjoni, l-arkitettura tax-xarabank (dan huwa meta l-moduli jikkomunikaw ma 'xulxin permezz ta' xarabanks tad-dejta virtwali), JSON bħala l-format tad-deskrizzjoni tal-apparat, u GDB RSP bħala l-protokoll għall-interazzjoni mad-debugger.
L-iżvilupp ilu għaddej għal ftit aktar minn sentejn u għaddej b'mod attiv. Matul dan iż-żmien, ġew implimentati cores tal-proċessuri MIPS, x86, V850ES, ARM, u PowerPC.
Il-proġett qed jikber u wasal iż-żmien li jiġi ppreżentat lill-pubbliku usa’. Se nagħmlu deskrizzjoni dettaljata tal-proġett aktar tard, iżda għalissa se niffukaw fuq l-użu tal-Kopycat.
Għall-aktar paċenzja, verżjoni promozzjonali tal-emulator tista 'titniżżel minn
Rhino fl-emulator
Ejja nfakkru li aktar kmieni għall-konferenza SMARTRHINO-2018, inħoloq apparat tat-test "Rhinoceros" għat-tagħlim tal-ħiliet tal-inġinerija inversa. Il-proċess tal-analiżi statika tal-firmware ġie deskritt fi
Issa ejja nippruvaw inżidu "kelliema" u tħaddem il-firmware fl-emulator.
Ikollna bżonn:
1) Java 1.8
2) Python u modulu
Għal Windows:
1)
2)
Għal Linux:
1) socat
Tista' tuża Eclipse, IDA Pro jew radare2 bħala klijent GDB.
Kif taħdem?
Sabiex twettaq il-firmware fl-emulator, huwa meħtieġ li "jiġbor" apparat virtwali, li huwa analogu ta 'apparat reali.
L-apparat reali ("rhino") jista' jintwera fid-dijagramma blokk:
L-emulator għandu struttura modulari u l-apparat virtwali finali jista 'jiġi deskritt f'fajl JSON.
JSON 105 linji
{
"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"]
]
}
Oqgħod attent għall-parametru Firmware fit-taqsima parametri huwa l-isem ta' fajl li jista' jitgħabba f'apparat virtwali bħala firmware.
L-apparat virtwali u l-interazzjoni tiegħu mas-sistema operattiva ewlenija jistgħu jiġu rappreżentati bid-dijagramma li ġejja:
L-istanza attwali tat-test tal-emulator tinvolvi interazzjoni mal-portijiet COM tal-OS prinċipali (iddebug UART u UART għall-modulu Bluetooth). Dawn jistgħu jkunu portijiet reali li magħhom huma konnessi l-apparati jew portijiet COM virtwali (għal dan għandek bżonn biss com0com/socat).
Bħalissa hemm żewġ modi ewlenin biex jinteraġixxu ma 'l-emulator minn barra:
- Protokoll GDB RSP (konsegwentement, l-għodod li jappoġġjaw dan il-protokoll huma Eclipse / IDA / radare2);
- linja ta 'kmand emulatur intern (Argparse jew Python).
Portijiet COM virtwali
Sabiex jinteraġixxu mal-UART ta 'apparat virtwali fuq il-magna lokali permezz ta' terminal, għandek bżonn toħloq par ta 'portijiet COM virtwali assoċjati. Fil-każ tagħna, port wieħed jintuża mill-emulatur, u t-tieni jintuża minn programm terminali (PuTTY jew skrin):
Uża com0com
Il-portijiet COM virtwali huma kkonfigurati bl-użu tal-utilità tas-setup mill-kit com0com (verżjoni tal-konsole - C:Fajls tal-Programm (x86)com0comsetupс.exe, jew verżjoni GUI - C:Fajls tal-Programm (x86)com0comsetupg.exe):
Iċċekkja l-kaxxi jippermetti buffer overrun għall-portijiet virtwali kollha maħluqa, inkella l-emulator se jistenna rispons mill-port COM.
Uża socat
Fuq sistemi UNIX, portijiet COM virtwali huma maħluqa awtomatikament mill-emulatur bl-użu tal-utilità socat; biex tagħmel dan, speċifika l-prefiss fl-isem tal-port meta tibda l-emulatur socat:
.
Interface tal-linja tal-kmand interna (Argparse jew Python)
Peress li Kopycat hija applikazzjoni tal-console, l-emulatur jipprovdi żewġ għażliet ta 'interface tal-linja tal-kmand biex jinteraġixxu mal-oġġetti u l-varjabbli tiegħu: Argparse u Python.
Argparse huwa CLI mibni f'Kopycat u huwa dejjem disponibbli għal kulħadd.
CLI alternattiva hija l-interpretu Python. Biex tużah, trid tinstalla l-modulu Jep Python u tikkonfigura l-emulatur biex jaħdem ma 'Python (se jintuża l-interpretu Python installat fis-sistema ewlenija tal-utent).
Installazzjoni tal-modulu Python Jep
Taħt Linux Jep jista 'jiġi installat permezz ta' pip:
pip install jep
Biex tinstalla Jep fuq Windows, l-ewwel trid tinstalla l-Windows SDK u l-Microsoft Visual Studio korrispondenti. Għamilna ftit aktar faċli għalik u
pip install jep-3.8.2-cp27-cp27m-win_amd64.whl
Biex tiċċekkja l-installazzjoni ta 'Jep, għandek bżonn taħdem fuq il-linja tal-kmand:
python -c "import jep"
Il-messaġġ li ġej għandu jasal bi tweġiba:
ImportError: Jep is not supported in standalone Python, it must be embedded in Java.
Fil-fajl tal-lott tal-emulatur għas-sistema tiegħek (copycat.bat - għall-Windows, kopjatur - għal Linux) għal-lista ta' parametri DEFAULT_JVM_OPTS
żid parametru addizzjonali Djava.library.path
— għandu jkun fiha l-mogħdija għall-modulu Jep installat.
Ir-riżultat għall-Windows għandu jkun linja bħal din:
set DEFAULT_JVM_OPTS="-XX:MaxMetaspaceSize=256m" "-XX:+UseParallelGC" "-XX:SurvivorRatio=6" "-XX:-UseGCOverheadLimit" "-Djava.library.path=C:/Python27/Lib/site-packages/jep"
Tnedija Kopycat
L-emulator huwa applikazzjoni JVM tal-console. It-tnedija titwettaq permezz tal-iskript tal-linja tal-kmand tas-sistema operattiva (sh/cmd).
Kmand biex taħdem taħt Windows:
binkopycat -g 23946 -n rhino -l user -y library -p firmware=firmwarerhino_pass.bin,tty_dbg=COM26,tty_bt=COM28
Kmand biex taħdem taħt Linux billi tuża l-utilità socat:
./bin/kopycat -g 23946 -n rhino -l user -y library -p firmware=./firmware/rhino_pass.bin, tty_dbg=socat:./COM26,tty_bt=socat:./COM28
-g 23646
— Port TCP li se jkun miftuħ għall-aċċess għas-server GDB;-n rhino
— isem il-modulu tas-sistema prinċipali (apparat immuntat);-l user
— isem il-librerija biex tfittex il-modulu prinċipali;-y library
— mogħdija għat-tfittxija għal moduli inklużi fl-apparat;firmwarerhino_pass.bin
— mogħdija għall-fajl tal-firmware;- COM26 u COM28 huma portijiet COM virtwali.
Bħala riżultat, se jintwera pront Python >
(Jew 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 >
Interazzjoni ma' IDA Pro
Biex tissimplifika l-ittestjar, nużaw il-firmware Rhino bħala l-fajl tas-sors għall-analiżi f'IDA fil-forma
Tista 'wkoll tuża l-firmware prinċipali mingħajr meta informazzjoni.
Wara li tniedi Kopycat f'IDA Pro, fil-menu tad-Debugger mur l-oġġett "Aqleb id-debugger..." u agħżel "Debugger GDB mill-bogħod". Sussegwentement, waqqaf il-konnessjoni: menu Debugger - Għażliet tal-proċess...
Issettja l-valuri:
- Applikazzjoni - kwalunkwe valur
- Hostname: 127.0.0.1 (jew l-indirizz IP tal-magna remota fejn qed jaħdem Kopycat)
- Port: 23946
Issa l-buttuna tad-debugging issir disponibbli (ċavetta F9):
Ikklikkjaha biex tikkonnettja mal-modulu tad-debugger fl-emulator. IDA tidħol fil-mod ta 'debugging, twieqi addizzjonali jsiru disponibbli: informazzjoni dwar reġistri, dwar il-munzell.
Issa nistgħu nużaw il-karatteristiċi standard kollha tad-debugger:
- eżekuzzjoni pass pass tal-istruzzjonijiet (Pass ġewwa и Pass fuq — ċwievet F7 u F8, rispettivament);
- jibda u jwaqqaf l-eżekuzzjoni;
- ħolqien ta' breakpoints kemm għall-kodiċi kif ukoll għad-data (ċavetta F2).
Il-konnessjoni ma' debugger ma jfissirx li tħaddem il-kodiċi tal-firmware. Il-pożizzjoni tal-eżekuzzjoni attwali għandha tkun l-indirizz 0x08006A74
— bidu tal-funzjoni Reset_Handler. Jekk tiskrollja 'l isfel fil-lista, tista' tara s-sejħa tal-funzjoni prinċipali. Tista' tpoġġi l-cursor fuq din il-linja (indirizz 0x08006ABE
) u wettaq l-operazzjoni Mexxi sal-cursor (ċavetta F4).
Sussegwentement, tista 'tagħfas F7 biex tidħol fil-funzjoni prinċipali.
Jekk tmexxi l-kmand Kompli proċess (ċavetta F9), imbagħad it-tieqa "Jekk jogħġbok stenna" tidher b'buttuna waħda Issospendi:
Meta tagħfas Issospendi l-eżekuzzjoni tal-kodiċi tal-firmware hija sospiża u tista' titkompla mill-istess indirizz fil-kodiċi fejn ġie interrott.
Jekk tkompli tesegwixxi l-kodiċi, tara l-linji li ġejjin fit-terminals konnessi mal-portijiet COM virtwali:
Il-preżenza tal-linja "bypass tal-istat" tindika li l-modulu Bluetooth virtwali qaleb għall-mod li jirċievi data mill-port COM tal-utent.
Issa fit-terminal Bluetooth (COM29 fl-istampa) tista 'tidħol kmandi skont il-protokoll Rhino. Pereżempju, il-kmand "MEOW" se jirritorna s-sekwenza "mur-mur" lit-terminal Bluetooth:
Emula lili mhux kompletament
Meta tibni emulatur, tista 'tagħżel il-livell ta' dettall/emulazzjoni ta 'apparat partikolari. Pereżempju, il-modulu Bluetooth jista 'jiġi imitat b'modi differenti:
- l-apparat huwa emulat bis-sħiħ b'sett sħiħ ta 'kmandi;
- Kmandi AT huma emulati, u n-nixxiegħa tad-dejta tiġi riċevuta mill-port COM tas-sistema prinċipali;
- l-apparat virtwali jipprovdi direzzjoni mill-ġdid tad-dejta kompleta għall-apparat reali;
- bħala stub sempliċi li dejjem jirritorna "OK".
Il-verżjoni attwali tal-emulatur tuża t-tieni approċċ - il-modulu Bluetooth virtwali jwettaq konfigurazzjoni, u wara jaqleb għall-mod ta '"proxying" data mill-port COM tas-sistema prinċipali għall-port UART tal-emulator.
Ejja nikkunsidraw il-possibbiltà ta 'strumentazzjoni sempliċi tal-kodiċi f'każ li xi parti tal-periferija ma tiġix implimentata. Pereżempju, jekk ma jkunx inħoloq tajmer responsabbli għall-kontroll tat-trasferiment tad-dejta lid-DMA (il-kontroll isir fil-funzjoni ws2812b_waitli jinsab fi 0x08006840
), allura l-firmware dejjem jistenna li l-bandiera tiġi reset busyli jinsab fi 0x200004C4
li turi l-okkupazzjoni tal-linja tad-dejta DMA:
Nistgħu nidħlu din is-sitwazzjoni billi nirsetjaw il-bandiera manwalment busy immedjatament wara li tinstallah. F'IDA Pro, tista 'toħloq funzjoni Python u ssejħilha f'punt ta' waqfien, u poġġi l-punt ta 'waqfien innifsu fil-kodiċi wara li tikteb il-valur 1 mal-bandiera busy.
Breakpoint handler
L-ewwel, ejja noħolqu funzjoni Python fl-IDA. Menu Fajl - Kmand tal-iskript...
Żid snippet ġdid fil-lista fuq ix-xellug, agħtiha isem (per eżempju, BPT),
Fil-qasam tat-test fuq il-lemin, daħħal il-kodiċi tal-funzjoni:
def skip_dma():
print "Skipping wait ws2812..."
value = Byte(0x200004C4)
if value == 1:
PatchDbgByte(0x200004C4, 0)
return False
Wara dan, ikklikkja Mexxi u agħlaq it-tieqa tal-iskript.
Issa ejja mmorru għall-kodiċi fi 0x0800688A
, issettja breakpoint (ċavetta F2), editjah (menu tal-kuntest Editja breakpoint...), tinsiex issettja t-tip ta’ script għal Python:
Jekk il-valur tal-bandiera kurrenti busy ugwali għal 1, allura għandek tesegwixxi l-funzjoni skip_dma fil-linja tal-iskrittura:
Jekk tmexxi l-firmware għall-eżekuzzjoni, l-iskattar tal-kodiċi tal-immaniġġjar tal-breakpoint jista 'jidher fit-tieqa tal-IDA output bil-linja Skipping wait ws2812...
. Issa l-firmware mhux se jistenna li l-bandiera tiġi reset busy.
Interazzjoni ma 'l-emulator
Emulazzjoni għall-fini ta 'emulazzjoni x'aktarx li tikkawża delight u ferħ. Huwa ħafna aktar interessanti jekk l-emulator jgħin lir-riċerkatur biex jara d-dejta fil-memorja jew jistabbilixxi l-interazzjoni tal-ħjut.
Aħna ser nuruk kif dinamikament tistabbilixxi interazzjoni bejn il-kompiti RTOS. L-ewwel għandek twaqqaf l-eżekuzzjoni tal-kodiċi jekk ikun qed jaħdem. Jekk tmur għall-funzjoni dħul_task_bluetooth lill-fergħa tal-ipproċessar tal-kmand "LED" (indirizz 0x080057B8
), imbagħad tista 'tara x'inhu maħluq l-ewwel u mbagħad jintbagħat lill-kju tas-sistema ledControlQueueHandle xi messaġġ.
Għandek tistabbilixxi breakpoint biex taċċessa l-varjabbli ledControlQueueHandleli jinsab fi 0x20000624
u kompli tesegwixxi l-kodiċi:
Bħala riżultat, il-waqfien se jseħħ l-ewwel fl-indirizz 0x080057CA
qabel issejjaħ il-funzjoni osMailAlloc, imbagħad fl-indirizz 0x08005806
qabel issejjaħ il-funzjoni osMailPut, imbagħad wara ftit - għall-indirizz 0x08005BD4
(qabel issejjaħ il-funzjoni osMailGet), li tappartjeni għall-funzjoni leds_task_entry (LED-kompitu), jiġifieri, il-kompiti mibdula, u issa l-LED-kompitu rċeviet kontroll.
B'dan il-mod sempliċi tista 'tistabbilixxi kif il-kompiti RTOS jinteraġixxu ma' xulxin.
Naturalment, fir-realtà, l-interazzjoni tal-kompiti tista 'tkun aktar ikkumplikata, iżda bl-użu ta' emulatur, it-traċċar ta 'din l-interazzjoni jsir inqas impenjattiv.
Tnedija b'Radare2
Ma tistax tinjora għodda universali bħal Radare2.
Biex tikkonnettja mal-emulatur billi tuża r2, il-kmand ikun jidher bħal dan:
radare2 -A -a arm -b 16 -d gdb://localhost:23946 rhino_fw42k6.elf
Tnedija disponibbli issa (dc
) u waqqaf l-eżekuzzjoni (Ctrl+C).
Sfortunatament, bħalissa, r2 għandu problemi meta jaħdem mal-hardware gdb server u t-tqassim tal-memorja; minħabba dan, breakpoints u Steps ma jaħdmux (kmand ds
). Nittamaw li dan jiġi rranġat dalwaqt.
Tiġri bl-Eclipse
Waħda mill-għażliet għall-użu tal-emulator hija li tiddibaggja l-firmware tal-apparat li qed jiġi żviluppat. Għaċ-ċarezza, se nużaw ukoll il-firmware Rhino. Tista 'tniżżel is-sorsi tal-firmware
Se nużaw Eclipse mis-sett bħala IDE
Sabiex l-emulator jgħabbi l-firmware miġbura direttament f'Eclipse, trid iżżid il-parametru firmware=null
għall-kmand tat-tnedija tal-emulatur:
binkopycat -g 23946 -n rhino -l user -y modules -p firmware=null,tty_dbg=COM26,tty_bt=COM28
Twaqqif tal-konfigurazzjoni tad-debug
F'Eclipse, agħżel il-menu Mexxi - Debug Konfigurazzjonijiet... Fit-tieqa li tiftaħ, fit-taqsima Debugging tal-Hardware GDB għandek bżonn iżżid konfigurazzjoni ġdida, imbagħad fit-tab "Prinċipali" speċifika l-proġett attwali u l-applikazzjoni għad-debugging:
Fuq it-tab "Debugger" għandek bżonn tispeċifika l-kmand GDB:
${openstm32_compiler_path}arm-none-eabi-gdb
U daħħal ukoll il-parametri għall-konnessjoni mas-server GDB (host u port):
Fuq it-tab "Startup", trid tispeċifika l-parametri li ġejjin:
- ippermetti checkbox Tagħbija immaġni (sabiex l-immaġni tal-firmware immuntata titgħabba fl-emulator);
- ippermetti checkbox Is-simboli tat-tagħbija;
- żid kmand tat-tnedija:
set $pc = *0x08000004
(issettja r-reġistru tal-PC għall-valur mill-memorja fl-indirizz0x08000004
- l-indirizz huwa maħżun hemm ResetHandler).
Oqgħod attent, Jekk ma tridx tniżżel il-fajl tal-firmware minn Eclipse, allura l-għażliet Tagħbija immaġni и Mexxi kmandi m'hemmx għalfejn tindika.
Wara li tikklikkja Debug, tista 'taħdem fil-mod debugger:
- eżekuzzjoni tal-kodiċi pass pass
- jinteraġixxu ma' breakpoints
Innota. Eclipse għandha, hmm... xi kwirkijiet... u trid tgħix magħhom. Pereżempju, jekk meta tibda d-debugger jidher il-messaġġ "L-ebda sors disponibbli għal "0x0"", imbagħad eżegwixxi l-kmand Pass (F5)
Minflok ma tikkonkludi
L-emulazzjoni tal-kodiċi nattiv hija ħaġa interessanti ħafna. Isir possibbli għal żviluppatur ta 'apparat li jiddebuggja l-firmware mingħajr apparat reali. Għal riċerkatur, hija opportunità li twettaq analiżi tal-kodiċi dinamika, li mhux dejjem hija possibbli anke b'apparat.
Irridu nipprovdu speċjalisti b'għodda li hija konvenjenti, moderatament sempliċi u ma tieħux ħafna sforz u ħin biex titwaqqaf u titħaddem.
Ikteb fil-kummenti dwar l-esperjenza tiegħek billi tuża emulaturi tal-ħardwer. Nistednuk tiddiskuti u nkunu kuntenti li nwieġbu l-mistoqsijiet.
Utenti reġistrati biss jistgħu jipparteċipaw fl-istħarriġ.
Għalxiex qed tuża l-emulator?
-
Jien niżviluppa (debug) firmware
-
Qed nirriċerka l-firmware
-
Inniedi logħob (Dendi, Sega, PSP)
-
xi ħaġa oħra (ikteb fil-kummenti)
Ivvutaw 7 utent. 2 utent astjenew.
Liema softwer tuża biex timita l-kodiċi nattiv?
-
QEMU
-
Magna tal-unicorn
-
Proteus
-
xi ħaġa oħra (ikteb fil-kummenti)
Ivvutaw 6 utent. 2 utent astjenew.
X'tixtieq ittejjeb fl-emulator li qed tuża?
-
Irrid veloċità
-
Irrid faċilità ta 'setup/tnedija
-
Irrid aktar għażliet għall-interazzjoni mal-emulator (API, ganċijiet)
-
Jien kuntent b’kollox
-
xi ħaġa oħra (ikteb fil-kummenti)
Ivvutaw 8-il utent. utent 1 astjena.
Sors: www.habr.com