разница между athlonXP и пеньком

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

  1. f0rk

    f0rk New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2006
    Сообщения:
    18
    сейчас читаю Writing buffer overflow exploits - a tutorial for beginners от Mixter'a
    Система у меня Slackware-2.6.17, проц athlonXP 2000+
    компилю примеры из этого руководства (они для пеньков), запускаю gdb и вижу следующее
    /*blah.c*/
    void lame (void) { char small[30]; gets (small); printf("%s\n", small); }
    main() { lame (); return 0; }

    Dump of assembler code for function lame:
    0x080483c4 <lame+0>: push %ebp
    0x080483c5 <lame+1>: mov %esp,%ebp
    0x080483c7 <lame+3>: sub $0x28,%esp
    0x080483ca <lame+6>: sub $0xc,%esp
    0x080483cd <lame+9>: lea 0xffffff88(%ebp),%eax

    В то время как в примере
    0x80484a0 : pushl %ebp
    0x80484a1 : movl %esp,%ebp
    0x80484a3 : subl $0x20,%esp
    0x80484a6 : leal 0xffffffe0(%ebp),%eax

    Т.е. тут понятно, что под буфер выделяется 32(0x20) байта. А у меня 0x28(40 байт) и еще не пойму че за 0xc. Менял размер буфера - изменяется только первое значение, а 0xc так и остается...

    Можете разъяснить или хотя бы ссылок кинуть?
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    gcc version 3.4.5 (mingw special)
    Код (Text):
    1. .text:004012E0                 push    ebp
    2. .text:004012E1                 mov     ebp, esp
    3. .text:004012E3                 sub     esp, 38h        ; char *
    4. .text:004012E6                 lea     eax, [ebp+var_28]
    5. .text:004012E9                 mov     [esp+38h+var_38], eax
    6. .text:004012EC                 call    gets
     
  3. f0rk

    f0rk New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2006
    Сообщения:
    18
    это понятно, что место в стеке выделяется sub $0x28,%esp
    я про то, что такое sub 0xC?
    почему тогда не sub $0x40,%esp?
    И почему так много выделяется под буфер, когда должно вроде как 32 байта?
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    0xC + 0x28 = 0x38.
    Посмотри на мой дизасм.
    Там хитрости со стеком, посиди с бумажкой и будет более понятно.
     
  5. f0rk

    f0rk New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2006
    Сообщения:
    18
    большое спасибо!
     
  6. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    = 0x34 :)
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    rmn
    угу