INNER CODE UNIT · C

__attribute__

docker-easyconnect/docker-easyconnect · fake-hwaddr/fake-hwaddr.c:16

static void __attribute__((constructor)) init(void) {
  glibc_ioctl = dlsym(RTLD_NEXT, "ioctl");
  char *fake_hwaddr = getenv("FAKE_HWADDR");
  if (fake_hwaddr) {
    if (sscanf(fake_hwaddr, "%2hhx:%2hhx:%2hhx:%2hhx:%2hhx:%2hhx", hwaddr,
               hwaddr + 1, hwaddr + 2, hwaddr + 3, hwaddr + 4,
               hwaddr + 5) == 6 ||
        sscanf(fake_hwaddr, "%2hhx-%2hhx-%2hhx-%2hhx-%2hhx-%2hhx", hwaddr,
               hwaddr + 1, hwaddr + 2, hwaddr + 3, hwaddr + 4, hwaddr + 5) == 6)
      no_fake_hwaddr = 0;
    else
      printf("FAKE_HWADDR format error!\n");
  }
}

int ioctl(int fd, unsigned long request, void *arg) {
  if (request != SIOCGIFHWADDR || no_fake_hwaddr)
    return glibc_ioctl(fd, request, arg);

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…