https://github.com/kisasexypantera94/v2p
Implementation of x86 paging translation
https://github.com/kisasexypantera94/v2p
paging x86
Last synced: 6 months ago
JSON representation
Implementation of x86 paging translation
- Host: GitHub
- URL: https://github.com/kisasexypantera94/v2p
- Owner: kisasexypantera94
- Created: 2020-06-12T21:44:46.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2020-06-19T11:40:21.000Z (about 6 years ago)
- Last Synced: 2023-10-19T19:13:46.594Z (over 2 years ago)
- Topics: paging, x86
- Language: C
- Homepage:
- Size: 38.1 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# v2p
# Features
* 32-Bit Paging (Legacy)
* PAE Paging
* TODO: IA-32e Paging
# Building
```
$ mkdir build
cd build
cmake ..
make
```
# Usage
Running tests:
```
$ ./tests/tests
OK
```
```c
#include
#include
#include "v2p.h"
int32_t
read_func(void *buf, const uint32_t size, const uint64_t physical_addr) {
uint64_t val = physical_addr | 1U;
memcpy(buf, &val, size);
return sizeof(val);
}
int main() {
uint32_t virt_addr = 123456789;
config_t cfg = {.level=LEGACY, .read_func=read_func, .root_addr=777777777};
uint64_t phys;
uint32_t page_fault;
error_t err = va2pa(virt_addr, &cfg, &phys, &page_fault);
switch (err) {
case SUCCESS: {
printf("OK: Physical address: %llu\n", phys);
break;
}
case PAGE_FAULT: {
switch (page_fault) {
case NOT_PRESENT:
printf("ERROR: page fault occurred: not present\n");
break;
case RESERVED_BIT_VIOLATION:
printf("ERROR: page fault occurred: reserved bit has been set\n");
break;
}
break;
}
case READ_FAULT: {
printf("ERROR: read fault occurred\n");
break;
}
case INVALID_TRANSLATION_TYPE: {
printf("ERROR: invalid translation type\n");
break;
}
}
return 0;
}
```