binfmts.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:2k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. #ifndef _LINUX_BINFMTS_H
  2. #define _LINUX_BINFMTS_H
  3. #include <linux/ptrace.h>
  4. #include <linux/capability.h>
  5. /*
  6.  * MAX_ARG_PAGES defines the number of pages allocated for arguments
  7.  * and envelope for the new program. 32 should suffice, this gives
  8.  * a maximum env+arg of 128kB w/4KB pages!
  9.  */
  10. #define MAX_ARG_PAGES 32
  11. /* sizeof(linux_binprm->buf) */
  12. #define BINPRM_BUF_SIZE 128
  13. #ifdef __KERNEL__
  14. /*
  15.  * This structure is used to hold the arguments that are used when loading binaries.
  16.  */
  17. struct linux_binprm{
  18. char buf[BINPRM_BUF_SIZE];
  19. struct page *page[MAX_ARG_PAGES];
  20. unsigned long p; /* current top of mem */
  21. int sh_bang;
  22. struct file * file;
  23. int e_uid, e_gid;
  24. kernel_cap_t cap_inheritable, cap_permitted, cap_effective;
  25. int argc, envc;
  26. char * filename; /* Name of binary */
  27. unsigned long loader, exec;
  28. };
  29. /*
  30.  * This structure defines the functions that are used to load the binary formats that
  31.  * linux accepts.
  32.  */
  33. struct linux_binfmt {
  34. struct linux_binfmt * next;
  35. struct module *module;
  36. int (*load_binary)(struct linux_binprm *, struct  pt_regs * regs);
  37. int (*load_shlib)(struct file *);
  38. int (*core_dump)(long signr, struct pt_regs * regs, struct file * file);
  39. unsigned long min_coredump; /* minimal dump size */
  40. };
  41. extern int register_binfmt(struct linux_binfmt *);
  42. extern int unregister_binfmt(struct linux_binfmt *);
  43. extern int prepare_binprm(struct linux_binprm *);
  44. extern void remove_arg_zero(struct linux_binprm *);
  45. extern int search_binary_handler(struct linux_binprm *,struct pt_regs *);
  46. extern int flush_old_exec(struct linux_binprm * bprm);
  47. extern int setup_arg_pages(struct linux_binprm * bprm);
  48. extern int copy_strings(int argc,char ** argv,struct linux_binprm *bprm); 
  49. extern int copy_strings_kernel(int argc,char ** argv,struct linux_binprm *bprm);
  50. extern void compute_creds(struct linux_binprm *binprm);
  51. extern int do_coredump(long signr, struct pt_regs * regs);
  52. extern void set_binfmt(struct linux_binfmt *new);
  53. #if 0
  54. /* this went away now */
  55. #define change_ldt(a,b) setup_arg_pages(a,b)
  56. #endif
  57. #endif /* __KERNEL__ */
  58. #endif /* _LINUX_BINFMTS_H */