Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <linux/module.h>
- #include <linux/kernel.h>
- #include <linux/init.h>
- #include <linux/proc_fs.h>
- #include <asm/uaccess.h>
- MODULE_LICENSE("GPL");
- MODULE_AUTHOR("wasabiz");
- void run(const char* ipt)
- {
- char dat[30000];
- int ptr = 0;
- int skr = 0;
- int brcn = 0;
- int i;
- char output[256];
- int len = 0;
- for(i=0;i<300;i++) dat[i] = 0;
- while (ipt[skr]!='\0') {
- //printf("%c\n", ipt[skr]);
- switch (ipt[skr]) {
- case '>':
- ptr++;
- break;
- case '<':
- ptr--;
- break;
- case '+':
- dat[ptr]--;
- break;
- case '-':
- dat[ptr]++;
- break;
- case '.':
- // Output dat[ptr]
- // putchar(-dat[ptr]);
- output[len] = -dat[ptr];
- len++;
- break;
- case ',':
- // Input to dat[ptr]
- break;
- case '[':
- /* Jump to ] if dat[ptr] is 0 */
- if(!dat[ptr]){
- brcn = 0;
- while(1){
- skr++;
- if(ipt[skr] == '[') {
- brcn++;
- }else if(ipt[skr] == ']') {
- brcn--;
- if(!brcn) break;
- }
- }
- skr--;
- }
- break;
- case ']':
- /* Jump to [ if dat[ptr] is not 0 */
- if(dat[ptr]){
- brcn = 0;
- while(1){
- skr--;
- if(ipt[skr] == ']') {
- brcn++;
- }else if(ipt[skr] == '['){
- if(!brcn) break;
- brcn--;
- }
- }
- skr--;
- }
- break;
- }
- skr++;
- }
- output[len] = '\0';
- printk( KERN_INFO "%s", output);
- }
- static int
- proc_write( struct file *flip, const char *buf, unsigned long len, void *data)
- {
- char input_buf[1024];
- if (len >= 256) {
- printk( KERN_WARNING "proc_write len = %lu\n", len);
- return -ENOSPC;
- }
- if (copy_from_user(input_buf, buf, len)) return -EFAULT;
- input_buf[len] = '\0';
- run(input_buf);
- printk( KERN_INFO "proc_write %s\n", input_buf );
- return len;
- }
- static int
- proc_read( char *page, char **start, off_t offset, int count, int *eof, void *data )
- {
- int len;
- len = sprintf( page, "okok" );
- printk( KERN_INFO "proc_read len = %d\n", len );
- *eof = 1;
- return len;
- }
- #define PROCNAME "driver/brainfuck"
- static int __init bfmod_init(void)
- {
- struct proc_dir_entry *entry;
- entry = create_proc_entry( PROCNAME, 0666, NULL);
- if (entry) {
- entry->write_proc = proc_write;
- entry->read_proc = proc_read;
- } else {
- printk( KERN_ERR "create_proc_entry failed\n" );
- return -EBUSY;
- }
- printk( KERN_INFO "hoge mod is loaded\n" );
- return 0;
- }
- static void __exit bfmod_exit(void)
- {
- remove_proc_entry( PROCNAME, NULL );
- printk( KERN_INFO "hoge exit hoge hoge" );
- }
- module_init(bfmod_init);
- module_exit(bfmod_exit);
Add Comment
Please, Sign In to add comment