Почему нет доступа к порту 0xCF8?

Я использую Ubuntu в качестве ОС в Virtual Box (виртуальная машина). И моя цель — перечислить все устройства pci, которые можно найти в системе, используя код на С ++. Вот часть этого:

#include <stdio.h>
#include <string.h>
#include <sys/io.h>
#include <stdlib.h>
#define NOT_SPECIFIED "Not specified"
int main()
{
int i, busid, devid;
FILE * file = fopen("Pcibits.txt", "w+");
for (busid = 0; busid < 256; busid++)
{
for (devid = 0; devid < 32; devid++)
{
unsigned int recvp, ven_id, dev_id, clid;
unsigned int sendp =  (busid << 16) | (devid << 11) | ((unsigned int)0x80000000);
outl(sendp, 0x0CF8);
recvp = inl(0x0CFC);
char* str = new char[32];
sprintf(str, "%d", recvp);
fwrite(str, sizeof(char), sizeof(str)/sizeof(char), file);
fclose(file);
}
}
return 0;
}`

Но с помощью GDB я борюсь с ошибкой, как это:

Traceback (most recent call last): File "/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19-gdb.py", line 63, in <module>
from libstdcxx.v6.printers import register_libstdcxx_printers
ImportError: No module named 'libstdcxx'

Program received signal SIGSEGV, Segmentation fault.
0x000000000040075a in outl (__value=2256549650, __port=3320)
at /usr/include/x86_64-linux-gnu/sys/io.h:125
125   __asm__ __volatile__ ("outl %0,%w1": :"a" (__value), "Nd" (__port));

Что с этим не так? Как я понимаю, программа терпит неудачу на последнем шаге.
Пожалуйста помоги!)

-2

Решение

От Справочник по Ubuntu для этих типов функций.

Вы используете ioperm (2) или iopl (2), чтобы сообщить ядру
разрешить приложению пользовательского пространства получать доступ к портам ввода-вывода в
вопрос. Если этого не сделать, приложение получит
ошибка сегментации.

(Акцент мой)

Таким образом, вы должны установить правильное разрешение для вашей программы, чтобы предотвратить ошибку сегментации.

Подробнее о том, как установить разрешения доступа к низкоуровневому порту Вот

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]