Пожалуйста, обратите внимание, что пользователь заблокирован
Из интереса написал либу для динамического импорта win-api.
pkg/go_pe - парсер PE-формата. Основан на либе github.com/Velocidex/go-pe, правда я её чуток переписал - в ориг. либе все смещения высчитываются относительно файла, что, в моём случае, было не нужно. Ну и обрезал ненужные функции.
pkg/dyn_win_api - кастомная реализация GetModuleHandle (парсинг PEB->Ldr) и GetProcAddress (парсинг экспорта загруженного модуля, форварды поддерживаются), ну и небольшая обёртка над всем этим делом.
internal/winapi - пример реализации конечного враппера для дальнейшего удобного использования.
internal/app - пример использования (простой месседж бокс):
Сборка - просто запускаем батник build_win32_gui.bat,.
В общем-то и всё. Пример забивания гвоздей тапком, но может кому пригодиться. Так же если кому-нибудь будет интересно - напишу простенькую малварку на го (по типу клиппера/криптора), если будет время. Так же исходники выложу.
pkg/go_pe - парсер PE-формата. Основан на либе github.com/Velocidex/go-pe, правда я её чуток переписал - в ориг. либе все смещения высчитываются относительно файла, что, в моём случае, было не нужно. Ну и обрезал ненужные функции.
pe, err := go_pe.NewPEFile(reader io.ReadAt), где reader - интерфейс с методом ReadAt(buff []byte, offset int64) (countReaded int, err error) который просто читает данные по смещению offset и возвращает кол-во прочитанных байт, пример:
C:
type Module uintptr
func (m Module) ReadAt(p []byte, off int64) (n int, _ error) {
if off == -1 {
return 0, errors.New("negative offset")
}
n = len(p)
m = Module(int64(m) + off)
for i := 0; i < n; i++ {
p[i] = *((*byte)(unsafe.Pointer(m + Module(i))))
}
return n, nil
}
internal/winapi - пример реализации конечного враппера для дальнейшего удобного использования.
internal/app - пример использования (простой месседж бокс):
C:
package app
import (
"win/internal/winapi"
)
func Run() {
w := winapi.NewWinApi()
w.MessageBox(0, "text", "caption", 0)
}
В общем-то и всё. Пример забивания гвоздей тапком, но может кому пригодиться. Так же если кому-нибудь будет интересно - напишу простенькую малварку на го (по типу клиппера/криптора), если будет время. Так же исходники выложу.