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

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

05.10.2022, 15:41. Показов 1656. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru