- 论坛徽章:
- 0
|
RHEL3,内核与gcc全部是系统自带。
程序中相关代码:
- fd_kmem = open("/dev/kmem", O_RDWR);
- ptr_idt = get_addr_idt();
- descriptor = (struct descriptor_idt *) malloc(sizeof(struct descriptor_idt));
- ......
- readkmem(descriptor, ptr_idt + 8 * x, sizeof(struct descriptor_idt));
- ......
- void readkmem(void *m, unsigned off, int size)
- {
- int i;
- if (lseek(fd_kmem, off, SEEK_SET) != off) {
- fprintf(stderr, "Error lseek. Are you root? \n");
- exit(-1);
- }
- if (read(fd_kmem, m, size) != size) {
- fprintf(stderr, "Error read kmem\n");
- exit(-1);
- }
- }
- unsigned long get_addr_idt(void)
- {
- unsigned char idtr[6];
- unsigned long idt;
- __asm__ volatile ("sidt %0":"=m" (idtr));
- idt = *((unsigned long *) &idtr[2]);
- return (idt);
- }
复制代码
每次运行都会提示"Error read kmem",调试发现read(fd_kmem, m, size)的返回值总是0。
不知道为什么?
[ 本帖最后由 sailer_sh 于 2006-3-20 18:08 编辑 ] |
|