asm под Solaris x86

Тема в разделе "WASM.UNIX", создана пользователем pilGrim, 8 сен 2006.

  1. pilGrim

    pilGrim New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2006
    Сообщения:
    2
    Вообще суть в том что мне необходимо узнать адресс начала стека для написания сплоитов
    Вот такая прога:
    unsigned long get_sp() {
    __asm__("movl %esp,%eax");
    }
    void main() {
    printf("0x%x\n",get_sp());
    }

    Дает неверные адреса(причем выдает не всегда один и тот же адрес)
    Я попробовал написать прогу на асме чтобы попытаться получить адрес esp:
    .text
    .globl _start
    _start:
    pushl %ebp
    movl %esp,%ebp
    movl %esp,var

    pushl $0x4
    pushl $var
    pushl $1
    pushl $0
    movl $4,%eax
    lcall $0x7,$0x0

    addl $16,%esp
    pushl $1
    pushl $0
    xorl %eax,%eax
    movl $1,%eax
    int $0x91
    .data
    var: .long 0


    Так вот прога выдает вот что
    bash-3.00$ ./h
    prbash-3.00$

    Я смотрел доки по кодингу под никс на этом сайте, например такой код
    movl %esp,(var)
    сановским компилером не принимается(можно использовать и gnu as , но результат тот же)

    Похоже что esp не записывается в var, хотя вот такой код
    movl $0x41414141,%edx
    movl %edx,var

    выдает
    bash-3.00$
    AAAAbash-3.00$
    В чем загвоздка?
     
  2. pilGrim

    pilGrim New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2006
    Сообщения:
    2
    Вроде разобрался
    Я вызываю wirite() к-й не форматирует адреса, а нужно вызывать printf с форматом %x и также пихать туда адрес - тогда все правильно отображается
    Единственная странность - у меня переполнение буфера работает на разных адресах:
    bash-3.00$ ./slp2
    Base:0x804721c
    Executing strcpy
    $ exit
    bash-3.00$

    bash-3.00$ ./slp2
    Base:0x8047338
    Executing strcpy
    $ exit

    Почему так? и ведь адреса возврата разные , а вызываю я одну и туже уязвимую прогу с одинаковым буфером и шеллкодом