The tool allows you to assemble and disassemble BIOS Guard script.
To assemble a script, you need to use big-script-tool.py -a <script_file>.
Assembled script will be saved to file <script_file>_assembled.bin.
Also you can use class BigScript directly:
script = BigScript(code_string=src)
script.to_bytes()
or
script = BigScript()
script.assemble(src)
script.to_bytes()
The operands are:
- buffers
- flash pointers
- registers
- immediate values
- labels
Buffers: buffer<number_of_the_buffer> (or b<number_of_the_buffer>). Storages of the data.
buffer0 points to the actual BGUP. Other buffers are temporal.
set b0 0xAA00
add b0 0x1
Flash pointers: flash<number_of_the_flash_ptr> (or f<number_of_the_flash_ptr>). Stores some linear address of the flash.
set f0 0xA00000
sub f0 0x10
Registers: r<number_of_the_register> - a little storage of the temporal data.
set r1 0x10
set r2 0x20
add r1 r2
and r1 0x30
Imm values: <number> or 0x<number> if you prefer to use hex. Please note, that hex numbers are start only with 0x prefix. If you write something like 10000h it will be interpreted as a decimal number.
Labels: _<name_of_the_label> - an arbitrary script line name. Can be used only in control flow instructions.
Please note, that labels start with _ and must not end with symbols like :. If you use that symbol, you will need to refer to the label like jmp _label:.
_loop
sub r1 r2
cmp r1 0x0
jne _loop
| Opcode name | Operands | Info |
|---|---|---|
| start | - | marks the start of the script |
| store | flash ptr, buffer, register |
write data from a buffer to the flash |
| store | flash ptr, buffer, immediate value |
write data from a buffer to the flash |
| load | buffer, flash ptr, register |
read data from the flash to the buffer |
| load | buffer, flash ptr, immediate value |
read data from the flash to the buffer |
| eraseblk | flash ptr |
Erase flash blk |
| eraseblk64kb | flash ptr |
Erase 64kb flash block |
| add | register, register |
|
| add | register, immediate value |
|
| add | buffer, register |
|
| add | buffer, immediate value |
|
| add | flash ptr, register |
|
| add | flash ptr, immediate value |
|
| sub | register, register |
|
| sub | register, immediate value |
|
| sub | buffer, register |
|
| sub | buffer, immediate value |
|
| sub | flash ptr, register |
|
| sub | flash ptr, immediate value |
|
| and | register, register |
|
| and | register, immediate value |
|
| or | register, register |
|
| or | register, immediate value |
|
| shr | register, immediate value |
|
| shl | register, immediate value |
|
| ror | register, immediate value |
|
| rol | register, immediate value |
|
| set | register, register |
|
| set | register, immediate value |
|
| set | buffer, register |
Set an offset from the beggining of the buffer |
| set | buffer, immediate value |
Set an offset from the beggining of the buffer |
| set | flash ptr, register |
Set a linear address of the flash |
| set | flash ptr, immediate value |
Set a linear address of the flash |
| loadbyte | register, buffer |
|
| loadword | register, buffer |
|
| loaddword | register, buffer |
|
| storebyte | buffer, register |
|
| storeword | buffer, register |
|
| storedword | buffer, register |
|
| cmp | register, register |
|
| cmp | register, immediate value |
|
| cmp | buffer, register |
|
| cmp | buffer, immediate value |
|
| cmp | flash ptr, register |
|
| cmp | flash ptr, immediate value |
|
| cmp | buffer, buffer, register |
Compare buffers with specified length |
| cmp | buffer, buffer, immediate value |
Compare buffers with specified length |
| copy | buffer, buffer, register |
Copy data with the specified length |
| copy | buffer, buffer, immediate value |
Copy data with the specified length |
| jmp | label (or imm) |
Uncoditional jump to the label. Also you can use a line number directly. |
| je | label (or imm) |
Coditional jump to the label. Also you can use a line number directly. |
| jne | label(or imm) |
Coditional jump to the label. Also you can use a line number directly. |
| jg | label (or imm) |
Coditional jump to the label. Also you can use a line number directly. |
| jge | label (or imm) |
Coditional jump to the label. Also you can use a line number directly. |
| jl | label (or imm) |
Coditional jump to the label. Also you can use a line number directly. |
| jle | label (or imm) |
Coditional jump to the label. Also you can use a line number directly. |
| jmp | register |
Uncoditional jump to the line number stored in register. |
| log | immediate value, register |
Write data from second operand to the BiG Log. The BiG log needs to be setup properly. |
| log | immediate value, immediate value |
Write data from second operand to the BiG Log. The BiG log needs to be setup properly. |
| rdsts | register |
Read status of previous operation into register. |
| rand | register |
|
| sleep | immediate value |
|
| end | - |
To disassemble a script, you need to use big-script-tool.py -d <script_file>.
Disassembled script will be saved to file <script_file>_disassembled.txt.
Also you can use class BigScript directly:
script = BigScript(code_bytes=bin_script)
script.to_string()
or
script = BigScript()
script.disassemble(bin_script)
script.to_string()