Показано с 1 по 10 из 10.

девелопенг )

  1. #1
    Full Member Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Аватар для [500mhz]
    Регистрация
    05.11.2007
    Сообщений
    290
    Вес репутации
    143

    девелопенг )

    господа !
    у когонить getdents нормально отрабатывал? (имею ввиду syscall)
    после часа мучений он в любом случае вопреки манам выдавал 1 ентри в директории хотя из там 3 десятка )))
    пришлось заменить на readdir , все работает но стало просто интересно

    readdir(3, {d_ino=539956, d_name="estdir2"}, 1024) = 1
    результат работы

    write(1, "testdir2\0\0", 10testdir2) = 10
    а это результат печати из буфера d_name
    struct dirent {
    long d_ino;
    __kernel_off_t d_off;
    unsigned short d_reclen;
    char d_name[256];
    };

    почему реаддир сьедает первую букву?
    в буфере же все корректно


  2. Будь в курсе!
    Реклама на VirusInfo

    Надоело быть жертвой? Стань профи по информационной безопасности, получай самую свежую информацию об угрозах и средствах защиты от ведущего российского аналитического центра Anti-Malware.ru:

    Anti-Malware Telegram
     

  3. #2
    Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация
    Регистрация
    27.08.2006
    Сообщений
    2,453
    Вес репутации
    0
    А версия glibc у вас какая?

    Поиск в Гугле даёт мало хорошего. Там всё glibcbug... )))

    Paul
    Последний раз редактировалось XP user; 12.12.2007 в 09:43.

  4. #3
    Full Member Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Аватар для [500mhz]
    Регистрация
    05.11.2007
    Сообщений
    290
    Вес репутации
    143
    а glibc тут не причем
    это системны вызов из кернела

    и
    а кернел из набора убунту 7,04

  5. #4
    Full Member Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Аватар для [500mhz]
    Регистрация
    05.11.2007
    Сообщений
    290
    Вес репутации
    143
    вот трейса результат )
    strace ./main
    execve("./main", ["./main"], [/* 33 vars */]) = 0
    open(".", O_RDONLY|0x200000) = 3
    readdir(3, {d_ino=11272426, d_name=""}, 256) = 1
    write(1, ".\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 20.) = 20
    readdir(3, {d_ino=6717445, d_name="."}, 256) = 1
    write(1, "..\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 20..) = 20
    readdir(3, {d_ino=11272427, d_name="xamples"}, 256) = 1
    write(1, "examples\0\0\0\0\0\0\0\0\0\0\0\0", 20examples) = 20
    readdir(3, {d_ino=11272443, d_name="asm"}, 256) = 1
    write(1, "fasm\0les\0\0\0\0\0\0\0\0\0\0\0\0", 20fasmles) = 20
    readdir(3, {d_ino=11272444, d_name="asm.txt"}, 256) = 1
    write(1, "fasm.txt\0\0\0\0\0\0\0\0\0\0\0\0", 20fasm.txt) = 20
    readdir(3, {d_ino=11272445, d_name="icense.txt"}, 256) = 1
    write(1, "license.txt\0\0\0\0\0\0\0\0\0", 20license.txt) = 20
    readdir(3, {d_ino=11272446, d_name="ource"}, 256) = 1
    write(1, "source\0.txt\0\0\0\0\0\0\0\0\0", 20source.txt) = 20
    readdir(3, {d_ino=11272470, d_name="hatsnew.txt"}, 256) = 1
    write(1, "whatsnew.txt\0\0\0\0\0\0\0\0", 20whatsnew.txt) = 20
    readdir(3, {d_ino=11272473, d_name="ain.asm"}, 256) = 1
    write(1, "main.asm\0txt\0\0\0\0\0\0\0\0", 20main.asmtxt) = 20
    readdir(3, {d_ino=11272472, d_name="ain"}, 256) = 1
    write(1, "main\0asm\0txt\0\0\0\0\0\0\0\0", 20mainasmtxt) = 20
    readdir(3, {d_ino=11272471, d_name="ain.asm~"}, 256) = 1
    write(1, "main.asm~\0xt\0\0\0\0\0\0\0\0", 20main.asm~xt) = 20
    readdir(3, 0x80480b1, 256) = 0
    _exit(0)
    сорец быстронакиданый с утра )
    format ELF executable
    entry start

    segment readable executable writeable

    start:

    mov eax,5
    mov ebx,mdir
    mov ecx,0x0200000
    xor edx,edx
    int 0x80
    mov [fd],eax
    mlp:
    mov eax,89
    mov ebx,[fd]
    mov ecx,dirent
    mov edx,256
    int 0x80
    cmp eax,0
    je exit
    call print
    jmp mlp
    exit:
    mov eax,1
    xor ebx,ebx
    int 0x80

    print:
    mov eax,4
    mov ebx,1
    mov ecx,d_name
    mov edx,20 ;печатаем первые 20 байт из d_name
    int 0x80
    ret

    ;===============================DATA============== ======================
    mdir:
    db '.',0

    dirent:
    dd ? ;d_ino
    dd ? ;d_off
    dw ? ;d_reclen
    d_name:
    times 256 db ? ;d_name
    fd:
    dd ?
    ну и в архиве бинарник для ленивых )

    пс
    тоесть меня все устраивает с точки зрения работоспособности кода, список файлов через буфер я получаю
    просто интересно почему реаддир режет 1 символ ))) или это strace глючит?
    Вложения Вложения
    • Тип файла: zip main.zip (264 байт, 0 просмотров)
    Последний раз редактировалось [500mhz]; 12.12.2007 в 11:53.

  6. #5
    Full Member Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Аватар для [500mhz]
    Регистрация
    05.11.2007
    Сообщений
    290
    Вес репутации
    143
    что неужто нема гуру юниксов на форуме? (

  7. #6
    Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация
    Регистрация
    27.08.2006
    Сообщений
    2,453
    Вес репутации
    0
    Цитата Сообщение от [500mhz] Посмотреть сообщение
    что неужто нема гуру юниксов на форуме? (
    Я не гуру (- я с юником никогда даже не работал), но готов помочь искать в Гугле. Единственное - как бы задать параметры для поиска? Единственное интереснее, что у меня вышло когда я ввёл про глюки readdir(3) так это было про то, что за это отвечает glibc...

    Paul

  8. #7
    Full Member Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Аватар для [500mhz]
    Регистрация
    05.11.2007
    Сообщений
    290
    Вес репутации
    143
    не не readdir абсолютная функция из кернела под номером 89
    естественно существует имплементация и в glibc для упрощения жизни

    readdir int readdir, uint fd, struct dirent *dirp, uint count
    read a directory
    return -/-
    errors badf, fault, inval, noent, notdir
    ref unistd.h, linux dirent.h, linux/unistd.h

    вот тут http://www.lxhp.in-berlin.de/ вполне читаемое описание системных вызовов кернела

    а тут оно же в архиве http://www.lxhp.in-berlin.de/htmlfiles.tar.bz2

    пс
    я тут тоже погуглил немнога ) нашел один тред датируемый 2000 годом
    там тоже проблема с использованием getdents
    вообщем народ там посоветовал забить на getdents и использовать реаддир

  9. #8
    Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация
    Регистрация
    27.08.2006
    Сообщений
    2,453
    Вес репутации
    0
    Офф-топ. Забавная ОС, конечно. После того, как я прочитал, какие ошибки получаешь после выполнения некоторых команд csh/sh, я передумал поставить Unix. К примеру:

    Код:
    % scan for <<"Arnold Schwarzenegger"^J^D
    ->

    "Arnold Schwarzenegger": << terminator not found

    или
    Код:
    % ping elvis.rice.edu | awk '{print substr($1,1,5), $2, $3}'
    ->

    elvis is alive

    или
    Код:
    % man: why did you get a divorce?
    ->

    man:: Too many arguments.

    Paul
    Последний раз редактировалось XP user; 12.12.2007 в 20:14.

  10. #9
    Full Member Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Аватар для [500mhz]
    Регистрация
    05.11.2007
    Сообщений
    290
    Вес репутации
    143
    сказки все это )))

    ping: unknown host elvis.rice.edu

  11. #10
    Visiting Helper Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Аватар для Muffler
    Регистрация
    03.05.2006
    Адрес
    U.S.
    Сообщений
    713
    Вес репутации
    850
    Цитата Сообщение от p2u Посмотреть сообщение
    Офф-топ. Забавная ОС, конечно. После того, как я прочитал, какие ошибки получаешь после выполнения некоторых команд csh/sh, я передумал поставить Unix. К примеру:

    Код:
    % scan for <<"Arnold Schwarzenegger"^J^D
    ->

    "Arnold Schwarzenegger": << terminator not found

    или
    Код:
    % ping elvis.rice.edu | awk '{print substr($1,1,5), $2, $3}'
    ->

    elvis is alive

    или
    Код:
    % man: why did you get a divorce?
    ->

    man:: Too many arguments.

    Paul
    Offtop

    ХОЧУ ТАКИЕ ОШИБКИ!!!

Свернуть/Развернуть Ваши права в разделе

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Page generated in 0.01051 seconds with 19 queries