Advertisement
Madmouse

YAY, now we translate this shit into assembly

Jun 6th, 2015
371
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.95 KB | None | 0 0
  1. #include <dirent.h>
  2. #include <fcntl.h>
  3. #include <stdio.h>
  4. #include <unistd.h>
  5. #include <stdlib.h>
  6. #include <sys/stat.h>
  7. #include <sys/syscall.h>
  8.  
  9. typedef struct linux_dirent {
  10.     long           d_ino;
  11.     off_t          d_off;
  12.     unsigned short d_reclen;
  13.     char           d_name[];
  14. } dent;
  15.  
  16. #define handle_error(msg) \
  17.     do { perror(msg); exit(EXIT_FAILURE); } while (0)
  18.  
  19.  
  20. main()
  21. {
  22.     char buf[1024];
  23.     int fd, nread;
  24.     // opendir
  25.     fd = open(".", O_RDONLY | O_DIRECTORY);
  26.     if (fd == -1)
  27.         handle_error("open");
  28.    
  29.    
  30.     // list dir
  31.     nread = syscall(SYS_getdents, fd, buf, sizeof(buf));
  32.     if (nread == -1)
  33.         handle_error("getdents");
  34.  
  35.     if (nread == 0)
  36.         break;
  37.     int bpos;
  38.     for (bpos = 0; bpos < nread;)
  39.     {
  40.         dent* d = (struct linux_dirent *) (buf + bpos);
  41.         int d_type = *(buf + bpos + d->d_reclen - 1);
  42.         if(d_type == DT_REG)
  43.             printf("%4d %s\n", d->d_reclen, d->d_name);
  44.         bpos += d->d_reclen;
  45.     }
  46.     // closedir
  47.     close(fd);
  48.     close(nread);
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement