Beispiel #1
0
void	print_section(Elf_data* data, int i)
{
  unsigned int	j;

  while (++i < E_SHNUM(data))
    if (SH_SIZE(data, i) > 0)
    {
      printf("Contents of section %s:\n", &data->strtab[SH_NAME(data, i)]);
      j = 0;
      while (j < SH_SIZE(data, i) && SH_OFFSET(data, i) + j < data->fsize)
      {
        if (j == 0)
          printf(" %04x\t", (unsigned int)SH_ADDR(data, i) + j);
        printf("%02x", *(UCHAR(data->data) + SH_OFFSET(data, i) + j));
        ++j;
        if (j != 0 && j % 16 == 0)
        {
          print_char(UCHAR(data->data) + SH_OFFSET(data, i), j - 16, j);
          printf("\n %04x\t", (unsigned int)SH_ADDR(data, i) + j);
        }
        else if (j != 0 && j % 4 == 0)
          printf(" ");
      }
      print_char(UCHAR(data->data) + SH_OFFSET(data, i), j - (j % 16), j);
      printf("\n");
    }
}
Beispiel #2
0
SharedMemory::SharedMemory(const char *name, Mode mode) :
    mode(mode),
    err(0)
{
    strcpy(this->name, name);

    size = sizeof(SegmentHeader);
    fd = shm_open(name, mode==Master ? (O_CREAT | O_RDWR | O_EXCL) : O_RDWR, S_IRUSR | S_IWUSR);
    if(fd<0)
    {
        err = errno;
        std::cerr << "Failed to open shared memory" << std::endl;
        return;
    }

    std::cout << "init sharedmemory " << sizeof(SegmentHeader) << std::endl;

    int r=0;
    if(mode==Master)r = ftruncate(fd, size);
    if(r)
    {
        std::cerr << "Can't resize file" << std::endl;
        return;
    }
    rptr = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

    if(mode==Master)
    {
        SH_SIZE(rptr) = 0;
        SH_MUTEX(rptr) = 0;
    }
}
Beispiel #3
0
void SharedMemory::resize(size_t _size)
{
    if(rptr)munmap(rptr, size);
    size = _size+sizeof(SegmentHeader);
    if(mode==Master)
    {
        if(ftruncate(fd, size))
        {
            std::cerr << "Can't resize memory" << std::endl;
        }
    }
    rptr = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    if(rptr==MAP_FAILED)std::cerr << "Failed to map memory" << std::endl;
    if(mode==Master)SH_SIZE(rptr) = size;
}
Beispiel #4
0
size_t SharedMemory::getSize()
{
    return SH_SIZE(rptr);
}
Beispiel #5
0
void SharedMemory::autoResize()
{
    resize(SH_SIZE(rptr));
}