34 lines
858 B
Go
34 lines
858 B
Go
|
package winloader
|
||
|
|
||
|
import (
|
||
|
"github.com/jchv/go-winloader/internal/memloader"
|
||
|
"github.com/jchv/go-winloader/internal/winloader"
|
||
|
)
|
||
|
|
||
|
var native = winloader.Loader{}
|
||
|
|
||
|
var cache = memloader.NewCache(native)
|
||
|
|
||
|
var ldr = memloader.New(memloader.Options{
|
||
|
Next: cache,
|
||
|
Machine: winloader.NativeMachine{},
|
||
|
})
|
||
|
|
||
|
// LoadFromFile loads a Windows module from file using the native Windows
|
||
|
// loader.
|
||
|
func LoadFromFile(name string) (Module, error) {
|
||
|
return native.Load(name)
|
||
|
}
|
||
|
|
||
|
// LoadFromMemory loads a Windows module from memory.
|
||
|
func LoadFromMemory(data []byte) (Module, error) {
|
||
|
return ldr.LoadMem(data)
|
||
|
}
|
||
|
|
||
|
// AddToCache adds a module to the loader cache, allowing in-memory libraries
|
||
|
// to link to it. Note that modules in the cache must exist in the same
|
||
|
// address space.
|
||
|
func AddToCache(name string, module Module) error {
|
||
|
return cache.Add(name, module)
|
||
|
}
|