monkeysee is a disassembler for .prg files.
The .prg file extension represents a proprietary compiled format developed by Garmin. These files contain executable code that has been compiled from Garmin's proprietary Monkey-C programming language. The compiled .prg files are designed to run on Garmin's custom virtual machine architecture, which powers their wearable devices and smartwatches.
The tool attempts to extract opcodes, symbols, and strings from the .prg file itself. If symbols are not present it uses the api.db from their SDK: connectiq-sdk-lin-8.1.1-2025-03-27-66dae750f.
cargo build --release
target/release/monkeysee <path/to/file.prg>.
Sample output:
[0x566]: 35 01 argc 0x1
[0x568]: 16 return
[0x569]: 16 return
[0x56A]: 35 01 argc 0x1
[0x56C]: 27 00 80 02 e6 spush 0x8002e6 ; globals
[0x571]: 30 getm
[0x572]: 13 00 lputv 0x0
[0x574]: 27 00 80 00 15 spush 0x800015 ; Toybox_Application
[0x579]: 30 getm
[0x57A]: 27 00 80 02 9b spush 0x80029b ; getApp
[0x57F]: 0d getv
[0x580]: 2a frpush
[0x581]: 0f 01 invokem
[0x583]: 16 return
[0x584]: 27 00 80 00 15 spush 0x800015 ; Toybox_Application
[0x589]: 30 getm
[0x58A]: 27 00 80 03 11 spush 0x800311 ; initResources
[0x58F]: 0d getv
[0x590]: 2a frpush
[0x591]: 12 00 lgetv 0x0
[0x593]: 27 00 80 00 a1 spush 0x8000a1 ; Rez
[0x598]: 0f 03 invokem
[0x59A]: 02 popv
[0x59B]: 16 return
[0x59C]: 12 00 lgetv 0x0
[0x59E]: 27 00 80 02 ff spush 0x8002ff ; WatchFace
[0x5A3]: 0d getv
[0x5A4]: 27 00 80 00 18 spush 0x800018 ; <init>