-
Notifications
You must be signed in to change notification settings - Fork 8
Brovan Usage
This page focuses on the command-line interface and the interactive shell exposed by the current build. The exact command set can vary slightly between builds, so the help command is the safest way to discover what is available in your copy, as this page might not be updated every time a new command is changed/added.
Brovan [options] <path-to-binary> [program arguments...]
Everything before the binary path is treated as a Brovan option. Everything after the binary path is passed to the emulated program as-is.
| Option | Meaning |
|---|---|
-q, --quick
|
Run in quick mode. this is recommended for large binaries and smaller memory usage, currently always enabled. |
-h, --help
|
Show the built-in help text. |
-s, --silent
|
Only show standard output coming from the emulated program. |
-c, --command
|
Run commands directly, separated by ;. |
--net=<mode> |
Set host networking policy: none, loopback (default), or full. |
--net-allow=<ip> |
Allow a specific IPv4 or IPv6 address in addition to the selected policy. |
--no-hooks |
Run without hooks except for some essential ones. Useful when you want maximum performance. |
Brovan sample.exe
Brovan --quick sample.exe
Brovan --quick -c "start;showinstrs;run" sample.exe
Brovan --net=none sample.elf
Brovan --silent sample.exe
After the emulator starts, Brovan exposes an interactive command shell. A practical workflow is:
-
startto initialize the emulator. -
modules,regions, orbininfoto inspect the loaded program. -
hexdump,disasm, orfindstrto inspect memory. -
bpandwatchto control execution. -
step,stepover,run, andcontinueto drive execution. -
dumpregs,threads,handles,syscall, andcalltraceto inspect runtime state.
| Command | Aliases | What it does |
|---|---|---|
help [command] |
?, commands
|
Show available commands or details for one command. |
start |
Initialize the emulator instance. | |
run |
Run the current thread using the scheduler. | |
continue |
c, cont
|
Resume emulation from the current instruction pointer. |
step |
Execute a single instruction. | |
stepover |
Step over a call instruction. | |
clear |
cls |
Clear the console output. |
exit |
quit |
Exit the emulator. |
showinstrs [module_name|start-end] |
Enable instruction tracing, optionally filtered. | |
hideinstrs |
Disable instruction tracing. | |
dumpconsole |
Dump the current console output. | |
dumpregs |
Print register state. | |
debug |
Toggle debug mode. | |
set <register> <value> |
Set a register value. | |
get <register> |
Read a register value. | |
modules |
List loaded modules. | |
regions |
List mapped memory regions. | |
hexdump <address> <size> |
Dump memory as hex and ASCII. | |
disasm <address> <size> |
Disassemble memory at the given address. | |
findstr <text> [ascii|utf16] [max-results] |
Find ASCII/UTF-16 strings in mapped memory. | |
map <address> <size> |
Map memory at an address. Use 0 for auto. |
|
memwrite <addr> <hex-bytes|file_path> |
Write bytes or assembled instruction bytes. | |
gpatch <addr> <hex-bytes|file_path> |
Apply a ghost patch. | |
parse_struct <address> <struct_name> |
Parse and display a Windows structure. | |
write_struct [address] <struct_name> <field=value&...> |
Write a Windows structure to memory. | |
bininfo [summary|functions|exports|imports|sections|dotnet] |
binaryinfo |
Show parsed binary metadata. |
checkprot <address> |
Show memory protection for an address. | |
ldrplog <address>|off|once |
Decode internal ntdll loader log calls. | |
snap |
Take an emulator snapshot. | |
restore |
Restore the last snapshot. | |
funcmon <address|symbol> [cc] [arg_types...] |
Monitor function enter/leave with parameters. | |
pcap <on|off|status> [path] |
netdump, capture
|
Dump emulated network traffic to a pcap file. |
bp <add|del|list|clear>
Common forms:
bp add <address> [condition]
bp del <address>
bp list
bp clear
Alias: break
watch <add|del|list|clear>
Common forms:
watch add <read|write|fetch|access> <address> [size]
watch del <id>
watch list
watch clear
Alias: wp
threads <list|info|switch|suspend|resume|kill|priority|rename|regs>
Alias: thread, t
Common forms:
threads info <tid|current>
threads regs <tid|current>
threads switch <tid>
threads suspend <tid|current|all>
threads resume <tid|current|all>
threads kill <tid|current|all> [exit_code]
threads priority <tid|current> <0-31>
threads rename <tid|current> <name>
handles <list|info|refs|inspect|close|flags|access|target|dup|set|setraw>
Aliases: handle, fds, fd
Common forms:
handles info <handle|fd>
handles refs <handle|fd>
handles inspect <handle|fd>
handles close <handle|fd> [force]
handles flags <handle|fd> <inherit|protect|cloexec|nonblock> <on|off>
handles access <windows_handle> <mask|AccessMaskName[|...]>
handles target <target_handle|fd> <source_handle|fd> [copyattrs]
handles dup <source_handle|fd> [minimum_fd] [copyattrs]
handles path <handle|fd> <new_path>
handles offset <handle|fd> <offset>
handles setraw <handle|fd> <field_or_property> <value>
handles set <handle|fd> <field> <value>
syscall <list|last|failed|tid|name|contains|export|clear|trace|rule|rules>
Alias: syscalls
Common forms:
syscall trace [on|off]
syscall tid <id> [count]
syscall name <text> [count]
syscall number <nr> [count]
syscall rip <address> [count]
syscall contains <text> [count]
syscall info <sequence>
syscall export <path> [json|csv|txt]
syscall rule add <name|number> <allow|deny|modify> [options]
syscall rule remove <id|name>
calltrace <on|off|clear|list|depth>
callstack [thread_id] [max_frames]
Aliases: calltrace → ct, callstack → bt
funcmon <address|symbol> [cc] [arg_types...]
Useful companion forms:
funcmon del <address|symbol>
funcmon clear
funcmon help
pcap <on|off|status> [path]
Examples:
pcap on out.pcap
pcap status
pcap off
Brovan uses the same address parser across most commands that accept addresses, breakpoints, watches, function monitors, memory tools, and similar actions.
-
123456→ parsed as decimal -
0x1E240→ parsed as hexadecimal
Bare hex without the 0x prefix is not treated as hex, so use 0x when you want to enter an address in hex.
Brovan can also resolve several symbol-style forms:
-
module!export
Resolves an exported function inside a loaded PE module. -
module!export+0x20
Resolves an export and adds an offset. -
module+0x1234
Resolves a module base plus an offset. -
module#Sections!.text
Resolves the virtual address of a section. -
module#OptionalHeader!ImageBase
Resolves a field inside the module’s optional header. -
module#DataDirectory!Import
Resolves a data directory entry by name. -
module#DataDirectory!12
Resolves a data directory entry by index.
Symbol lookups are case-insensitive.
These names can also be used as address bases:
-
PEB/_PEB -
TEB/_TEB -
ProcessParams/RTL_USER_PROCESS_PARAMETERS/_RTL_USER_PROCESS_PARAMETERS -
KUSER_SHARED_DATA/KUSER
Examples:
hexdump PEB 0x100
disasm ntdll.dll!RtlAllocateHeap 0x80
bp add kernel32.dll!CreateFileW
funcmon ntdll.dll!NtOpenFile
watch add write 0x401000 0x10
- Use
helpfirst when you are unsure about a command. - Brovan options must come before the target binary path.
- Everything after the binary path is passed to the emulated program unchanged.
- Network behavior is controlled by policy.
--net=noneis the safest choice for unknown samples. -
--command/-cis useful for scripting repeatable sessions, especially when you want to combine startup, tracing, and execution into one run.