Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Purpose: Unfuck Linux memory management
- Author: Reece W. (2018)
- License: All Rights Reserved J. Reece Wilson, released under MIT
- */
- typedef void * virtual_context_h;
- typedef void * virtual_reserve_h;
- typedef void * mmu_ctx_h;
- #define LM_ACCESS_READ (1 << 0)
- #define LM_ACCESS_READ_WRITE (1 << 1)
- #define LM_ACCESS_READ_WRITE_EXECUTE (1 << 2)
- enum lm_error_e
- {
- LM_ERROR_SUCCESS,
- LM_ERROR_LINUX_FAULT,
- LM_ERROR_NO_PERMISSION,
- LM_ERROR_ARCH_NOT_SUPPORTED,
- LM_ERROR_NOT_IMPLEMENTED,
- LM_ERROR_BUFFER_OVERFLOW,
- LM_ERROR_BUFFER_NOT_COMMITED,
- LM_ERROR_NO_MAP_EXISTS,
- LM_ERROR_MAP_ALREADY_EXISTS,
- LM_ERROR_CONTEXT_ALREADY_CREATED
- };
- enum lm_cache_e
- {
- LM_CACHE_NO_CACHE,
- LM_CACHE_WRITECOMBINED,
- LM_CACHE_DEVICE
- };
- lm_error_e lm_helper_pagelen ();
- // Allocate virtual address spaces
- lm_error_e lm_mmu_get_kernel (mmu_ctx_h *);
- lm_error_e lm_mmu_get_usermode (struct task_struct *, mmu_ctx_h *);
- lm_error_e lm_addresses_reserve (mmu_ctx_h, size_t length, virtual_reserve_h * ctx);
- lm_error_e lm_addresses_reserve_ex (mmu_ctx_h, size_t address, size_t length, virtual_reserve_h * ctx);
- int lm_addresses_get_start (virtual_reserve_h reserve);
- int lm_addresses_get_end (virtual_reserve_h reserve);
- int lm_addresses_get_length (virtual_reserve_h reserve);
- lm_error_e lm_addresses_allocate (virtual_reserve_h reserve, size_t pg_offset, size_t length, virtual_context_h *);
- // Setup context
- lm_error_e lm_virtual_set_x86_cache (virtual_context_h, enum page_cache_mode pcm);
- lm_error_e lm_virtual_set_cache (virtual_context_h, lm_cache_e cache);
- lm_error_e lm_virtual_set_prot (virtual_context_h, size_t prot);
- lm_error_e lm_virtual_set_page (virtual_context_h, size_t pg_offset, struct page * page);
- lm_error_e lm_virtual_commit (virtual_context_h);
- lm_error_e lm_free_context (virtual_context_h);
- lm_error_e lm_free_address (virtual_reserve_h);
- lm_error_e lm_free_mmu (mmu_ctx_h);
- enum lm_direction_e
- {
- LM_DIRECTION_READ,
- LM_DIRECTION_WRITE
- };
- struct lm_access_request_s
- {
- mmu_ctx_h mmu;
- size_t virtual_address;
- lm_direction_e direction;
- union
- {
- void * read;
- const void * write;
- void * buffer;
- };
- size_t length;
- };
- lm_error_e lm_access_memory(lm_access_request_s *);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement