Linux mmap (выдает отрицательное значение)

Модератор: Модераторы разделов

redliner
Сообщения: 3
ОС: Gentoo Linux

Linux mmap

Сообщение redliner »

Всем привет!
При вызове mmap(); прога выдает отрицательное число но сам файл открывается и смещение выполняется

Код: Выделить всё

// filename - asciiz

open_file:
    mov    eax,SYS_open
    mov    ebx,filename
    mov    ecx,O_RDWR
    int    0x80
    cmp    eax,0xFFFFF000
    ja    exit

    xchg eax,ebx

    mov    eax,SYS_lseek // lseek(fd,0,2);
    mov    ecx,0
    mov    edx,2

    int    0x80

    xchg eax,edx

    push ebx

    push 0
    push ebx
    push 1
    push 3
    push edx
    push 0
    mov    eax,SYS_mmap // mmap(0,edx/*file size*/,PROT_READ|PROT_WRITE,MAP_SHARED,ebx/*filedecrypter*/,0);
    mov    ebx,esp
    int    0x80
    add esp,byte 24
    pop    ebx
    cmp eax,0xFFFFF000
    ja exit

exit:
    mov    eax,1
    xor    ebx,ebx
    int    0x80
Спасибо сказали:
Аватара пользователя
Red User
Сообщения: 229
ОС: Debian

Re: Linux mmap

Сообщение Red User »

mmap вроде как должен возвращать код ошибки, только со знаком минус. См. errno.h и errno-base.h в /usr/include/asm-generic
А ведь когда-то не боялись мы программы любой,
И с одним лишь debug'ом выходили на бой,
И искусно написанный вирус встречали как брата
Спасибо сказали:
Michael
Сообщения: 92

Re: Linux mmap

Сообщение Michael »

Red User писал(а):
02.10.2007 01:01
mmap вроде как должен возвращать код ошибки, только со знаком минус. См. errno.h и errno-base.h в /usr/include/asm-generic

Он возвращает адрес в случае успеха и -1 в случае неудачи. Код ошибки надо в errno смотреть.
Спасибо сказали:
redliner
Сообщения: 3
ОС: Gentoo Linux

Re: Linux mmap

Сообщение redliner »

один вытекающий вопрос
как посмотреть errno?
имхо errno вообще не трогается код ошибки в %eax
но в упорных поисках я не нашел ошибки с кодом номер 13
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Linux mmap

Сообщение serzh-z »

Michael писал(а):
02.10.2007 04:22
Он возвращает адрес в случае успеха и -1 в случае неудачи. Код ошибки надо в errno смотреть.
Речь идёт о *системном вызове mmap*.

redliner, возвращаемое SYS_mmap значение и есть код ошибки, описание ядерных кодов errno см. в заголовках ядра, указанных выше.
Спасибо сказали:
Аватара пользователя
Red User
Сообщения: 229
ОС: Debian

Re: Linux mmap

Сообщение Red User »

redliner писал(а):
02.10.2007 13:02
но в упорных поисках я не нашел ошибки с кодом номер 13

Код: Выделить всё

#define    EACCES        13    /* Permission denied */
А ведь когда-то не боялись мы программы любой,
И с одним лишь debug'ом выходили на бой,
И искусно написанный вирус встречали как брата
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Linux mmap

Сообщение v04bvs »

системные вызовы не трогают errno.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Linux mmap

Сообщение serzh-z »

v04bvs, не путаем мух с котлетами, мы не о libc-шной errno говорим. В терминах системных вызовов errno имеет совсем другое значение и смысл.
Спасибо сказали:
redliner
Сообщения: 3
ОС: Gentoo Linux

Re: Linux mmap

Сообщение redliner »

=\
жаль что нет ответа =(
Спасибо сказали: