54 lines
1.5 KiB
Go
54 lines
1.5 KiB
Go
|
package loader
|
||
|
|
||
|
import "io"
|
||
|
|
||
|
// Proc represents a procedure in memory.
|
||
|
type Proc interface {
|
||
|
// Call calls the procedure. r1 and r2 contain the return value. lastErr
|
||
|
// contains the Windows error value after calling.
|
||
|
Call(a ...uint64) (r1, r2 uint64, lastErr error)
|
||
|
|
||
|
// Returns the raw address of this function.
|
||
|
Addr() uint64
|
||
|
}
|
||
|
|
||
|
// Memory is an interface for a block of allocated virtual memory.
|
||
|
type Memory interface {
|
||
|
io.ReadWriteSeeker
|
||
|
io.ReaderAt
|
||
|
io.WriterAt
|
||
|
|
||
|
// Free frees the virtual memory region.
|
||
|
Free()
|
||
|
|
||
|
// Addr returns the address of the region of memory in the virtual address
|
||
|
// space.
|
||
|
Addr() uint64
|
||
|
|
||
|
// Clear zeros the entire region of memory.
|
||
|
Clear()
|
||
|
|
||
|
// Protect changes the memory protection for a subregion of this allocated
|
||
|
// block. It should match the semantics of the VirtualProtect function on
|
||
|
// Windows.
|
||
|
Protect(addr, size uint64, protect int) error
|
||
|
}
|
||
|
|
||
|
// Machine is an abstract machine interface.
|
||
|
type Machine interface {
|
||
|
// IsArchitectureSupported returns whether or not an architecture is
|
||
|
// supported by this abstract machine. Machine is a PE machine ID.
|
||
|
IsArchitectureSupported(machine int) bool
|
||
|
|
||
|
// GetPageSize returns the size of a memory page on this abstract machine.
|
||
|
GetPageSize() uint64
|
||
|
|
||
|
// Alloc performs virtual memory allocation. It should match the semantics
|
||
|
// of VirtualAlloc/VirtualFree on Windows.
|
||
|
Alloc(addr, size uint64, allocType, protect int) Memory
|
||
|
|
||
|
// MemProc returns an object for interfacing with a procedure at addr in
|
||
|
// the abstract machine's virtual memory space.
|
||
|
MemProc(addr uint64) Proc
|
||
|
}
|