mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-02-25 14:26:57 +00:00
support uc_mem_map_ptr in Go and Python bindings
This commit is contained in:
parent
6d21ebabea
commit
18066b3578
|
@ -28,6 +28,7 @@ func errReturn(err C.uc_err) error {
|
||||||
type Unicorn interface {
|
type Unicorn interface {
|
||||||
MemMap(addr, size uint64) error
|
MemMap(addr, size uint64) error
|
||||||
MemMapProt(addr, size uint64, prot int) error
|
MemMapProt(addr, size uint64, prot int) error
|
||||||
|
MemMapPtr(addr, size uint64, ptr unsafe.Pointer) error
|
||||||
MemUnmap(addr, size uint64) error
|
MemUnmap(addr, size uint64) error
|
||||||
MemRead(addr, size uint64) ([]byte, error)
|
MemRead(addr, size uint64) ([]byte, error)
|
||||||
MemReadInto(dst []byte, addr uint64) error
|
MemReadInto(dst []byte, addr uint64) error
|
||||||
|
@ -128,6 +129,10 @@ func (u *uc) MemMap(addr, size uint64) error {
|
||||||
return u.MemMapProt(addr, size, PROT_ALL)
|
return u.MemMapProt(addr, size, PROT_ALL)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (u *uc) MemMapPtr(addr, size uint64, ptr unsafe.Pointer) error {
|
||||||
|
return errReturn(C.uc_mem_map_ptr(u.handle, C.uint64_t(addr), C.size_t(size), ptr))
|
||||||
|
}
|
||||||
|
|
||||||
func (u *uc) MemUnmap(addr, size uint64) error {
|
func (u *uc) MemUnmap(addr, size uint64) error {
|
||||||
return errReturn(C.uc_mem_unmap(u.handle, C.uint64_t(addr), C.size_t(size)))
|
return errReturn(C.uc_mem_unmap(u.handle, C.uint64_t(addr), C.size_t(size)))
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,6 +104,7 @@ _setup_prototype(_uc, "uc_emu_start", ucerr, uc_engine, ctypes.c_uint64, ctypes.
|
||||||
_setup_prototype(_uc, "uc_emu_stop", ucerr, uc_engine)
|
_setup_prototype(_uc, "uc_emu_stop", ucerr, uc_engine)
|
||||||
_setup_prototype(_uc, "uc_hook_del", ucerr, uc_engine, uc_hook_h)
|
_setup_prototype(_uc, "uc_hook_del", ucerr, uc_engine, uc_hook_h)
|
||||||
_setup_prototype(_uc, "uc_mem_map", ucerr, uc_engine, ctypes.c_uint64, ctypes.c_size_t, ctypes.c_uint32)
|
_setup_prototype(_uc, "uc_mem_map", ucerr, uc_engine, ctypes.c_uint64, ctypes.c_size_t, ctypes.c_uint32)
|
||||||
|
_setup_prototype(_uc, "uc_mem_map_ptr", ucerr, uc_engine, ctypes.c_uint64, ctypes.c_size_t, ctypes.c_void_p)
|
||||||
_setup_prototype(_uc, "uc_mem_unmap", ucerr, uc_engine, ctypes.c_uint64, ctypes.c_size_t)
|
_setup_prototype(_uc, "uc_mem_unmap", ucerr, uc_engine, ctypes.c_uint64, ctypes.c_size_t)
|
||||||
_setup_prototype(_uc, "uc_mem_protect", ucerr, uc_engine, ctypes.c_uint64, ctypes.c_size_t, ctypes.c_uint32)
|
_setup_prototype(_uc, "uc_mem_protect", ucerr, uc_engine, ctypes.c_uint64, ctypes.c_size_t, ctypes.c_uint32)
|
||||||
|
|
||||||
|
@ -241,6 +242,13 @@ class Uc(object):
|
||||||
raise UcError(status)
|
raise UcError(status)
|
||||||
|
|
||||||
|
|
||||||
|
# map a range of memory from a raw host memory address
|
||||||
|
def mem_map_ptr(self, address, size, ptr):
|
||||||
|
status = _uc.uc_mem_map_ptr(self._uch, address, size, ptr)
|
||||||
|
if status != UC_ERR_OK:
|
||||||
|
raise UcError(status)
|
||||||
|
|
||||||
|
|
||||||
# unmap a range of memory
|
# unmap a range of memory
|
||||||
def mem_unmap(self, address, size):
|
def mem_unmap(self, address, size):
|
||||||
status = _uc.uc_mem_unmap(self._uch, address, size)
|
status = _uc.uc_mem_unmap(self._uch, address, size)
|
||||||
|
|
Loading…
Reference in a new issue