есть у кого-нибудь наработки по поводу lkm'a который бы дампил памить в пространстве ядра с определенных адресов?
тем что попросил в самом начале какие-то наработки.я не могу писать с нуля.очень мало скилов(. на вопрос "зачем тогда лезешь в ядро?" заранее отвечаю "жизнь заставила" )
с таким пордходом кодить тебе в делфях бегающие кнопки)) читай маны по ядру, разбирайся, ничего сложного в этом нет и скилов получишь и удовольствия будет больше толку с чьих то исходников мало пока не разберешся с основами практически любой исходник будет "темным лесом"
venom для начала посмотри, как это реализовано в /dev/kmem http://tomoyo.sourceforge.jp/cgi-bin/lxr/source/drivers/char/mem.c#L431
работаю с /dev/mem тк /dev/kmem оказался не зарегестрированным устройством пытаюсь прочить 8байт пишет следующее: sudo ./a.out physical address: 0x2002f680 cant read /dev/mem: Bad address вот код : Код (Text): #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #define __pa(x) ((unsigned long)(x)-PAGE_OFFSET) #define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET)) #define PAGE_OFFSET 0xC0000000 int main() { int fd; unsigned long va=0xe002f680; unsigned long pa; unsigned long *ptr; if((fd=open("/dev/mem",O_RDONLY))==-1) { printf("cant open /dev/mem: %s\n",strerror(errno)); exit(0); } pa=__pa(va); printf("physical address: 0x%x\n",pa); if((lseek(fd,pa,SEEK_SET))==-1) { printf("cant lseek /dev/mem: %s\n",strerror(errno)); exit(0); } ptr=malloc(8); if((read(fd,ptr,8))==-1) { printf("cant read /dev/mem: %s\n",strerror(errno)); exit(0); } free(ptr); return 0; }
venom вот функция virt_to_phys() http://tomoyo.sourceforge.jp/cgi-bin/lxr/source/include/asm-x86/io_32.h#L70 внимательно читай комментарий перед ней условия совпадают?