Guest User

Untitled

a guest
Jul 17th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.70 KB | None | 0 0
  1. #include <linux/module.h>
  2. #include <linux/kernel.h>
  3. #include <linux/init.h>
  4. #include <linux/proc_fs.h>
  5. #include <asm/uaccess.h>
  6.  
  7.  
  8. MODULE_LICENSE("GPL");
  9. MODULE_AUTHOR("wasabiz");
  10.  
  11. void run(const char* ipt)
  12. {
  13. char dat[30000];
  14. int ptr = 0;
  15. int skr = 0;
  16. int brcn = 0;
  17. int i;
  18. char output[256];
  19. int len = 0;
  20.  
  21. for(i=0;i<300;i++) dat[i] = 0;
  22.  
  23. while (ipt[skr]!='\0') {
  24. //printf("%c\n", ipt[skr]);
  25. switch (ipt[skr]) {
  26. case '>':
  27. ptr++;
  28. break;
  29. case '<':
  30. ptr--;
  31. break;
  32. case '+':
  33. dat[ptr]--;
  34. break;
  35. case '-':
  36. dat[ptr]++;
  37. break;
  38. case '.':
  39. // Output dat[ptr]
  40. // putchar(-dat[ptr]);
  41. output[len] = -dat[ptr];
  42. len++;
  43. break;
  44. case ',':
  45. // Input to dat[ptr]
  46. break;
  47. case '[':
  48. /* Jump to ] if dat[ptr] is 0 */
  49. if(!dat[ptr]){
  50. brcn = 0;
  51. while(1){
  52. skr++;
  53. if(ipt[skr] == '[') {
  54. brcn++;
  55. }else if(ipt[skr] == ']') {
  56. brcn--;
  57. if(!brcn) break;
  58. }
  59. }
  60. skr--;
  61. }
  62. break;
  63. case ']':
  64. /* Jump to [ if dat[ptr] is not 0 */
  65. if(dat[ptr]){
  66. brcn = 0;
  67. while(1){
  68. skr--;
  69. if(ipt[skr] == ']') {
  70. brcn++;
  71. }else if(ipt[skr] == '['){
  72. if(!brcn) break;
  73. brcn--;
  74. }
  75. }
  76. skr--;
  77. }
  78. break;
  79. }
  80. skr++;
  81. }
  82.  
  83. output[len] = '\0';
  84. printk( KERN_INFO "%s", output);
  85. }
  86.  
  87. static int
  88. proc_write( struct file *flip, const char *buf, unsigned long len, void *data)
  89. {
  90. char input_buf[1024];
  91.  
  92. if (len >= 256) {
  93. printk( KERN_WARNING "proc_write len = %lu\n", len);
  94. return -ENOSPC;
  95. }
  96.  
  97. if (copy_from_user(input_buf, buf, len)) return -EFAULT;
  98. input_buf[len] = '\0';
  99.  
  100. run(input_buf);
  101.  
  102. printk( KERN_INFO "proc_write %s\n", input_buf );
  103. return len;
  104. }
  105.  
  106. static int
  107. proc_read( char *page, char **start, off_t offset, int count, int *eof, void *data )
  108. {
  109. int len;
  110.  
  111. len = sprintf( page, "okok" );
  112. printk( KERN_INFO "proc_read len = %d\n", len );
  113.  
  114. *eof = 1;
  115. return len;
  116. }
  117.  
  118.  
  119. #define PROCNAME "driver/brainfuck"
  120.  
  121. static int __init bfmod_init(void)
  122. {
  123. struct proc_dir_entry *entry;
  124.  
  125. entry = create_proc_entry( PROCNAME, 0666, NULL);
  126. if (entry) {
  127. entry->write_proc = proc_write;
  128. entry->read_proc = proc_read;
  129. } else {
  130. printk( KERN_ERR "create_proc_entry failed\n" );
  131. return -EBUSY;
  132. }
  133.  
  134. printk( KERN_INFO "hoge mod is loaded\n" );
  135.  
  136. return 0;
  137. }
  138.  
  139. static void __exit bfmod_exit(void)
  140. {
  141. remove_proc_entry( PROCNAME, NULL );
  142. printk( KERN_INFO "hoge exit hoge hoge" );
  143. }
  144.  
  145. module_init(bfmod_init);
  146. module_exit(bfmod_exit);
Add Comment
Please, Sign In to add comment