- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在编写一个枚举进程基地址的函数。这是通过几个 Windows API 调用完成的,但是,我相信是我对 EnumProcessModules
的调用造成了错误。
还应注意,并非每个进程都会出现此错误。
我已经尝试将一些 uint32 更改为 uint64,反之亦然,以及创建 moduleHandles
数组的不同方法,但我无法使任何工作正常进行。
这只是我正在创建的用于检索和扫描另一个进程内存的应用程序中的一个函数。
这是我的函数的源代码:
func getBaseAddress(handle uintptr) int64 {
// GetProcessImageFileNameA
var imageFileName [200]byte
var fileSize uint32 = 200
var fileName string
ret, _, _ := procGetProcessImageFileNameA.Call(handle, uintptr(unsafe.Pointer(&imageFileName)), uintptr(fileSize))
for _, char := range imageFileName {
if char == 0 {
break
}
fileName += string(char)
}
fileName = fileName[24:]
// EnumProcessModules
var n uint32
var needed uint64
ret, _, _ = procEnumProcessModules.Call(handle, 0, uintptr(n), uintptr(unsafe.Pointer(&needed)))
moduleHandles := make([]syscall.Handle, int(needed))
if ret == 1 && needed > 0 {
ret, _, _ = procEnumProcessModules.Call(handle, uintptr(unsafe.Pointer(&moduleHandles)), uintptr(needed), uintptr(unsafe.Pointer(&needed)))
}
// GetModuleFileNameExA
var finalModuleHandle uintptr
for _, moduleHandle := range moduleHandles {
if moduleHandle > 0 {
var moduleFileName [200]byte
var moduleSize uint32 = 200
var moduleName string
ret, _, _ = procGetModuleFileNameExA.Call(handle, uintptr(moduleHandle), uintptr(unsafe.Pointer(&moduleFileName)), uintptr(moduleSize))
if ret != 0 {
for _, char := range moduleFileName {
if char == 0 {
break
}
moduleName += string(char)
}
moduleName = moduleName[3:]
if moduleName == fileName {
finalModuleHandle = uintptr(moduleHandle)
break
}
}
}
}
return int64(finalModuleHandle)
}
最佳答案
EnumProcessModules
的第二个参数不能是空指针 (0),即使您只是想确定所需的条目数也是如此。
关于go - 调用 EnumProcessModules 时出现“意外故障地址”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57068772/
我正在尝试调用 ;EnumProcessModules;使用给定句柄的 Go var ( psapi = syscall.NewLazyDLL("Psapi.dll") procEnu
我试图从游戏中读取坐标。当我在通过 OpenProcess 收到的 HANDLE 上使用 ReadProcessMemory 时,这工作得很好,我在 CheatEngine 中找到了内存。例如,如果我
我正在编写一个枚举进程基地址的函数。这是通过几个 Windows API 调用完成的,但是,我相信是我对 EnumProcessModules 的调用造成了错误。 还应注意,并非每个进程都会出现此错误
我目前正在尝试枚举我之前从我的 32 位程序创建的 supsended 32 位进程的所有模块,我的 Windows 是 64 位的。 (我已经阅读了有关该问题的所有其他主题)。 这是代码: let
我在 Windows 服务中执行了以下代码在 Windows XP 32 位上: HANDLE h = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_
我的代码在win7 32bit上运行,但是当我使用EnumProcessModules时,它返回false,getlasterror()返回错误代码299,声明程序是32bit的,这条语句不能运行在
我是一名优秀的程序员,十分优秀!