Жиналыс аясында 0x0A DC7831
Бұл мақалада біз эмуляторда құрылғының микробағдарламасын қалай іске қосу керектігін, отладчикпен өзара әрекеттесуді көрсетуді және микробағдарламаның шағын динамикалық талдауын орындауды сипаттаймыз.
тарихын
Баяғыда алыстағы галактикада
Бірнеше жыл бұрын біздің зертханада құрылғының микробағдарламасын зерттеу қажеттілігі туындады. Микробағдарлама жүктегішпен қысылып, қаптамадан шығарылды. Ол мұны өте күрделі түрде жасады, жадтағы деректерді бірнеше рет ауыстырды. Ал микробағдарлама өзі содан кейін перифериялық құрылғылармен белсенді әрекеттесті. Мұның бәрі MIPS ядросында.
Объективті себептерге байланысты бар эмуляторлар бізге сәйкес келмеді, бірақ біз әлі де кодты іске қосқымыз келді. Содан кейін біз өз эмуляторымызды жасауды шештік, ол минимумды жасайды және негізгі микробағдарламаны шығаруға мүмкіндік береді. Біз оны қолданып көрдік және ол жұмыс істеді. Біз негізгі микробағдарламаны орындау үшін перифериялық құрылғыларды қоссақ ше деп ойладық. Бұл қатты ауыртпады - және ол да жұмыс істеді. Біз тағы да ойланып, толыққанды эмулятор жасауды шештік.
Нәтиже компьютерлік жүйелер эмуляторы болды
Неліктен Kopycat?
Сөз ойыны бар.
- еліктеме (ағылшынша, зат есім [ˈkɒpɪkæt]) – еліктеуіш, еліктеуіш
- мысық (ағылшынша, зат есім [ˈkæt]) - мысық, мысық - жобаны жасаушылардың бірінің сүйікті жануары
- «K» әрпі Котлин бағдарламалау тілінен алынған
Көшірме
Эмуляторды жасау кезінде өте нақты мақсаттар қойылды:
- жаңа перифериялық құрылғыларды, модульдерді, процессор ядроларын жылдам жасау мүмкіндігі;
- әртүрлі модульдерден виртуалды құрылғыны құрастыру мүмкіндігі;
- виртуалды құрылғының жадына кез келген екілік деректерді (микробағдарламаны) жүктеу мүмкіндігі;
- суреттермен жұмыс істеу мүмкіндігі (жүйе күйінің суреті);
- кірістірілген отладчик арқылы эмулятормен өзара әрекеттесу мүмкіндігі;
- дамыту үшін тамаша заманауи тіл.
Нәтижесінде іске асыру үшін Котлин таңдалды, автобус архитектурасы (бұл модульдер бір-бірімен виртуалды деректер шиналары арқылы байланысады), құрылғыны сипаттау пішімі ретінде JSON және отладчикпен өзара әрекеттесу хаттамасы ретінде GDB RSP.
Әзірлеу екі жылдан сәл астам уақыт бойы жүріп жатыр және белсенді түрде жалғасуда. Осы уақыт ішінде MIPS, x86, V850ES, ARM және PowerPC процессорларының ядролары енгізілді.
Жоба өсіп келеді және оны көпшілікке таныстыратын кез келді. Біз жобаның егжей-тегжейлі сипаттамасын кейінірек жасаймыз, бірақ әзірге біз Kopycat-ті пайдалануға назар аударамыз.
Ең шыдамсыздар үшін эмулятордың промо-нұсқасын жүктеп алуға болады
Эмулятордағы мүйізтұмсық
Еске салайық, бұған дейін SMARTRHINO-2018 конференциясы үшін кері инженерия дағдыларын үйрету үшін «Мүйізтұмсық» сынақ құрылғысы жасалған болатын. Микробағдарламаны статикалық талдау процесі сипатталған
Енді «динамиктерді» қосып, микробағдарламаны эмуляторда іске қосып көрейік.
Бізге қажет:
1) Java 1.8
2) Python және модуль
Windows үшін:
1)
2)
Linux үшін:
1) socat
GDB клиенті ретінде Eclipse, IDA Pro немесе radare2 пайдалануға болады.
Бұл қалай жұмыс істейді?
Эмуляторда микробағдарламаны орындау үшін нақты құрылғының аналогы болып табылатын виртуалды құрылғыны «жинақтау» қажет.
Нақты құрылғы («мүйізтұмсық») блок-схемада көрсетілуі мүмкін:
Эмулятордың модульдік құрылымы бар және соңғы виртуалды құрылғыны 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"]
]
}
Параметрге назар аударыңыз микробағдарлама бөлім параменттер виртуалды құрылғыға микробағдарлама ретінде жүктелетін файлдың атауы.
Виртуалды құрылғы және оның негізгі операциялық жүйемен әрекеттесуін келесі диаграмма арқылы көрсетуге болады:
Эмулятордың ағымдағы сынақ данасы негізгі ОЖ-ның COM порттарымен өзара әрекеттесуді қамтиды (Bluetooth модулі үшін UART және UART жөндеу). Бұл құрылғылар қосылған нақты порттар немесе виртуалды COM порттары болуы мүмкін (бұл үшін сізге қажет com0com/socat).
Қазіргі уақытта эмулятормен сырттан әрекеттесудің екі негізгі жолы бар:
- GDB RSP протоколы (сәйкесінше, осы протоколды қолдайтын құралдар Eclipse / IDA / radare2);
- ішкі эмулятор пәрмен жолы (Argparse немесе Python).
Виртуалды COM порттары
Терминал арқылы жергілікті компьютердегі виртуалды құрылғының UART-пен өзара әрекеттесу үшін сізге байланысты виртуалды COM порттарының жұбын жасау керек. Біздің жағдайда бір портты эмулятор, ал екіншісін терминалдық бағдарлама (PuTTY немесе экран) пайдаланады:
com0com пайдалану
Виртуалды COM порттары com0com жинағындағы орнату утилитасының көмегімен конфигурацияланады (консоль нұсқасы - C: Program Files (x86)com0comsetupс.exe, немесе GUI нұсқасы - C: Program Files (x86)com0comsetupg.exe):
Ұяшықтарды белгілеңіз буфердің асып кетуін қосыңыз барлық жасалған виртуалды порттар үшін, әйтпесе эмулятор COM портынан жауап күтеді.
socat пайдалану
UNIX жүйелерінде виртуалды COM порттарын эмулятор socat утилитасын пайдаланып автоматты түрде жасайды; бұл үшін эмуляторды іске қосқан кезде порт атауында префиксті көрсету жеткілікті. socat:
.
Ішкі пәрмен жолы интерфейсі (Argparse немесе Python)
Kopycat консольдік қолданба болғандықтан, эмулятор оның нысандарымен және айнымалы мәндерімен әрекеттесу үшін екі пәрмен жолы интерфейсін ұсынады: Argparse және Python.
Argparse - Kopycat ішіне орнатылған CLI және әрқашан барлығына қол жетімді.
Балама CLI - Python интерпретаторы. Оны пайдалану үшін Jep Python модулін орнату және эмуляторды Python-мен жұмыс істеу үшін конфигурациялау қажет (пайдаланушының негізгі жүйесінде орнатылған Python интерпретаторы пайдаланылады).
Python модулін орнату Jep
Linux астында Jep пип арқылы орнатылуы мүмкін:
pip install jep
Windows жүйесінде Jep орнату үшін алдымен Windows SDK және сәйкес Microsoft Visual Studio бағдарламасын орнату керек. Біз мұны сізге сәл жеңілдеттік және
pip install jep-3.8.2-cp27-cp27m-win_amd64.whl
Jep орнатуды тексеру үшін пәрмен жолында іске қосу керек:
python -c "import jep"
Жауап ретінде келесі хабарлама алынуы керек:
ImportError: Jep is not supported in standalone Python, it must be embedded in Java.
Жүйеңізге арналған эмулятор пакеттік файлында (copycat.bat - Windows үшін, көшірмеші - Linux үшін) параметрлер тізіміне DEFAULT_JVM_OPTS
қосымша параметрді қосыңыз Djava.library.path
— ол орнатылған Jep модуліне жолды қамтуы керек.
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 іске қосылуда
Эмулятор консольдық JVM қолданбасы болып табылады. Іске қосу операциялық жүйенің пәрмен жолы сценарийі (sh/cmd) арқылы жүзеге асырылады.
Windows жүйесінде іске қосу пәрмені:
binkopycat -g 23946 -n rhino -l user -y library -p firmware=firmwarerhino_pass.bin,tty_dbg=COM26,tty_bt=COM28
socat утилитасын пайдаланып Linux астында іске қосу пәрмені:
./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
— негізгі жүйелік модульдің атауы (құрастырылған құрылғы);-l user
— негізгі модульді іздеуге арналған кітапхананың атауы;-y library
— құрылғыға енгізілген модульдерді іздеу жолы;firmwarerhino_pass.bin
— микробағдарлама файлына жол;- COM26 және COM28 виртуалды COM порттары болып табылады.
Нәтижесінде сұрау көрсетіледі 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-мен өзара әрекеттесу
Тестілеуді жеңілдету үшін біз Rhino микробағдарламасын пішінде IDA-да талдау үшін бастапқы файл ретінде пайдаланамыз
Сондай-ақ негізгі микробағдарламаны мета ақпаратсыз пайдалануға болады.
IDA Pro жүйесінде Kopycat іске қосылғаннан кейін Debugger мәзірінде « тармағына өтіңіз.Түзеткішті ауыстыру…«және» таңдаңызҚашықтағы GDB жөндеу құралы«. Содан кейін қосылымды орнатыңыз: мәзір Түзеткіш - Процесс опциялары…
Мәндерді орнатыңыз:
- Қолданба - кез келген мән
- Хост атауы: 127.0.0.1 (немесе Kopycat жұмыс істейтін қашықтағы құрылғының IP мекенжайы)
- Порт: 23946
Енді жөндеу түймесі қолжетімді болады (F9 пернесі):
Эмулятордағы отладчик модуліне қосылу үшін оны басыңыз. IDA отладка режиміне өтеді, қосымша терезелер қолжетімді болады: регистрлер, стек туралы ақпарат.
Енді біз отладчиктің барлық стандартты мүмкіндіктерін пайдалана аламыз:
- нұсқауларды кезең-кезеңімен орындау (Кіріңіз и Басыңыз — сәйкесінше F7 және F8 пернелері);
- орындауды бастау және кідірту;
- код пен деректер үшін тоқтау нүктелерін жасау (F2 пернесі).
Түзеткішке қосылу микробағдарлама кодын іске қосу дегенді білдірмейді. Ағымдағы орындалу орны мекенжай болуы керек 0x08006A74
— функцияның басталуы Reset_Handler. Тізімді төмен айналдырсаңыз, функция шақыруын көре аласыз басты. Курсорды осы жолға қоюға болады (мекен-жай 0x08006ABE
) және операцияны орындаңыз Курсорға дейін орындаңыз (F4 пернесі).
Содан кейін функцияны енгізу үшін F7 пернесін басуға болады басты.
Егер сіз пәрменді орындасаңыз Процесті жалғастыру (F9 пернесі), содан кейін бір түймемен «Күтіңіз» терезесі пайда болады Тоқтату:
Сіз басқанда Тоқтату микробағдарлама кодын орындау тоқтатылады және ол үзілген кодтағы сол мекенжайдан жалғастырылуы мүмкін.
Кодты орындауды жалғастырсаңыз, виртуалды COM порттарына қосылған терминалдарда келесі жолдарды көресіз:
«Күйді айналып өту» жолының болуы виртуалды Bluetooth модулінің пайдаланушының COM портынан деректерді қабылдау режиміне ауысқанын көрсетеді.
Енді Bluetooth терминалында (суреттегі COM29) Rhino протоколына сәйкес командаларды енгізуге болады. Мысалы, «MEOW» пәрмені Bluetooth терминалына «mur-mur» жолын қайтарады:
Маған толық еліктемеңіз
Эмуляторды құру кезінде сіз белгілі бір құрылғының егжей-тегжейлі/эмуляция деңгейін таңдай аласыз. Мысалы, Bluetooth модулін әртүрлі жолдармен эмуляциялауға болады:
- құрылғы командалардың толық жиынтығымен толығымен эмуляцияланған;
- AT командалары эмуляцияланады, ал деректер ағыны негізгі жүйенің COM портынан алынады;
- виртуалды құрылғы деректерді нақты құрылғыға толық қайта бағыттауды қамтамасыз етеді;
- әрқашан «OK» қайтаратын қарапайым түтік ретінде.
Эмулятордың ағымдағы нұсқасы екінші тәсілді қолданады - виртуалды Bluetooth модулі конфигурацияны орындайды, содан кейін ол негізгі жүйенің COM портынан эмулятордың UART портына деректерді «проксиге жіберу» режиміне ауысады.
Периферияның қандай да бір бөлігі орындалмаған жағдайда кодты қарапайым аспаптастыру мүмкіндігін қарастырайық. Мысалы, егер DMA-ға деректерді беруді басқаруға жауапты таймер жасалмаса (тексеру функцияда орындалады ws2812b_waitмекен-жайында орналасқан 0x08006840
), содан кейін микробағдарлама әрқашан жалаушаның қалпына келтірілуін күтеді бос емесмекен-жайында орналасқан 0x200004C4
ол DMA деректер желісінің толтырылуын көрсетеді:
Біз жалаушаны қолмен қалпына келтіру арқылы бұл жағдайдан шыға аламыз бос емес оны орнатқаннан кейін бірден. IDA Pro бағдарламасында сіз Python функциясын жасай аласыз және оны тоқтау нүктесінде шақыра аласыз және жалаушаға 1 мәнін жазғаннан кейін тоқтау нүктесінің өзін кодқа қоюға болады. бос емес.
Үзіліс нүктесі өңдегіші
Біріншіден, IDA-да Python функциясын жасайық. Мәзір Файл - Сценарий пәрмені...
Сол жақтағы тізімге жаңа үзінді қосыңыз, оған ат беріңіз (мысалы, BPT),
Оң жақтағы мәтіндік өріске функция кодын енгізіңіз:
def skip_dma():
print "Skipping wait ws2812..."
value = Byte(0x200004C4)
if value == 1:
PatchDbgByte(0x200004C4, 0)
return False
Осыдан кейін біз басамыз жүгіру және сценарий терезесін жабыңыз.
Енді кодқа көшейік 0x0800688A
, тоқтау нүктесін орнатыңыз (F2 пернесі), оны өңдеңіз (контекстік мәзір Тоқтау нүктесін өңдеу...), сценарий түрін Python етіп орнатуды ұмытпаңыз:
Ағымдағы жалаудың мәні болса бос емес 1-ге тең болса, функцияны орындау керек skip_dma сценарий жолында:
Микробағдарламаны орындау үшін іске қоссаңыз, тоқтау нүктесі өңдегішінің кодын іске қосуды IDA терезесінде көруге болады. шығыс сызық бойынша Skipping wait ws2812...
. Енді микробағдарлама жалаушаның қалпына келтірілуін күтпейді бос емес.
Эмулятормен өзара әрекеттесу
Еліктеу үшін эмуляция рахат пен қуаныш тудыруы екіталай. Эмулятор зерттеушіге жадтағы деректерді көруге немесе ағындардың өзара әрекеттесуін орнатуға көмектессе, әлдеқайда қызықты.
Біз RTOS тапсырмалары арасындағы өзара әрекеттесуді динамикалық түрде орнату жолын көрсетеміз. Егер код іске қосылған болса, алдымен оның орындалуын кідірту керек. Функцияға барсаңыз bluetooth_тапсырмасы_енгізу «LED» командасының өңдеу тармағына (мекен-жайы 0x080057B8
), содан кейін алдымен ненің жасалғанын, содан кейін жүйе кезегіне жіберілгенін көре аласыз ledControlQueueHandle кейбір хабарлама.
Айнымалыға қол жеткізу үшін тоқтау нүктесін орнату керек ledControlQueueHandleмекен-жайында орналасқан 0x20000624
және кодты орындауды жалғастырыңыз:
Нәтижесінде тоқтау алдымен мекенжайда болады 0x080057CA
функцияны шақырмас бұрын osMailAlloc, содан кейін мекенжай бойынша 0x08005806
функцияны шақырмас бұрын osMailPut, содан кейін біраз уақыттан кейін - мекенжайға 0x08005BD4
(функцияны шақырмас бұрын osMailGet) функциясына жатады leds_task_entry (LED-тапсырма), яғни тапсырмалар ауыстырылды, енді LED-тапсырма басқаруды алды.
Осы қарапайым жолмен RTOS тапсырмаларының бір-бірімен қалай әрекеттесетінін орнатуға болады.
Әрине, шын мәнінде, тапсырмалардың өзара әрекеттесуі күрделірек болуы мүмкін, бірақ эмуляторды пайдалану арқылы бұл өзара әрекеттесуді бақылау қиынырақ болады.
Radare2 арқылы іске қосыңыз
Radare2 сияқты әмбебап құралды елемеуге болмайды.
Эмуляторға r2 арқылы қосылу үшін пәрмен келесідей болады:
radare2 -A -a arm -b 16 -d gdb://localhost:23946 rhino_fw42k6.elf
Іске қосу қазір қолжетімді (dc
) және орындауды кідірту (Ctrl+C).
Өкінішке орай, қазіргі уақытта r2 аппараттық gdb серверімен және жад орналасуымен жұмыс істеу кезінде проблемалар бар; осыған байланысты тоқтау нүктелері мен қадамдар жұмыс істемейді (пәрмен ds
). Бұл жақын арада түзетіледі деп үміттенеміз.
Eclipse көмегімен іске қосу
Эмуляторды пайдалану нұсқаларының бірі әзірленіп жатқан құрылғының микробағдарламасын жөндеу болып табылады. Түсінікті болу үшін біз Rhino микробағдарламасын да қолданамыз. Микробағдарлама көздерін жүктеп алуға болады
Біз Eclipse жиынтығын IDE ретінде қолданамыз
Эмулятордың тікелей Eclipse-де құрастырылған микробағдарламаны жүктеуі үшін параметрді қосу керек. firmware=null
эмуляторды іске қосу пәрменіне:
binkopycat -g 23946 -n rhino -l user -y modules -p firmware=null,tty_dbg=COM26,tty_bt=COM28
Түзету конфигурациясын орнату
Eclipse бағдарламасында мәзірді таңдаңыз Іске қосу - конфигурацияларды түзету... Ашылған терезеде бөлімде GDB жабдықты жөндеу жаңа конфигурацияны қосу керек, содан кейін «Негізгі» қойындысында ағымдағы жобаны және жөндеуге арналған қолданбаны көрсетіңіз:
«Отлағыш» қойындысында GDB пәрменін көрсету керек:
${openstm32_compiler_path}arm-none-eabi-gdb
Сондай-ақ GDB серверіне (хост және порт) қосылу параметрлерін енгізіңіз:
«Іске қосу» қойындысында келесі параметрлерді көрсету керек:
- құсбелгісін қосыңыз Кескінді жүктеңіз (жинақталған микробағдарлама кескіні эмуляторға жүктелуі үшін);
- құсбелгісін қосыңыз Таңбаларды жүктеңіз;
- іске қосу пәрменін қосыңыз:
set $pc = *0x08000004
(ДК регистрін мекенжайдағы жадтағы мәнге орнатыңыз0x08000004
- мекенжай сонда сақталады ResetHandler).
назар аударыңыз, микробағдарлама файлын Eclipse бағдарламасынан жүктеп алғыңыз келмесе, онда опциялар Кескінді жүктеңіз и Пәрмендерді орындау көрсетудің қажеті жоқ.
Түзету түймесін басқаннан кейін сіз отладчик режимінде жұмыс істей аласыз:
- қадамдық кодты орындау
- тоқтау нүктелерімен әрекеттесу
ескерту. Eclipse, хмм... кейбір ерекшеліктер бар ... және сіз олармен өмір сүруіңіз керек. Мысалы, отладчикті іске қосқан кезде «0x0″ үшін дереккөз жоқ» хабары пайда болса, Қадам пәрменін орындаңыз (F5)
Орнына жасасу
Жергілікті кодты эмуляциялау өте қызықты нәрсе. Құрылғы әзірлеушісі микробағдарламаны нақты құрылғысыз түзете алады. Зерттеуші үшін бұл динамикалық код талдауын жүргізу мүмкіндігі, ол тіпті құрылғымен де мүмкін емес.
Біз мамандарға ыңғайлы, орташа қарапайым және орнату мен іске қосу көп күш пен уақытты қажет етпейтін құралды ұсынғымыз келеді.
Аппараттық эмуляторларды пайдалану тәжірибеңіз туралы түсініктемелерде жазыңыз. Біз сізді талқылауға шақырамыз және сұрақтарға жауап беруге қуанышты боламыз.
Сауалнамаға тек тіркелген пайдаланушылар қатыса алады.
Эмуляторды не үшін пайдаланасыз?
-
Мен микробағдарламаны әзірлеймін (отлад).
-
Мен микробағдарламаны зерттеп жатырмын
-
Мен ойындарды іске қосамын (Dendi, Sega, PSP)
-
тағы бір нәрсе (түсініктемелерде жазыңыз)
7 пайдаланушы дауыс берді. 2 пайдаланушы қалыс қалды.
Жергілікті кодты эмуляциялау үшін қандай бағдарламалық құралды пайдаланасыз?
-
QEMU
-
Unicorn қозғалтқышы
-
Proteus
-
тағы бір нәрсе (түсініктемелерде жазыңыз)
6 пайдаланушы дауыс берді. 2 пайдаланушы қалыс қалды.
Сіз пайдаланып жатқан эмуляторда нені жақсартқыңыз келеді?
-
Мен жылдамдықты қалаймын
-
Орнату/іске қосу жеңілдігін қалаймын
-
Мен эмулятормен (API, ілгектер) әрекеттесу үшін көбірек опцияларды қалаймын
-
Мен бәріне ризамын
-
тағы бір нәрсе (түсініктемелерде жазыңыз)
8 қолданушы дауыс берді. 1 пайдаланушы қалыс қалды.
Ақпарат көзі: www.habr.com