Advertisement
Guest User

Untitled

a guest
Nov 19th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.37 KB | None | 0 0
  1. .globl main
  2. .text
  3.  
  4. #define uart_base 0x01c28000
  5. #define uart1_offset 0x0400
  6. #define uart_bit 1 << 17
  7. #define ccu_base 0x01c20000
  8. #define O_RDWR 00000002
  9. #define O_DSYNC 00010000
  10. #define MAP_SHARED 1
  11. #define PROT_READ 1
  12. #define PROT_WRITE 2
  13.  
  14. main:
  15. push {lr}
  16. ldr r0, =mem
  17. ldr r1, =O_RDWR | O_DSYNC
  18. bl open
  19.  
  20. cmp r0, #0
  21. blt sudo_error
  22.  
  23. ldr r1, =ccu_base
  24. push {r1}
  25. push {r0}
  26. mov r0, #0
  27. mov r1, #4096
  28. mov r2, #PROT_READ | PROT_WRITE
  29. mov r3, #MAP_SHARED
  30. bl mmap
  31. @ Часики для UART1
  32. ldr r1, [r0, #0x6c]
  33. ldr r2, =uart_bit
  34. orr r1, r2
  35. str r1, [r0, #0x6c]
  36. @ Сброс UART1
  37. ldr r1, [r0, #0x2D8]
  38. orr r1, r2
  39. str r1, [r0, #0x2D8]
  40.  
  41. pop {r0}
  42. pop {r1}
  43.  
  44. ldr r1, =uart_base
  45. push {r1}
  46. push {r0}
  47. mov r0, #0
  48. mov r1, #4096
  49. mov r2, #PROT_READ | PROT_WRITE
  50. mov r3, #MAP_SHARED
  51. bl mmap
  52.  
  53. ldr r1, =uart
  54. str r0, [r1]
  55.  
  56. ldr r1, [r0, #uart1_offset + 0xC]
  57. mov r2, #0b10000011
  58. orr r1, r2
  59. str r1, [r0, #uart1_offset + 0xC]
  60. mov r1, #13
  61. str r1, [r0]
  62. mov r1, #0
  63. str r1, [r0, #uart1_offset + 4]
  64. ldr r1, [r0, #uart1_offset + 0xC]
  65. ldr r2, =~0b10000000
  66. and r1, r2
  67. str r1, [r0, #uart1_offset + 0xC]
  68.  
  69. pop {r0, r1}
  70.  
  71. ldr r5, =uart
  72. ldr r5, [r5]
  73. read:
  74. ldr r0, [r5, #uart1_offset + 0x14]
  75. and r0, #1
  76. cmp r0, #0
  77. bne symbol_exists
  78. b read
  79. symbol_exists:
  80. ldr r0, [r5, #uart1_offset]
  81. cmp r0, #-1
  82. beq good_exit
  83. ldr r1, =symbol
  84. str r0, [r1]
  85. mov r0, #1
  86. mov r2, #1
  87. mov r7, #4
  88. svc #0
  89. b read
  90.  
  91. sudo_error:
  92. ldr r0, =error_msg
  93. bl printf
  94. mov r0, #1
  95. pop {pc}
  96.  
  97. good_exit:
  98. mov r0, #10
  99. ldr r1, =symbol
  100. str r0, [r1]
  101. mov r0, #1
  102. mov r2, #1
  103. mov r7, #4
  104. svc #0
  105. pop {pc}
  106.  
  107. .data
  108. symbol: .byte 0
  109. uart: .int 0
  110. mem: .asciz "/dev/mem"
  111. error_msg: .asciz "Ask administrator about this action\n"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement