Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบเบญเบ‡เบ›เบฐเบŠเบธเบก 0x0A DC7831 DEF CON Nizhny Novgorod เปƒเบ™เบงเบฑเบ™เบ—เบต 16 เป€เบ”เบทเบญเบ™เบเบธเบกเบžเบฒ, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเบซเบผเบฑเบเบเบฒเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบฅเบฐเบซเบฑเบ”เบ–เบฒเบ™เบชเบญเบ‡เปเบฅเบฐเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบ‡ - hardware platform emulator Copycat.

เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบญเบฐเบ—เบดเบšเบฒเบเบงเบดเบ—เบตเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป€เบŸเบตเบกเปเบงเบญเบธเบ›เบฐเบเบญเบ™เปƒเบ™ emulator, เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบเบฑเบš debugger, เปเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบ‚เบญเบ‡ firmware.

เบ›เบฐเบงเบฑเบ”เบชเบฒเบ”

เบ”เบปเบ™โ€‹เบ™เบฒเบ™โ€‹เบกเบฒโ€‹เปเบฅเป‰เบงโ€‹เปƒเบ™ galaxy เป„เบโ€‹

เบชเบญเบ‡เบชเบฒเบกเบ›เบตเบเปˆเบญเบ™เบขเบนเปˆเปƒเบ™เบซเป‰เบญเบ‡เบ—เบปเบ”เบฅเบญเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบชเบทเบšเบชเบงเบ™เป€เบŸเบตเบกเปเบงเบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™. เป€เบŸเบตเบกเปเบงเป„เบ”เป‰เบ–เบทเบเบšเบตเบšเบญเบฑเบ” เปเบฅเบฐ เบ–เบญเบ”เบญเบญเบเบ”เป‰เบงเบเป€เบ„เบทเปˆเบญเบ‡ bootloader. เบฅเบฒเบงเป€เบฎเบฑเบ”เปเบšเบšเบ™เบตเป‰เบ”เป‰เบงเบเบงเบดเบ—เบตเบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบ, เบ›เปˆเบฝเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบซเบผเบฒเบเบ„เบฑเป‰เบ‡. เปเบฅเบฐ firmware เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ›เบฐเบ•เบดเบชเปเบฒเบžเบฑเบ™เบขเปˆเบฒเบ‡เบˆเบดเบ‡เบˆเบฑเบ‡เบเบฑเบšเบญเบธเบ›เบฐเบเบญเบ™เบ•เปเปˆเบžเปˆเบงเบ‡. เปเบฅเบฐเบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เบขเบนเปˆเปƒเบ™เบซเบผเบฑเบ MIPS.

เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบˆเบธเบ”เบ›เบฐเบชเบปเบ‡, emulators เบ—เบตเปˆเบกเบตเบขเบนเปˆเบšเปเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบฅเบฐเบซเบฑเบ”. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเป€เบฎเบฑเบ” emulator เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบ‡, เป€เบŠเบดเปˆเบ‡เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบ•เปเบฒเปˆเบชเบธเบ”เบ—เบตเปˆเปเบฅเบฐเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒ unpack firmware เบ•เบปเป‰เบ™เบ•เป. เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบžเบฐเบเบฒเบเบฒเบกเบกเบฑเบ™เปเบฅเบฐเบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบ. เบžเบงเบเป€เบฎเบปเบฒเบ„เบดเบ”เบงเปˆเบฒ, เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบžเบตเปˆเบกเบญเบธเบ›เบฐเบเบญเบ™เป€เบชเบตเบกเป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบŸเบตเบกเปเบงเบ•เบปเป‰เบ™เบ•เป. เบกเบฑเบ™โ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เป€เบˆเบฑเบšโ€‹เบ›เบงเบ”โ€‹เบซเบผเบฒเบ - เปเบฅเบฐโ€‹เบกเบฑเบ™โ€‹เป„เบ”เป‰โ€‹เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹เป€เบŠเบฑเปˆเบ™โ€‹เบ”เบฝเบงโ€‹เบเบฑเบ™โ€‹. เบžเบงเบเป€เบฎเบปเบฒเบ„เบดเบ”เบญเบตเบเป€เบ—เบทเปˆเบญเปœเบถเปˆเบ‡ เปเบฅเบฐเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเป€เบฎเบฑเบ”เบ•เบปเบงเบˆเบณเบฅเบญเบ‡เปเบšเบšเป€เบ•เบฑเบกเบฎเบนเบšเปเบšเบš.

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบกเปˆเบ™ emulator เบฅเบฐเบšเบปเบšเบ„เบญเบกเบžเบดเบงเป€เบ•เบต Copycat.

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat
เป€เบ›เบฑเบ™เบซเบเบฑเบ‡ Kopycat?

เบกเบตเบเบฒเบ™เบซเบผเบดเป‰เบ™เบเปˆเบฝเบงเบเบฑเบšเบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†.

  1. copycat (เบžเบฒเบชเบฒเบญเบฑเบ‡เบเบดเบ”, noun [หˆkษ’pษชkรฆt]) - imitator, imitator
  2. cat (เบžเบฒเบชเบฒเบญเบฑเบ‡เบเบดเบ”, noun [หˆkรฆt]) - cat, cat - เบชเบฑเบ” favorite เบ‚เบญเบ‡เบซเบ™เบถเปˆเบ‡เปƒเบ™เบœเบนเป‰เบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™.
  3. เบ•เบปเบงเบญเบฑเบเบชเบญเบ™ "K" เปเบกเปˆเบ™เบกเบฒเบˆเบฒเบเบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Kotlin

Copycat

เป€เบกเบทเปˆเบญเบชเป‰เบฒเบ‡ emulator, เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบชเบฐเป€เบžเบฒเบฐเบซเบผเบฒเบเป„เบ”เป‰เบ–เบทเบเบ•เบฑเป‰เบ‡เป„เบงเป‰:

  • เบ„เบงเบฒเบกโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เบญเบธโ€‹เบ›เบฐโ€‹เบเบญเบ™โ€‹เปƒเบซเบกเปˆโ€‹เบขเปˆเบฒเบ‡โ€‹เบงเปˆเบญเบ‡โ€‹เป„เบงโ€‹, เป‚เบกโ€‹เบ”เบนเบ™โ€‹, เบซเบผเบฑเบโ€‹เป‚เบฎเบ‡โ€‹เบ‡เบฒเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹;
  • เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบ›เบฐเบเบญเบšเบญเบธเบ›เบฐเบเบญเบ™ virtual เบˆเบฒเบเป‚เบกเบ”เบนเบ™เบ•เปˆเบฒเบ‡เป†;
  • เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เป‚เบซเบผเบ”เบ‚เปเป‰เบกเบนเบ™เบ–เบฒเบ™เบชเบญเบ‡ (เป€เบŸเบตเบกเปเบง) เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™ virtual;
  • เบ„เบงเบฒเบกโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹เบฎเปˆเบงเบกโ€‹เบเบฑเบš snapshots (เบฎเบนเบšโ€‹เบžเบฒเบšโ€‹เบ‚เบญเบ‡โ€‹เบฅเบฑเบ”โ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹)โ€‹;
  • เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบžเบปเบงเบžเบฑเบ™เบเบฑเบš emulator เบœเปˆเบฒเบ™ debugger เบเปเปˆเบชเป‰เบฒเบ‡เปƒเบ™;
  • เบžเบฒเบชเบฒเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบ—เบตเปˆเบชเบงเบเบ‡เบฒเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, Kotlin เป„เบ”เป‰เบ–เบทเบเป€เบฅเบทเบญเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบฅเบปเบ”เป€เบก (เบ™เบตเป‰เปเบกเปˆเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป‚เบกเบ”เบนเบ™เบ•เบดเบ”เบ•เปเปˆเบชเบทเปˆเบชเบฒเบ™เบเบฑเบšเบเบฑเบ™เปเบฅเบฐเบเบฑเบ™เบœเปˆเบฒเบ™เบฅเบปเบ”เป€เบกเบ‚เปเป‰เบกเบนเบ™ virtual), JSON เป€เบ›เบฑเบ™เบฎเบนเบšเปเบšเบšเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบญเบธเบ›เบฐเบเบญเบ™, เปเบฅเบฐ GDB RSP เป€เบ›เบฑเบ™เป‚เบ›เป‚เบ•เบ„เบญเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบเบฑเบš debugger.

เบเบฒเบ™โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เป„เบ”เป‰โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เป„เบ›โ€‹เป€เบ›เบฑเบ™โ€‹เบžเบฝเบ‡โ€‹เป€เบฅเบฑเบโ€‹เบ™เป‰เบญเบโ€‹เปƒเบ™โ€‹เป„เบฅโ€‹เบเบฐโ€‹เบชเบญเบ‡โ€‹เบ›เบตโ€‹เปเบฅเบฐโ€‹เบเบฑเบ‡โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบเบฒเบ™โ€‹เบขเปˆเบฒเบ‡โ€‹เบซเป‰เบฒเบงโ€‹เบซเบฑเบ™โ€‹. เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เป€เบงเบฅเบฒเบ™เบตเป‰, เปเบเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™ MIPS, x86, V850ES, ARM, เปเบฅเบฐ PowerPC เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”.

เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ”เบฑเปˆเบ‡โ€‹เบเปˆเบฒเบงโ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เบ‚เบฐโ€‹เบซเบเบฒเบโ€‹เบ•เบปเบงโ€‹เปเบฅเบฐโ€‹เบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ™เปเบฒโ€‹เบชเบฐโ€‹เป€เบซเบ™เบตโ€‹เปƒเบซเป‰โ€‹เบชเบฒโ€‹เบ—เบฒโ€‹เบฅเบฐโ€‹เบ™เบฐโ€‹เบ—เบปเปˆเบงโ€‹เป„เบ›โ€‹. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบฎเบฑเบ”เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ•เปเปˆเบกเบฒ, เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบธเบกเปƒเบชเปˆเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ Kopycat.

เบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเบญเบปเบ”เบ—เบปเบ™เบ—เบตเปˆเบชเบธเบ”, เบฅเบธเป‰เบ™เป‚เบ›เบฃเป‚เบกเบŠเบฑเบ™เบ‚เบญเบ‡ emulator เบชเบฒเบกเบฒเบ”เบ”เบฒเบงเป‚เบซเบผเบ”เป„เบ”เป‰เบˆเบฒเบ เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ.

Rhino เปƒเบ™ emulator เป„เบ”เป‰

เบ‚เปเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบฑเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบเบญเบ‡เบ›เบฐเบŠเบธเบก SMARTRHINO-2018, เบญเบธเบ›เบฐเบเบญเบ™เบ—เบปเบ”เบชเบญเบš "Rhinoceros" เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เป€เบžเบทเปˆเบญเบชเบญเบ™เบ—เบฑเบเบชเบฐเบงเบดเบชเบฐเบงเบฐเบเปเบฒเบ”เป‰เบฒเบ™เบซเบฅเบฑเบ‡. เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเป€เบŸเบตเบกเปเบงเปเบšเบšเบ„เบปเบ‡เบ—เบตเปˆเป„เบ”เป‰เบ–เบทเบเบญเบฐเบ—เบดเบšเบฒเบเป„เบงเป‰เปƒเบ™ เบšเบปเบ”เบ‚เบฝเบ™เบ™เบตเป‰.

เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เบžเบฐเบเบฒเบเบฒเบกเป€เบžเบตเปˆเบก "เบฅเปเบฒเป‚เบžเบ‡" เปเบฅเบฐเปเบฅเปˆเบ™เป€เบŸเบตเบกเปเบงเปƒเบ™เบ•เบปเบงเบˆเปเบฒเบฅเบญเบ‡.

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™:
1) Java 1.8
2) Python เปเบฅเบฐเป‚เบกเบ”เบนเบ™ เป€เบˆเบš เป€เบžเบทเปˆเบญเปƒเบŠเป‰ Python เบžเบฒเบเปƒเบ™ emulator. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เป‚เบกเบ”เบนเบ™ WHL Jep เบชเปเบฒเบฅเบฑเบš Windows เบ”เบฒเบงโ€‹เบ™โ€‹เปŒโ€‹เป‚เบซเบฅเบ”โ€‹เบ—เบตเปˆโ€‹เบ™เบตเป‰โ€‹.

เบชเบณ เบฅเบฑเบš Windows:
1) com0com
2) Putty

เบชเปเบฒเบฅเบฑเบš Linux:
1) socat

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ Eclipse, IDA Pro เบซเบผเบท radare2 เป€เบ›เบฑเบ™เบฅเบนเบเบ„เป‰เบฒ GDB.

เบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เปเบ™เบงเปƒเบ”เป€เบฎเบฑเบ”เบงเบฝเบ?

เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ” firmware เปƒเบ™ emulator, เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡ "เบ›เบฐเบเบญเบš" เบญเบธเบ›เบฐเบเบญเบ™ virtual, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™ analogue เบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡.

เบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ ("rhino") เบชเบฒเบกเบฒเบ”เบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เปเบœเบ™เบœเบฑเบ‡เบšเบฅเบฑเบญเบ:

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

emulator เบกเบตเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เปเบšเบšเป‚เบกเบ”เบนเบ™เปเบฅเบฐเบญเบธเบ›เบฐเบเบญเบ™ virtual เบชเบธเบ”เบ—เป‰เบฒเบเบชเบฒเบกเบฒเบ”เบ–เบทเบเบญเบฐเบ—เบดเบšเบฒเบเบขเบนเปˆเปƒเบ™เป„เบŸเบฅเปŒ 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"]
  ]
}

เป€เบญเบปเบฒเปƒเบˆเปƒเบชเปˆเบเบฑเบšเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต เป€เบŸเบตเบกเปเบง เปƒเบ™เบšเบปเบ” params เปเบกเปˆเบ™เบŠเบทเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป‚เบซเบฅเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบญเบธเบ›เบฐเบเบญเบ™ virtual เป€เบ›เบฑเบ™ firmware.

เบญเบธเบ›เบฐเบเบญเบ™ virtual เปเบฅเบฐเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ‚เบญเบ‡เบกเบฑเบ™เบเบฑเบšเบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบซเบผเบฑเบเบชเบฒเบกเบฒเบ”เบชเบฐเปเบ”เบ‡เป‚เบ”เบเปเบœเบ™เบงเบฒเบ”เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เปƒเบ™โ€‹เบ›เบฐโ€‹เบˆเบธโ€‹เบšเบฑเบ™โ€‹เบ‚เบญเบ‡ emulator เบกเบตโ€‹เบเบฒเบ™โ€‹เป‚เบ•เป‰โ€‹เบ•เบญเบšโ€‹เบเบฑเบšโ€‹เบžเบญเบ” COM เบ‚เบญเบ‡ OS เบ•เบปเป‰เบ™โ€‹เบ•เป (debug UART เปเบฅเบฐ UART เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เป‚เบกโ€‹เบ”เบนเบ™ Bluetoothโ€‹)โ€‹. เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบžเบญเบ”เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบซเบผเบทเบžเบญเบ” COM virtual (เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™ com0com/socat).

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบกเบตเบชเบญเบ‡เบงเบดเบ—เบตเบ•เบปเป‰เบ™เบ•เปเปƒเบ™เบเบฒเบ™เบžเบปเบงเบžเบฑเบ™เบเบฑเบš emulator เบˆเบฒเบเบžเบฒเบเบ™เบญเบ:

  • GDB RSP protocol (เบ•เบฒเบก, เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบญเบฐเบ™เบธเบชเบฑเบ™เบเบฒเบ™เบตเป‰เปเบกเปˆเบ™ Eclipse / IDA / radare2);
  • เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ emulator เบžเบฒเบเปƒเบ™ (Argparse เบซเบผเบท Python).

เบžเบญเบ” COM เบชเบฐเป€เปเบทเบญเบ™

เป€เบžเบทเปˆเบญเป‚เบ•เป‰เบ•เบญเบšเบเบฑเบš UART เบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™ virtual เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบœเปˆเบฒเบ™เป€เบ„เบทเปˆเบญเบ‡เปƒเบŠเป‰เป„เบŸเบŸเป‰เบฒ, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เบ„เบนเปˆเบ‚เบญเบ‡เบžเบญเบ” COM virtual เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบซเบ™เบถเปˆเบ‡เบžเบญเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป‚เบ”เบ emulator, เปเบฅเบฐเบ—เบตเบชเบญเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป‚เบ”เบเป‚เบ„เบ‡เบเบฒเบ™ terminal (PuTTY เบซเบผเบทเบซเบ™เป‰เบฒเบˆเป):

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

เปƒเบŠเป‰ com0com

เบžเบญเบ” COM เป€เบชเบกเบทเบ™เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบ”เบเปƒเบŠเป‰เบญเบธเบ›เบฐเบเบญเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบˆเบฒเบเบŠเบธเบ” com0com (เบชเบฐเบšเบฑเบš console - C:Program Files (x86)com0comsetupั.exe, เบซเบผเบทเบฅเบธเป‰เบ™ GUI - C:Program Files (x86)com0comsetupg.exe):

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

เบเบงเบ”เป€เบšเบดเปˆเบ‡เบเปˆเบญเบ‡ เป€เบ›เบตเบ”เปƒเบŠเป‰ buffer overrun เบชเปเบฒเบฅเบฑเบšเบžเบญเบ” virtual เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ emulator เบˆเบฐเบฅเปเบ–เป‰เบฒเบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบˆเบฒเบเบžเบญเบ” COM.

เปƒเบŠเป‰ socat

เปƒเบ™เบฅเบฐเบšเบปเบš UNIX, เบžเบญเบ” COM virtual เปเบกเปˆเบ™เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป‚เบ”เบ emulator เป‚เบ”เบเปƒเบŠเป‰ socat utility เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบžเบฝเบ‡เปเบ•เปˆเบฅเบฐเบšเบธเบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒเปƒเบ™เบŠเบทเปˆเบžเบญเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ emulator socat:.

เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบžเบฒเบเปƒเบ™ (Argparse เบซเบผเบท Python)

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบ Kopycat เป€เบ›เบฑเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ console, emulator เปƒเบซเป‰เบชเบญเบ‡เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบปเบงเบžเบฑเบ™เบเบฑเบšเบงเบฑเบ”เบ–เบธเปเบฅเบฐเบ•เบปเบงเปเบ›เบ‚เบญเบ‡เบกเบฑเบ™: Argparse เปเบฅเบฐ Python.

Argparse เปเบกเปˆเบ™ CLI เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™ Kopycat เปเบฅเบฐเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰เบเบฑเบšเบ—เบธเบเบ„เบปเบ™เบชเบฐเป€เปเบต.

เบ—เบฒเบ‡เป€เบฅเบทเบญเบ CLI เปเบกเปˆเบ™เบ™เบฒเบเบžเบฒเบชเบฒ Python. เป€เบžเบทเปˆเบญเปƒเบŠเป‰เบกเบฑเบ™, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป‚เบกเบ”เบนเบ™ Jep Python เปเบฅเบฐ configure emulator เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš Python (เบ•เบปเบงเปเบ›เบžเบฒเบชเบฒ Python เบ—เบตเปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบšเบซเบผเบฑเบเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰).

เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป‚เบกเบ”เบนเบ™ Python Jep

เบžเบฒเบเปƒเบ•เป‰ Linux Jep เบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบœเปˆเบฒเบ™ pip:

pip install jep

เป€เบžเบทเปˆเบญเบ•เบดเบ”เบ•เบฑเป‰เบ‡ Jep เปƒเบ™ Windows, เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ” เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบ•เบดเบ”เบ•เบฑเป‰เบ‡ Windows SDK เปเบฅเบฐ Microsoft Visual Studio เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™. เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™เป€เบฅเบฑเบเบ™เป‰เบญเบเบชเปเบฒเบฅเบฑเบšเบ—เปˆเบฒเบ™ เปเบฅเบฐ WHL เบเปเปˆเบชเป‰เบฒเบ‡ JEP เบชเปเบฒเบฅเบฑเบšเบชเบฐเบšเบฑเบšเบ›เบฐเบˆเบธเบšเบฑเบ™เบ‚เบญเบ‡ Python เบชเปเบฒเบฅเบฑเบš Windows, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป‚เบกเบ”เบนเบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบˆเบฒเบเป„เบŸเบฅเปŒ:

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.

เปƒเบ™เป„เบŸเบฅเปŒ emulator batch เบชเปเบฒเบฅเบฑเบšเบฅเบฐเบšเบปเบšเบ‚เบญเบ‡เบ—เปˆเบฒเบ™ (copycat.bat - เบชเปเบฒโ€‹เบฅเบฑเบš Windowsโ€‹, copycat - เบชเปเบฒเบฅเบฑเบš 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

emulator เปเบกเปˆเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ console JVM. เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเปเบกเปˆเบ™เบ”เปเบฒเป€เบ™เบตเบ™เป‚เบ”เบเบœเปˆเบฒเบ™ 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 โ€” เบžเบญเบ” TCP เบ—เบตเปˆเบˆเบฐเป€เบ›เบตเบ”เปƒเบซเป‰เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป€เบŠเบตเบšเป€เบงเบต GDB;
  • -n rhino - เบŠเบทเปˆเบ‚เบญเบ‡เป‚เบกเบ”เบนเบ™เบฅเบฐเบšเบปเบšเบ•เบปเป‰เบ™เบ•เป (เบญเบธเบ›เบฐเบเบญเบ™เบ›เบฐเบเบญเบš);
  • -l user โ€” เบŠเบทเปˆโ€‹เบ‚เบญเบ‡โ€‹เบซเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบธเบ”โ€‹เป€เบžเบทเปˆเบญโ€‹เบ„เบปเป‰เบ™โ€‹เบซเบฒโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เป‚เบกโ€‹เบ”เบนเบ™โ€‹เบ•เบปเป‰เบ™โ€‹เบ•เปโ€‹;
  • -y library โ€” เป€เบชเบฑเป‰เบ™โ€‹เบ—เบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบ„เบปเป‰เบ™โ€‹เบซเบฒโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เป‚เบกโ€‹เบ”เบนเบ™โ€‹เบ—เบตเปˆโ€‹เบฅเบงเบกโ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เบญเบธโ€‹เบ›เบฐโ€‹เบเบญเบ™โ€‹;
  • firmwarerhino_pass.bin - เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เบซเบฒเป„เบŸเบฅเปŒเป€เบŸเบตเบกเปเบง;
  • COM26 เปเบฅเบฐ COM28 เปเบกเปˆเบ™เบžเบญเบ” COM virtual.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เป€เบ•เบทเบญเบ™เบˆเบฐเบ–เบทเบเบชเบฐเปเบ”เบ‡ 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 เปƒเบ™เบฎเบนเบšเปเบšเบš เป„เบŸเบฅเปŒ ELF (เบ‚เปเป‰เบกเบนเบ™ meta เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™).

เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบŸเบตเบกเปเบงเบ•เบปเป‰เบ™เบ•เปเป‚เบ”เบเบšเปเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™ meta.

เบซเบผเบฑเบ‡เบˆเบฒเบเป€เบ›เบตเบ”เบ•เบปเบง Kopycat เปƒเบ™ IDA Pro, เปƒเบ™เป€เบกเบ™เบน Debugger เป„เบ›เบฅเบฒเบเบเบฒเบ™ "เบชเบฐเบซเบผเบฑเบšเบ”เบตเบšเบฑเบ..."เปเบฅเบฐเป€เบฅเบทเบญเบ"เบ”เบตเบšเบฑเบ GDB เป„เบฅเบเบฐเป„เบ". เบ•เปเปˆเป„เบ›, เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ: เป€เบกเบ™เบน Debugger - เบ•เบปเบงเป€เบฅเบทเบญเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™...

เบเปเบฒเบ™เบปเบ”เบ„เปˆเบฒ:

  • เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ - เบกเบนเบ™เบ„เปˆเบฒเปƒเบ”เป†
  • เบŠเบทเปˆเป€เบˆเบปเป‰เบฒเบžเบฒเบš: 127.0.0.1 (เบซเบผเบทเบ—เบตเปˆเบขเบนเปˆ IP เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบ—เบฒเบ‡เป„เบเบ—เบตเปˆ Kopycat เปเบฅเปˆเบ™เบขเบนเปˆ)
  • เบ—เบตเปˆ Port: 23946

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ›เบธเปˆเบก debugging เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰ (เบ›เบธเปˆเบก F9):

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

เบ„เบฅเบดเบเบกเบฑเบ™เป€เบžเบทเปˆเบญเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเป‚เบกเบ”เบนเบ™เบ”เบตเบšเบฑเบเปƒเบ™เบ•เบปเบงเบˆเบณเบฅเบญเบ‡. IDA เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป‚เบซเบกเบ”เบเบฒเบ™เบ”เบตเบšเบฑเบ, เบ›เปˆเบญเบ‡เบขเป‰เบฝเบกเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆ: เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™, เบเปˆเบฝเบงเบเบฑเบš stack.

เบ•เบญเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ—เบฑเบ‡เปเบปเบ”เบ‚เบญเบ‡ debugger เป„เบ”เป‰:

  • เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบ•เบฒเบกโ€‹เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบ‚เบญเบ‡โ€‹เบ„เปเบฒโ€‹เปเบ™เบฐโ€‹เบ™เปเบฒ (เบเป‰เบฒเบงเป€เบ‚เบปเป‰เบฒเป„เบ› ะธ เบเป‰เบฒเบงเบ‚เป‰เบฒเบก โ€” เบเบฐเปเบˆ F7 เปเบฅเบฐ F8, เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบš);
  • เป€เบฅเบตเปˆเบก เปเบฅเบฐเบขเบธเบ”เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”;
  • เบชเป‰เบฒเบ‡เบˆเบธเบ”เปเบšเปˆเบ‡เบชเปเบฒเบฅเบฑเบšเบ—เบฑเบ‡เบฅเบฐเบซเบฑเบ”เปเบฅเบฐเบ‚เปเป‰เบกเบนเบ™ (เบ›เบธเปˆเบก F2).

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบ•เบปเบงเบ”เบตเบšเบฑเบเบšเปเปˆเป„เบ”เป‰เปเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเปเบฅเปˆเบ™เบฅเบฐเบซเบฑเบ”เป€เบŸเบตเบกเปเบง. เบ•เปเบฒเปเบซเบ™เปˆเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เบ•เป‰เบญเบ‡เป€เบ›เบฑเบ™เบ—เบตเปˆเบขเบนเปˆ 0x08006A74 - เบเบฒเบ™โ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เปเบฒโ€‹เบ‡เบฒเบ™โ€‹ Reset_Handler. เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เป€เบฅเบทเปˆเบญเบ™โ€‹เบฅเบปเบ‡โ€‹เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบฅเบฒเบโ€‹เบเบฒเบ™โ€‹, เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบšเบดเปˆเบ‡โ€‹เบเบฒเบ™โ€‹เป‚เบ—โ€‹เบซเบ™เป‰เบฒโ€‹เบ—เบตเปˆโ€‹ เบ•เบปเป‰เบ™เบ•เป. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบงเบฒเบ‡เบ•เบปเบงเบเบฐเบžเบดเบšเปƒเบชเปˆเป€เบชเบฑเป‰เบ™เบ™เบตเป‰ (เบ—เบตเปˆเบขเบนเปˆ 0x08006ABE) เปเบฅเบฐโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบเบฒเบ™โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบ‡เบฒเบ™โ€‹ เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบˆเบปเบ™เบเปˆเบงเบฒเบ•เบปเบงเบเบฐเบžเบดเบš (เบ›เบธเปˆเบก F4).

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

เบ•เปเปˆเป„เบ›, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเบปเบ” F7 เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆ เบ•เบปเป‰เบ™เบ•เป.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ เบชเบทเบšเบ•เปเปˆเบ‚เบฐเบšเบงเบ™เบเบฒเบ™ (เบ›เบธเปˆเบก F9), เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ›เปˆเบญเบ‡เบขเป‰เบฝเบก "เบเบฐเบฅเบธเบ™เบฒเบฅเปเบ–เป‰เบฒ" เบˆเบฐเบ›เบฒเบเบปเบ”เบ”เป‰เบงเบเบ›เบธเปˆเบกเบ”เบฝเบง เบฅเบฐเบ‡เบฑเบš:

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบเบปเบ” เบฅเบฐเบ‡เบฑเบš เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบฑเบ”เป€เบŸเบตเบกเปเบงเบ–เบทเบเบฅเบฐเบ‡เบฑเบšเป„เบงเป‰เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบชเบทเบšเบ•เปเปˆเบˆเบฒเบเบ—เบตเปˆเบขเบนเปˆเบ”เบฝเบงเบเบฑเบ™เปƒเบ™เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบกเบฑเบ™เบ–เบทเบเบฅเบปเบšเบเบงเบ™.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบชเบทเบšเบ•เปเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบฑเบ”, เบ—เปˆเบฒเบ™เบˆเบฐเป€เบซเบฑเบ™เป€เบชเบฑเป‰เบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบขเบนเปˆเปƒเบ™เบˆเบธเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบžเบญเบ” COM virtual:

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

เบเบฒเบ™เบ›เบฐเบเบปเบ”เบ•เบปเบงเบ‚เบญเบ‡เป€เบชเบฑเป‰เบ™ "เบ—เบฒเบ‡เบœเปˆเบฒเบ™เบ‚เบญเบ‡เบฅเบฑเบ”" เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเป‚เบกเบ”เบนเบ™ Bluetooth virtual เป„เบ”เป‰เบ›เปˆเบฝเบ™เป„เบ›เบชเบนเปˆเบฎเบนเบšเปเบšเบšเบเบฒเบ™เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบžเบญเบ” COM เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰.

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบขเบนเปˆเปƒเบ™เบˆเบธเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ Bluetooth (COM29 เปƒเบ™เบฎเบนเบš) เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปƒเบชเปˆเบ„เปเบฒเบชเบฑเปˆเบ‡เป‚เบ”เบเบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบšเป‚เบ›เป‚เบ•เบ„เบญเบ™ Rhino. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ„เปเบฒเบชเบฑเปˆเบ‡ "MEOW" เบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบชเบฒเบ "mur-mur" เป„เบ›เบซเบฒเบชเบฐเบ–เบฒเบ™เบต Bluetooth:

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

เบˆเบณเบฅเบญเบ‡เบ‚เป‰เบญเบเบšเปเปˆเป„เบ”เป‰เปเบปเบ”

เป€เบกเบทเปˆเบญเบชเป‰เบฒเบ‡ emulator, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฅเบทเบญเบเบฅเบฐเบ”เบฑเบšเบ‚เบญเบ‡เบฅเบฒเบเบฅเบฐเบญเบฝเบ” / emulation เบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™เบชเบฐเป€เบžเบฒเบฐเปƒเบ”เบซเบ™เบถเปˆเบ‡. เบ•เบปเบงเบขเปˆเบฒเบ‡, เป‚เบกเบ”เบนเบ™ Bluetooth เบชเบฒเบกเบฒเบ”เบ–เบทเบเบˆเบณเบฅเบญเบ‡เบ”เป‰เบงเบเบงเบดเบ—เบตเบ•เปˆเบฒเบ‡เป†:

  • เบญเบธเบ›เบฐเบเบญเบ™เป„เบ”เป‰เบ–เบทเบ emulated เบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบชเปˆเบงเบ™เบเบฑเบšเบŠเบธเบ”เป€เบ•เบฑเบกเบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡;
  • เบ„เปเบฒเบชเบฑเปˆเบ‡ AT เป„เบ”เป‰เบ–เบทเบเบˆเปเบฒเบฅเบญเบ‡, เปเบฅเบฐเบ™เป‰เปเบฒเบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เป„เบ”เป‰เบฎเบฑเบšเบˆเบฒเบเบžเบญเบ” COM เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ•เบปเป‰เบ™เบ•เป;
  • เบญเบธเบ›เบฐเบเบญเบ™ virtual เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบ„เบปเบšเบ–เป‰เบงเบ™เบชเบปเบกเบšเบนเบ™เบเบฑเบšเบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡;
  • เป€เบ›เบฑเบ™ stub เบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบฐเป€เบซเบกเบตเบเบฑเบšเบ„เบทเบ™ "OK".

เบฎเบธเปˆเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ‚เบญเบ‡ emulator เปƒเบŠเป‰เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเบชเบญเบ‡ - เป‚เบกเบ”เบนเบ™ Bluetooth virtual เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™เบ›เปˆเบฝเบ™เป„เบ›เบชเบนเปˆเบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡ "proxying" เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบžเบญเบ” COM เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ•เบปเป‰เบ™เบ•เปเป„เบ›เบซเบฒเบžเบญเบ” UART เบ‚เบญเบ‡ emulator.

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

เบ‚เปเปƒเบซเป‰เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ‡เปˆเบฒเบเบ”เบฒเบเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบšเบฒเบ‡เบชเปˆเบงเบ™เบ‚เบญเบ‡ periphery เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเบ•เบปเบงเบˆเบฑเบšเป€เบงเบฅเบฒเบ—เบตเปˆเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเปƒเบ™เบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบเบฒเบ™เป‚เบญเบ™เบ‚เปเป‰เบกเบนเบ™เป„เบ›เบซเบฒ DMA เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™ (เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆ. ws2812b_เบฅเปเบ–เป‰เบฒ, raspolojennoy po adresu 0x08006840), เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เป€เบŸเบตเบกเปเบงเบˆเบฐเบฅเปเบ–เป‰เบฒเปƒเบซเป‰เบ—เบธเบ‡เบ–เบทเบเบ•เบฑเป‰เบ‡เปƒเบซเบกเปˆ เบ„เบฒโ€‹เบงเบฝเบเบ•เบฑเป‰เบ‡เบขเบนเปˆ 0x200004C4เป€เบŠเบดเปˆเบ‡เบชเบฐเปเบ”เบ‡เป€เบ–เบดเบ‡เบเบฒเบ™เบ„เบญเบšเบ„เบญเบ‡เบ‚เบญเบ‡เบชเบฒเบเบ‚เปเป‰เบกเบนเบ™ DMA:

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบ›เบฐโ€‹เบกเบฒเบ™โ€‹เบชเบฐโ€‹เบ–เบฒโ€‹เบ™เบฐโ€‹เบเบฒเบ™โ€‹เบ™เบตเป‰โ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบ›เบฑเบšโ€‹เบ—เบธเบ‡โ€‹เบŠเบฒเบ”โ€‹เบ”เป‰เบงเบโ€‹เบ•เบปเบ™โ€‹เป€เบญเบ‡โ€‹ เบ„เบฒโ€‹เบงเบฝเบ เบ—เบฑเบ™โ€‹เบ—เบตโ€‹เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹เบกเบฑเบ™โ€‹. เปƒเบ™ IDA Pro, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™ Python เปเบฅเบฐเป‚เบ—เบซเบฒเบกเบฑเบ™เปƒเบ™ breakpoint, เปเบฅเบฐเบงเบฒเบ‡ breakpoint เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เปƒเบ™เบฅเบฐเบซเบฑเบ”เบซเบผเบฑเบ‡เบˆเบฒเบเบ‚เบฝเบ™เบ„เปˆเบฒ 1 เบเบฑเบšเบ—เบธเบ‡. เบ„เบฒโ€‹เบงเบฝเบ.

เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบˆเบธเบ”เบขเบธเบ”

เบ—เปเบฒเบญเบดเบ”, เปƒเบซเป‰เบชเป‰เบฒเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆ Python เปƒเบ™ IDA. เป€เบกเบ™เบน เป„เบŸเบฅเปŒ - เบ„เบณเบชเบฑเปˆเบ‡เบชเบฐเบ„เบฃเบดเบš...

เป€เบžเบตเปˆเบก snippet เปƒเบซเบกเปˆเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบฒเบ‡เบŠเป‰เบฒเบ, เปƒเบซเป‰เบกเบฑเบ™เบŠเบทเปˆ (เบ•เบปเบงเบขเปˆเบฒเบ‡: เบ‚เบ›เบฅ),
เปƒเบ™เบŠเปˆเบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเป€เบšเบทเป‰เบญเบ‡เบ‚เบงเบฒ, เปƒเบชเปˆเบฅเบฐเบซเบฑเบ”เบŸเบฑเบ‡เบŠเบฑเบ™:

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

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เปƒเบซเป‰เบ„เบฅเบดเบเปƒเบชเปˆ เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™ เปเบฅเบฐเบ›เบดเบ”เบ›เปˆเบญเบ‡เบขเป‰เบฝเบกเบชเบฐเบ„เบดเบš.

เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เป„เบ›เบ—เบตเปˆเบฅเบฐเบซเบฑเบ”เบขเบนเปˆ 0x0800688A, เบ•เบฑเป‰เบ‡เบˆเบธเบ”เบขเบธเบ” (เบ›เบธเปˆเบก F2), เปเบเป‰เป„เบ‚เบกเบฑเบ™ (เป€เบกเบ™เบนเบชเบฐเบžเบฒเบšเบเบฒเบ™ เปเบเป‰เป„เบ‚เบˆเบธเบ”เบขเบธเบ”...), เบขเปˆเบฒเบฅเบทเบกเบ•เบฑเป‰เบ‡เบ›เบฐเป€เบžเบ”เบชเบฐเบ„เบฃเบดเบšเป€เบ›เบฑเบ™ Python:

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat
Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

เบ–เป‰เบฒเบ„เปˆเบฒเบ—เบธเบ‡เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™ เบ„เบฒโ€‹เบงเบฝเบ เป€เบ—เบปเปˆเบฒเบเบฑเบš 1, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบ„เบงเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆ เบ‚เป‰เบฒเบก_dma เปƒเบ™เปเบ–เบงเบชเบฐเบ„เบฃเบดเบš:

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบ›เบตเบ”เปƒเบŠเป‰ firmware เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เบเบฒเบ™เบเบฐเบ•เบธเป‰เบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™ breakpoint เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เปƒเบ™เบ›เปˆเบญเบ‡เบขเป‰เบฝเบก IDA. เบœเบปเบ™เบœเบฐเบฅเบดเบ” เป‚เบ”เบเบชเบฒเบ Skipping wait ws2812.... เบ•เบญเบ™เบ™เบตเป‰เป€เบŸเบตเบกเปเบงเบˆเบฐเบšเปเปˆเบฅเปเบ–เป‰เบฒเปƒเบซเป‰เบ—เบธเบ‡เบ–เบทเบเบฃเบตเป€เบŠเบฑเบ” เบ„เบฒโ€‹เบงเบฝเบ.

เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบเบฑเบš emulator เป„เบ”เป‰

Emulation เบชเปเบฒเบฅเบฑเบš sake เบ‚เบญเบ‡ emulation เบ„เบปเบ‡เบˆเบฐเบšเปเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ„เบงเบฒเบกเบชเบธเบเปเบฅเบฐเบ„เบงเบฒเบกเบชเบธเบ. เบกเบฑเบ™เบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบเบ–เป‰เบฒ emulator เบŠเปˆเบงเบเปƒเบซเป‰เบ™เบฑเบเบ„เบปเป‰เบ™เบ„เบงเป‰เบฒเป€เบšเบดเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบซเบผเบทเบชเป‰เบฒเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ‚เบญเบ‡เบเบฐเบ—เบนเป‰.

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบซเบฑเบ™เบงเบดเบ—เบตเบเบฒเบ™เบชเป‰เบฒเบ‡เบ›เบฐเบ•เบดเบชเปเบฒเบžเบฑเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบงเบฝเบเบ‡เบฒเบ™ RTOS เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง. เบ—เปเบฒเบญเบดเบ”เบ—เปˆเบฒเบ™เบ„เบงเบ™เบขเบธเบ”เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบฑเบ”เบ–เป‰เบฒเบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆ. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป„เบ›เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆ bluetooth_task_entry เป„เบ›เบซเบฒเบชเบฒเบ‚เบฒเบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡ "LED" (เบ—เบตเปˆเบขเบนเปˆ 0x080057B8), เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เบ—เปเบฒเบญเบดเบ”เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเปเบ–เบงเบฅเบฐเบšเบปเบš ledControlQueueHandle เบ‚เปเป‰เบ„เบงเบฒเบกเบšเบฒเบ‡เบขเปˆเบฒเบ‡.

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

เบ—เปˆเบฒเบ™เบ„เบงเบ™เบ•เบฑเป‰เบ‡เบˆเบธเบ”เบขเบธเบ”เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ•เบปเบงเปเบ› ledControlQueueHandle, raspolojennoy po adresu 0x20000624 เปเบฅเบฐเบชเบทเบšเบ•เปเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบฑเบ”:

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เบขเบธเบ”เป€เบŠเบปเบฒเบ—เปเบฒเบญเบดเบ”เบˆเบฐเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบขเบนเปˆเบ—เบตเปˆเบ—เบตเปˆเบขเบนเปˆ 0x080057CA เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป‚เบ—เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆ osMailAlloc, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบขเบนเปˆเปƒเบ™เบ—เบตเปˆเบขเบนเปˆ 0x08005806 เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป‚เบ—เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆ osMailPut, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ - เบเบฑเบšเบ—เบตเปˆเบขเบนเปˆ 0x08005BD4 (เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป‚เบ—เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆ osMailGet), เป€เบŠเบดเปˆเบ‡เบ‚เบถเป‰เบ™เบเบฑเบšเบซเบ™เป‰เบฒเบ—เบตเปˆ leds_task_entry (LED-task), เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบงเบฝเบเบ‡เบฒเบ™เบ–เบทเบเบ›เปˆเบฝเบ™, เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™ LED-task เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ„เบงเบšเบ„เบธเบก.

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

เบ”เป‰เบงเบเบงเบดเบ—เบตเบ‡เปˆเบฒเบเป†เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบงเบดเบ—เบตเบ—เบตเปˆเบงเบฝเบเบ‡เบฒเบ™ RTOS เบžเบปเบงเบžเบฑเบ™เบเบฑเบšเบเบฑเบ™เปเบฅเบฐเบเบฑเบ™.

เปเบ™เปˆเบ™เบญเบ™, เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ‚เบญเบ‡เบงเบฝเบเบ‡เบฒเบ™เบชเบฒเบกเบฒเบ”เบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบ, เปเบ•เปˆเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ emulator, เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ™เบตเป‰เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เปเบฎเบ‡เบ‡เบฒเบ™เบซเบ™เป‰เบญเบ.

เบ—เบตเปˆเบ™เบตเป‰ เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบงเบดเบ”เบตเป‚เบญเบชเบฑเป‰เบ™เบ‚เบญเบ‡เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง emulator เปเบฅเบฐเป‚เบ•เป‰เบ•เบญเบšเบเบฑเบš IDA Pro.

เป€เบ›เบตเบ”เบ•เบปเบงเบ”เป‰เบงเบ Radare2

เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบฅเบฐเป€เบฅเบตเบเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบปเปˆเบงเป„เบ›เป€เบŠเบฑเปˆเบ™ Radare2.

เป€เบžเบทเปˆเบญเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš emulator เป‚เบ”เบเปƒเบŠเป‰ r2, เบ„เปเบฒเบชเบฑเปˆเบ‡เบˆเบฐเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ™เบตเป‰:

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

เป€เบ›เบตเบ”เบ•เบปเบงเบกเบตเปƒเบซเป‰เปเบฅเป‰เบงเบ•เบญเบ™เบ™เบตเป‰ (dc) เปเบฅเบฐเบขเบธเบ”เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบŠเบปเปˆเบงเบ„เบฒเบง (Ctrl+C).

เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, r2 เบกเบตเบšเบฑเบ™เบซเบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบฎเบฒเบ”เปเบง gdb เปเบฅเบฐเบฎเบนเบšเปเบšเบšเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบ™เบตเป‰, breakpoints เปเบฅเบฐเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบ (เบ„เปเบฒเบชเบฑเปˆเบ‡ ds). เบžเบงเบเป€เบฎเบปเบฒเบซเบงเบฑเบ‡เบงเปˆเบฒเบญเบฑเบ™เบ™เบตเป‰เบˆเบฐเบ–เบทเบเปเบเป‰เป„เบ‚เปƒเบ™เป„เบงเป†เบ™เบตเป‰.

เปเบฅเปˆเบ™เบ”เป‰เบงเบ Eclipse

เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ emulator เปเบกเปˆเบ™เป€เบžเบทเปˆเบญ debug firmware เบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเบเปเบฒเบฅเบฑเบ‡เบžเบฑเบ”เบ—เบฐเบ™เบฒ. เป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบŠเบฑเบ”เป€เบˆเบ™, เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบˆเบฐเปƒเบŠเป‰เป€เบŸเบตเบกเปเบง Rhino. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ”เบฒเบงเป‚เบซเบฅเบ”เปเบซเบผเปˆเบ‡ firmware เป„เบ”เป‰ เบˆเบฒเบเบ™เบตเป‰.

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰ Eclipse เบˆเบฒเบเบŠเบธเบ”เป€เบ›เบฑเบ™ IDE เบฅเบฐเบšเบปเบš Workbench เบชเปเบฒเบฅเบฑเบš STM32.

เป€เบžเบทเปˆเบญเปƒเบซเป‰ emulator เป‚เบซเบฅเบ” firmware เบ—เบตเปˆเบฅเบงเบšเบฅเบงเบกเป‚เบ”เบเบเบปเบ‡เปƒเบ™ Eclipse, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบžเบตเปˆเบกเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต. firmware=null เบเบฑเบšเบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบ›เบตเบ”เบ•เบปเบง emulator:

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

เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบ”เบตโ€‹เบšเบฑเบโ€‹

เปƒเบ™ Eclipse, เป€เบฅเบทเบญเบเป€เบกเบ™เบน เปเบฅเปˆเบ™ - Debug Configuration... เปƒเบ™เบ›เปˆเบญเบ‡เบขเป‰เบฝเบกเบ—เบตเปˆเป€เบ›เบตเบ”, เปƒเบ™เบžเบฒเบ เบเบฒเบ™เบ”เบตเบšเบฑเบเบฎเบฒเบ”เปเบง GDB เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบžเบตเปˆเบกเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบซเบกเปˆ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบขเบนเปˆเปƒเบ™เปเบ–เบš "เบ•เบปเป‰เบ™เบ•เป" เปƒเบซเป‰เบฅเบฐเบšเบธเป‚เบ„เบ‡เบเบฒเบ™เปเบฅเบฐเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ”เบตเบšเบฑเบ:

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

เปƒเบ™เปเบ–เบš "Debugger" เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฅเบฐเบšเบธเบ„เปเบฒเบชเบฑเปˆเบ‡ GDB:
${openstm32_compiler_path}arm-none-eabi-gdb

เปเบฅเบฐเบเบฑเบ‡เปƒเบชเปˆเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡ GDB (เป‚เบฎเบ”เปเบฅเบฐเบžเบญเบ”):

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

เปƒเบ™เปเบ–เบš "Startup", เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบฅเบฐเบšเบธเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • เป€เบ›เบตเบ”โ€‹เปƒเบŠเป‰โ€‹เบ‡เบฒเบ™ checkbox เป‚เบซเบผเบ”เบฎเบนเบš (เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบฎเบนเบšเบžเบฒเบšเป€เบŸเบตเบกเปเบงเบ—เบตเปˆเบ›เบฐเบเบญเบšเบ–เบทเบเป‚เบซเบฅเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ emulator);
  • เป€เบ›เบตเบ”โ€‹เปƒเบŠเป‰โ€‹เบ‡เบฒเบ™ checkbox เป‚เบซเบผเบ”เบชเบฑเบ™เบเบฒเบฅเบฑเบ;
  • เป€เบžเบตเปˆเบกเบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบ›เบตเบ”เบ•เบปเบง: set $pc = *0x08000004 (เบ•เบฑเป‰เบ‡ PC เบฅเบปเบ‡โ€‹เบ—เบฐโ€‹เบšเบฝเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบ„เปˆเบฒโ€‹เบˆเบฒเบโ€‹เบซเบ™เปˆเบงเบโ€‹เบ„เบงเบฒเบกโ€‹เบˆเปเบฒโ€‹เบ—เบตเปˆโ€‹เบขเบนเปˆโ€‹ 0x08000004 - เบ—เบตเปˆโ€‹เบขเบนเปˆโ€‹เปเบกเปˆเบ™โ€‹เป€เบเบฑเบšโ€‹เบฎเบฑเบโ€‹เบชเบฒโ€‹เป„เบงเป‰โ€‹เบ—เบตเปˆโ€‹เบ™เบฑเป‰เบ™โ€‹ ResetHandler).

เบˆเปˆเบฒเบเป€เบญเบปเบฒเปƒเบˆเปƒเบชเปˆเบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เบšเปเปˆโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ”เบฒเบงโ€‹เบ™โ€‹เปŒโ€‹เป‚เบซเบฅเบ”โ€‹เป„เบŸเบฅโ€‹เปŒ firmware เบˆเบฒเบ Eclipseโ€‹, เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹ เป‚เบซเบผเบ”เบฎเบนเบš ะธ เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบŠเบตเป‰เบšเบญเบ.

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบเบฒเบ™โ€‹เบ„เบฅเบดเบ Debugโ€‹, เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹เปƒเบ™โ€‹เบฎเบนเบšโ€‹เปเบšเบš debuggerโ€‹:

  • เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบ—เบตโ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบฅเบฐโ€‹เบซเบฑเบ”โ€‹
    Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat
  • เบ›เบฐเบ•เบดเบชเปเบฒเบžเบฑเบ™เบเบฑเบšเบˆเบธเบ”เบขเบธเบ”
    Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

ะŸั€ะธะผะตั‡ะฐะฝะธะต. Eclipse เบกเบต, hmm ... เบšเบฒเบ‡ quirks ... เปเบฅเบฐเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบญเบฒเป„เบชเบขเบนเปˆเบเบฑเบšเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเป€เบกเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ•เบปเบงเบ”เบตเบšเบฑเบเบ‚เปเป‰เบ„เบงเบฒเบก "เบšเปเปˆเบกเบตเปเบซเบผเปˆเบ‡เบชเปเบฒเบฅเบฑเบš "0x0" เบ›เบฒเบเบปเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™ (F5)

Rhinoceros เบžเบฒเบเปƒเบ™เปเบกเบง - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ firmware เปƒเบ™ emulator Kopycat

เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบชเบฐเบซเบฅเบธเบšเป„เบ”เป‰

เบเบฒเบ™เบˆเบณเบฅเบญเบ‡เบฅเบฐเบซเบฑเบ”เบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเปœเป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบ. เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเบˆเบฐเบ”เบตเบšเบฑเบเป€เบŸเบตเบกเปเบงเป‚เบ”เบเบšเปเปˆเบกเบตเบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡. เบชเปเบฒเบฅเบฑเบšเบ™เบฑเบเบ„เบปเป‰เบ™เบ„เบงเป‰เบฒ, เบกเบฑเบ™เป€เบ›เบฑเบ™เป‚เบญเบเบฒเบ”เบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบฅเบฐเบซเบฑเบ”เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบชเบฐเป€เบซเบกเบตเป„เบ›เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบตเบญเบธเบ›เบฐเบเบญเบ™.

เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบซเป‰เบœเบนเป‰เบŠเปˆเบฝเบงเบŠเบฒเบ™เบ—เบตเปˆเบกเบตเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบชเบฐเบ”เบงเบ, เบ›เบฒเบ™เบเบฒเบ‡, เบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเบšเปเปˆเปƒเบŠเป‰เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเปเบฅเบฐเป€เบงเบฅเบฒเบซเบผเบฒเบเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™.

เบ‚เบฝเบ™เปƒเบ™เบ„เปเบฒเป€เบซเบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเบ›เบฐเบชเบปเบšเบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบง emulator เบฎเบฒเบ”เปเบง. เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบตเบ™เบ—เปˆเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเปเบฅเบฐเบเบดเบ™เบ”เบตเบ—เบตเปˆเบˆเบฐเบ•เบญเบšเบ„เปเบฒเบ–เบฒเบก.

เบžเบฝเบ‡เปเบ•เปˆเบœเบนเป‰เปƒเบŠเป‰เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบกเปƒเบ™เบเบฒเบ™เบชเปเบฒเบซเบผเบงเบ”. เป€เบ‚เบปเป‰เบฒโ€‹เบชเบนเปˆโ€‹เบฅเบฐโ€‹เบšเบปเบšเบเบฐเบฅเบธเบ™เบฒ.

เบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เปƒเบŠเป‰ emulator เป€เบžเบทเปˆเบญเบซเบเบฑเบ‡?

  • เบ‚เป‰เบญเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ (debug) firmware

  • เบ‚เป‰เบญเบเบเปเบฒเบฅเบฑเบ‡เบ„เบปเป‰เบ™เบ„เบงเป‰เบฒเป€เบŸเบตเบกเปเบง

  • เบ‚เป‰เบญเบเป€เบ›เบตเบ”เป€เบเบก (Dendi, Sega, PSP)

  • เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบญเบทเปˆเบ™ (เบ‚เบฝเบ™เปƒเบ™เบ„เปเบฒเป€เบซเบฑเบ™)

7 เบœเบนเป‰เปƒเบŠเป‰เบฅเบปเบ‡เบ„เบฐเปเบ™เบ™เบชเบฝเบ‡. 2 เบœเบนเป‰เปƒเบŠเป‰เบ‡เบปเบ”.

เป€เบˆเบปเป‰เบฒเปƒเบŠเป‰เบŠเบญเบŸเปเบงเบซเบเบฑเบ‡เป€เบžเบทเปˆเบญเบˆเบณเบฅเบญเบ‡เบฅเบฐเบซเบฑเบ”เบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡?

  • QEMU

  • เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ Unicorn

  • Proteus

  • เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบญเบทเปˆเบ™ (เบ‚เบฝเบ™เปƒเบ™เบ„เปเบฒเป€เบซเบฑเบ™)

6 เบœเบนเป‰เปƒเบŠเป‰เบฅเบปเบ‡เบ„เบฐเปเบ™เบ™เบชเบฝเบ‡. 2 เบœเบนเป‰เปƒเบŠเป‰เบ‡เบปเบ”.

เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบญเบฑเบ™เปƒเบ”เปƒเบ™เบ•เบปเบงเบˆเบณเบฅเบญเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบเบณเบฅเบฑเบ‡เปƒเบŠเป‰เบขเบนเปˆ?

  • เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™เบ„เบงเบฒเบกเป„เบง

  • เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™เบ„เบงเบฒเบกเบ‡เปˆเบฒเบเปƒเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ / เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง

  • เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบปเบงเบžเบฑเบ™เบเบฑเบš emulator (API, hooks)

  • เบ‚เป‰เบญเบเบกเบตเบ„เบงเบฒเบกเบชเบธเบเบเบฑเบšเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡

  • เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบญเบทเปˆเบ™ (เบ‚เบฝเบ™เปƒเบ™เบ„เปเบฒเป€เบซเบฑเบ™)

เบœเบนเป‰เปƒเบŠเป‰ 8 เบ„เบปเบ™เบฅเบปเบ‡เบ„เบฐเปเบ™เบ™เบชเบฝเบ‡. 1 เบœเบนเป‰เปƒเบŠเป‰เบ‡เบปเบ”.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™