Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
23 / 10 / 1
Регистрация: 08.10.2015
Сообщений: 386

Как получить физический адрес по виртуальному?

05.10.2022, 15:41. Показов 1680. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
В функции iterateVirtualMemory я получаю виртуальный адрес страницы памяти процесса, и пытаюсь преобразовать его в физический. Но уровни pud, pmd, pte постоянно не найдены. Что это вообще значит, что физического адреса не существует или я что-то не так делаю?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <linux/module.h>       /* Необходим для любого модуля ядра */
#include <linux/kernel.h>       /* Здесь находится определение KERN_ALERT */
#include <linux/init.h>         /* Здесь находятся определения макросов */
#include <linux/sched.h>
#include <linux/mm_types.h>
#include <linux/pid.h>
#include <linux/pgtable.h>
#include <asm/page.h>
 
// Module metadata
MODULE_AUTHOR("Author");
MODULE_DESCRIPTION("Hello kernel");
MODULE_LICENSE("GPL");
 
static struct page *walk_page_table(unsigned long addr)
{
    pgd_t *pgd;
    p4d_t* p4d;
    pte_t *ptep, pte;
    pud_t *pud;
    pmd_t *pmd;
 
    struct page *page = NULL;
    struct mm_struct *mm = current->mm;
 
    pgd = pgd_offset(mm, addr);
    if (pgd_none(*pgd) || pgd_bad(*pgd))
        goto out;
    printk(KERN_NOTICE "Valid pgd");
    
    p4d = p4d_offset(pgd, addr);
    if (p4d_none(*p4d) || p4d_bad(*p4d))
        goto out;
    printk(KERN_NOTICE "Valid p4d");
 
    pud = pud_offset(p4d, addr);
    if (pud_none(*pud) || pud_bad(*pud))
        goto out;
    printk(KERN_NOTICE "Valid pud");
 
    pmd = pmd_offset(pud, addr);
    if (pmd_none(*pmd) || pmd_bad(*pmd))
        goto out;
    printk(KERN_NOTICE "Valid pmd");
 
    ptep = pte_offset_map(pmd, addr);
    if (!ptep)
        goto out;
    pte = *ptep;
 
    page = pte_page(pte);
    if (page)
        printk(KERN_INFO "page frame struct is @ %p", page);
    
    pte_unmap(ptep); 
 
 out:
    return page;
}
 
void iterateVirtualMemory(struct mm_struct *root){
   struct vm_area_struct *curr = root->mmap;
   while(curr->vm_next != NULL){
        printk(KERN_ALERT "Start VM %#lx\n", curr->vm_start);
        walk_page_table(curr->vm_start);
 
        curr = curr->vm_next;
   }     
}
 
static int __init hello_init(void)
{
        struct task_struct *taskp;
 
        iterateVirtualMemory(taskp->mm);
 
        return 0;
}
 
static void __exit hello_exit(void)
{
        printk(KERN_ALERT "Goodbye, kernel!\n");
}
 
module_init(hello_init);
module_exit(hello_exit);
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.10.2022, 15:41
Ответы с готовыми решениями:

Вычислить физический адрес по виртуальному, страничная организация памяти
Помогите решить задачу. В вычислительной системе со страничной организацией памяти и 32 битовым адресом размер страницы составляет 6...

Как определить физический адрес команды в ассемблере?
Доброго времени суток, мажет кто-нибудь подсказать как определить физический адрес команды в ассемблере или универсальную для этого формулу

Как разбить физический адрес на сегменты смещения 4 способами?
подскажите как разбить физический адресс на сегменты смещения 4 способами если число 35049h Добавлено через 2 минуты при числах 9,...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.10.2022, 15:41
Помогаю со студенческими работами здесь

Как узнать реальный физический МАС-адрес модема?
Здравствуйте. МАС-адрес в настройках модема (192.168.1.1) и на его задней крышке одинаковые. Подскажите! Как можно программным путем...

Физический адрес
как получить физический 20ти разрядный адрес. Объсните пожалуйста, лучше всего на примере к командах.

виртуальный адрес в физический
очень нужна программа, преобразовывающая виртуальный адрес в физический

Физический адрес диска
Подскажите пожалуйста как посмотреть физический адрес диска, а именно нужен адрес диска типа &quot;\Device\HarddiskVolume1&quot; ? ...

Физический адрес -4 гига
вот есть код mov esi,00400000h mov lodsd запустим его в одной проге , eax =100h , в другой eax = 23450h вот интересно какие (спец...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru