Skip to content

Commit

Permalink
implemented specific LM_GetPage and LM_GetPageEx for Windows
Browse files Browse the repository at this point in the history
  • Loading branch information
rdbo committed Dec 24, 2022
1 parent 54bff75 commit ab7a0b6
Showing 1 changed file with 63 additions and 7 deletions.
70 changes: 63 additions & 7 deletions libmem/src/page.c
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,25 @@ LM_EnumPagesEx(lm_process_t proc,

/********************************/

#if LM_OS == LM_OS_WIN
LM_PRIVATE lm_bool_t
_LM_GetPage(lm_address_t addr,
lm_page_t *page)
{
MEMORY_BASIC_INFORMATION mbi;

if (!VirtualQuery(addr, &mbi, sizeof(mbi)))
return LM_FALSE;

page->base = (lm_address_t)mbi.BaseAddress;
page->size = (lm_size_t)mbi.RegionSize;
page->end = (lm_address_t)LM_OFFSET(page.base, page.size);
page->prot = mbi.Protect;
page->flags = mbi.Type;

return LM_TRUE;
}
#else
typedef struct {
lm_address_t addr;
lm_page_t *pagebuf;
Expand All @@ -202,9 +221,9 @@ _LM_GetPageCallback(lm_page_t page,
return LM_TRUE;
}

LM_API lm_bool_t
LM_GetPage(lm_address_t addr,
lm_page_t *page)
LM_PRIVATE lm_bool_t
_LM_GetPage(lm_address_t addr,
lm_page_t *page)
{
lm_bool_t ret = LM_FALSE;
_lm_get_page_t arg;
Expand All @@ -223,13 +242,41 @@ LM_GetPage(lm_address_t addr,

return ret;
}
#endif

LM_API lm_bool_t
LM_GetPage(lm_address_t addr,
lm_page_t *page)
{
return _LM_GetPage(addr, page);
}

/********************************/

LM_API lm_bool_t
LM_GetPageEx(lm_process_t proc,
lm_address_t addr,
lm_page_t *page)
#if LM_OS == LM_OS_WIN
LM_PRIVATE lm_bool_t
_LM_GetPageEx(lm_process_t proc,
lm_address_t addr,
lm_page_t *page)
{
MEMORY_BASIC_INFORMATION mbi;

if (!VirtualQueryEx(proc.handle, addr, &mbi, sizeof(mbi)))
return LM_FALSE;

page->base = (lm_address_t)mbi.BaseAddress;
page->size = (lm_size_t)mbi.RegionSize;
page->end = (lm_address_t)LM_OFFSET(page.base, page.size);
page->prot = mbi.Protect;
page->flags = mbi.Type;

return LM_TRUE;
}
#else
LM_PRIVATE lm_bool_t
_LM_GetPageEx(lm_process_t proc,
lm_address_t addr,
lm_page_t *page)
{
lm_bool_t ret = LM_FALSE;
_lm_get_page_t arg;
Expand All @@ -249,4 +296,13 @@ LM_GetPageEx(lm_process_t proc,
ret = page->size > 0 ? LM_TRUE : LM_FALSE;
return ret;
}
#endif

LM_API lm_bool_t
LM_GetPageEx(lm_process_t proc,
lm_address_t addr,
lm_page_t *page)
{
return _LM_GetPageEx(proc, addr, page);
}

0 comments on commit ab7a0b6

Please sign in to comment.