Files
wehub-resource-sync c4536f7e05
CI / test (push) Failing after 1s
CI / macOS amd64 (push) Has been cancelled
CI / macOS arm64 (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:30:31 +08:00

71 lines
2.4 KiB
Go

package disasm
// Code combines the disassembly and the source code mapping.
type Code struct {
// Name is the name of the code block, e.g. function or method name.
Name string
// File is where the code is located.
File string
// Arch is the GOARCH of the disassembled binary.
Arch string
// Insts is the slice of a all instructions in the code.
Insts []Inst
// MaxJump is the maximum layers of jumps for the codeblock.
// This is used to determine how much padding is created for
// the jump lines.
MaxJump int
// Source is the slice of a codeblocks that were used to create the instructions.
Source []Source
}
// Inst represents a single instruction.
type Inst struct {
// PC is the program counter, usually offset in the binary.
PC uint64
// Text is the textual representation of this instruction.
Text string
// NativeText is the native assembler syntax for this instruction.
NativeText string
// Mnemonic is the canonical decoder mnemonic (e.g. "LD1" where Text spells
// it "VLD1"), used for reference lookups. Empty for undecodable bytes.
Mnemonic string
// File is the location where this instruction was compiled from.
File string
// Line is the line in the file where this instruction was compiled from.
Line int
// RefPC is a reference to another program counter, e.g. a call.
RefPC uint64
// RefOffset is a reference to a relative jump.
RefOffset int
// RefStack is the depth that the jump line should be drawn at.
RefStack int
// Call is a named target that should be present in Funcs.
// This is used to make the instruction clickable and follow to the
// called target.
Call string
}
// Source represents code from a single file.
type Source struct {
// File is the file name for the source code.
File string
// Blocks is a slice of blocks that were used for compiling the instructions.
Blocks []SourceBlock
}
// SourceBlock represents a single sequential codeblock that references the instructions.
type SourceBlock struct {
// LineRange is the range of lines that it references from the file.
LineRange
// Lines are textual representation of the source starting from `LineRange.From`.
Lines []string
// Related contains a set of ranges in the instructions.
// e.g. for source code Lines[5] there will be drawn relation shapes to each
// instructions `for _, r := range Related[5] { draw(Insts[r.From:r.To]) }`
Related [][]LineRange
}