Linux 64-bit

Тема в разделе "WASM.X64", создана пользователем rei3er, 28 фев 2008.

  1. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    у кого есть 64-х битная система с установленным линуксом версии 2.6.x,
    выполните следующую последовательность действий и отпишитесь, что получилось в итоге
    1. пишем программу
    Код (Text):
    1. #include <unistd.h>
    2.  
    3. int main() {
    4.     for (;;) pause();
    5.     return 0;
    6. }
    2. запускаем ее, через GDB подключаемся к соответствующему процессу
    3. выравниваем текущий RIP по границе страницы (4096 байт) в меньшую сторону
    4. выполняем одну инструкцию
    какое значение имеет RIP после выполнения?
     
  2. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    rei3er
    suse 10.3 x64
    после аттача:
    $rip = 2af259b12900
    после выравнивания:
    $rip = 2af259b12000
    после stepi
    $rip = 2af259b11f50
     
  3. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    green
    есть подозрение, что это баг
    RIP не может уменьшаться
     
  4. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Код (Text):
    1. (gdb) display $rip
    2. 2: $rip = (void (*)()) 0x2b7cc223a600 <pause+16>
    3. (gdb) set $rip= 0x2b7cc223a000
    4. (gdb) display $rip
    5. 3: $rip = (void (*)()) 0x2b7cc223a000 <waitpid+144>
    6. (gdb) stepi
    7. 0x00002b7cc223a005 in waitpid () from /lib64/libc.so.6
    8. 3: $rip = (void (*)()) 0x2b7cc223a005 <waitpid+149>
    9. 2: $rip = (void (*)()) 0x2b7cc223a005 <waitpid+149>
    правильно выравнял?
     
  5. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    да
    какая версия ядра и процессор?
     
  6. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    rei3er
    У меня после округления rip указывал на невалидную инструкцию. Не знаю, как в Линуксе обрабатываются такие ситуации, но в gdb команда stepi выполнилась без всяких замечаний...
     
  7. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    2.6.22.13, P4 D, GNU gdb 6.6.50.
     
  8. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    тут без разницы
    значение RIP либо должно оставаться без изменения (#UD -> SIGSEGV), либо увеличиваться, но никак не уменьшаться