Можно ли смонтировать удаленную файловую систему и открыть / mmap / dev / mem? - PullRequest
0 голосов
/ 01 июня 2019

Мне интересно, возможно ли написать c-код для открытия и отобразить указатель памяти на / dev / mem удаленной файловой системы.Я смонтировал эту систему в / mnt / системы, из которой планирую запустить код.Я смонтировал / dev с помощью sshfs, поэтому полный путь выглядел бы как / mnt / mem из системы, где выполняется код на языке c.

По моему опыту, я мог бы открыть / mmap / dev / mem, если бы ябыл напрямую подключен к удаленной системе и получил доступ к нужным компонентам.То есть, если я изменю строку, используемую для открытия файлового дескриптора, с / mnt / mem на / dev / mem, и вместо этого скомпилирую и выполню ее локально, которая работает и выбирает ожидаемые данные регистра.

Кажется,как я могу успешно открыть и mmap в / home / что угодно в удаленной системе.Есть ли какая-то причина, по которой удаленно смонтированный / dev / mem просто не может быть открыт одинаково?

Дополнительная информация для моего случая: -Linux-дистрибутив на обеих системах -ssh, установленный на обоих -sshfs, установленный гдеЯ сделал монтирование из -У меня есть root-доступ к обеим системам

свойства / dev / mem, наблюдаемые из хост-системы:

crw-rw-rw- 1 root root 0, 08 декабря 2105 / mnt / mem

Ошибка возвращает разрешение, в котором отказано, как будто даже с привилегией root я все еще не могу открыть память таким образом, но я не уверен, почему это не должно работать, если установлено разрешение r / wво всех путях и в самой mem.

Я также выполнил монтирование sshfs, используя root и root удаленной системы.

//Mmap a target to a pointer variable/fd
struct reg_ptrs mmap_target(struct access_method_info mthd_info)
{
  struct reg_ptrs mapped_ptrs;
  mapped_ptrs.iic_bar = NULL;
  char   mem_path1[100];

  strcpy(mem_path1,"/mnt/mem");

  int mem_fd1;
  mem_fd1 = open(mem_path1, O_RDWR);
  if(mem_fd1 == -1) {
    printf("Couldn't open()! %s\n", strerror(errno));
  }

  mapped_ptrs.iic_bar = mmap(NULL, 0x1000, PROT_READ | PROT_WRITE, MAP_SHARED, mem_fd1, 0xff0e0000);

  //With pointers mapped to appropriate memory, we should be able to close these now
  close(mem_fd1);

  return mapped_ptrs;
} /* mmap_target */

Ожидаемые результаты будут для open () и mmap.() c функции для успешного открытия и отображения удаленно смонтированного файла / dev / mem

1 Ответ

0 голосов
/ 01 июня 2019

Файлы устройств на самом деле не являются файлами, которые открываются - когда вы открываете один, он использует номер устройства из inode в качестве индекса в таблице устройств ядра, чтобы узнать, какой из них открыть.Так что, если вы могли бы открыть / mnt / mem (устройство с удаленного компьютера, он бы посмотрел индекс устройства памяти удаленного ядра в локальном ядре. Таким образом, вы получите какое-то случайное устройство на вашем компьютере).локальное ядро, что бы ни находилось в этом слоте. Даже если бы это было устройство памяти (и могло бы быть, если бы ядра были настроены аналогично), вы бы получили память локального ядра, а не память удаленного ядра. По этой причине,удаленные файловые системы (почти) неизменно монтируются с опцией -nodev (по умолчанию), что означает, что файлы устройств не могут быть открыты.

...