Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  1. .data
  2. # масив для виклику cat log.txt
  3. cmd_cat: .string "/bin/cat"
  4. arg_cat: .string "log.txt"
  5. args_cat: .long cmd_cat, arg_cat, 0
  6. # масив для виклику wc –l
  7. cmd_wc: .string "/usr/bin/wc"
  8. arg_wc: .string "-l"
  9. args_wc: .long cmd_wc, arg_wc, 0
  10. # масив файлових дескрипторів для pipe
  11. fds: .int 0, 0
  12. .text
  13. .globl _start
  14. _start:
  15. # виклик pipe(fds)
  16. pushl $fds
  17. call pipe
  18. # виклик fork()
  19. call fork
  20. # перехід до коду дочірнього процесу для cat,
  21. # якщо fork повернув 0
  22. cmpl $0, %eax
  23. je child_cat
  24. # виклик fork() у батьківському процесі
  25. call fork
  26. # перехід до коду дочірнього процесу для wc,
  27. # якщо fork повернув 0
  28. cmpl $0, %eax
  29. je child_wc
  30. # close(fd[0]) у батьківському процесі
  31. movl $fds, %eax
  32. pushl 0(%eax)
  33. call close
  34. # close(fd[1]) у батьківському процесі
  35. movl $fds, %eax
  36. pushl 4(%eax)
  37. call close
  38. # виклик wait(NULL) - для cat
  39. pushl $0
  40. call wait
  41. # ще один виклик wait(NULL) - для wc
  42. pushl $0
  43. call wait
  44. finish:
  45. # виклик exit(0)
  46. movl $1, %eax
  47. movl $0, %ebx
  48. int $0x80
  49. # код дочірнього процесу для cat
  50. child_cat:
  51. # виклик dup2(fds[1],1)
  52. pushl $1
  53. movl $fds, %eax
  54. pushl 4(%eax)
  55. call dup2
  56. # виклик close(fds[0]), close(fds[1])
  57. movl $fds, %eax
  58. pushl 0(%eax)
  59. call close
  60. movl $fds, %eax
  61. pushl 4(%eax)
  62. call close
  63. # виклик execve(cmd_cat, args_cat)
  64. pushl $args_cat
  65. pushl $cmd_cat
  66. call execve
  67. call finish
  68. # код дочірнього процесу для wc
  69. child_wc:
  70. # виклик dup2(fds[0],0)
  71. pushl $0
  72. movl $fds, %eax
  73. pushl (%eax)
  74. call dup2
  75. # виклик close(fds[0]), close(fds[1])
  76. movl $fds, %eax
  77. pushl 0(%eax)
  78. call close
  79. movl $fds, %eax
  80. pushl 4(%eax)
  81. call close
  82. # виклик execve(cmd_wc, args_wc)
  83. pushl $args_wc
  84. pushl $cmd_wc
  85. call execve
  86. call finish
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement