Модераторы: ZeeLax, powerfox
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> баг? 
:(
    Опции темы
MAKCim
Дата 21.2.2008, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 3
Всего: 207



по мотивам этой темы
господа обладатели 64-х битных систем (AMD64, EM64T)
прошу провести следующий эксперимент
1. пишем программу
Код

#include <unistd.h>

int main() {
    for (;;) sleep(10);
    return 0;
}

2. запускаем ее
3. через ps определяем PID процесса
4. запускаем gdb
5. подключаемся к процессу
Код

(gdb) attach <PID>

и оказываемся где-то в __nanosleep_nocancel()
6. выравниваем текущий RIP по размеру страницы в меньшую сторону (допустим текущий RIP = 0x2acb0d2ba4c0, тогда выровненное значение = 0x2acb0d2ba000) и запоминаем выровненное значение
Код

(gdb) set $rip = <выровненное значение>

7. делаем stepi
Код

(gdb) stepi

и смотрим текущий RIP
он меньше исходного на 1 smile (по крайней мере у меня)
у кого такие же результаты?
C2D, 1.86Ghz, kernel 2.6.18 (64-bit) 

Это сообщение отредактировал(а) MAKCim - 21.2.2008, 18:20


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
MAKCim
Дата 22.2.2008, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 3
Всего: 207



я не верю, что ни у кого нет 64-х битного процессора с установленным Linux  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
JackYF
Дата 22.2.2008, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 3
Всего: 162



MAKCim, вот он я  smile Сейчас попробую повторить...

Добавлено через 7 минут и 46 секунд
Цитата

(gdb) attach 13176
Attaching to process 13176
Reading symbols from /home/jackyf/Work/Programming/linux/SmallTests/MAKCim/test.e...done.
Using host libthread_db library "/lib/libthread_db.so.1".
Reading symbols from /lib/libc.so.6...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux-x86-64.so.2...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
0x00002b876298db50 in nanosleep () from /lib/libc.so.6
(gdb) set $rip=0x00002b876298d000
(gdb) stepi

Program received signal SIGSEGV, Segmentation fault.
0x00002b876298cffe in _nss_files_parse_pwent () from /lib/libc.so.6
(gdb) 



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 22.2.2008, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 3
Всего: 207



JackYF
у тебя то же самое
я не могу это объяснить  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
JackYF
Дата 22.2.2008, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 3
Всего: 162



Ну, у меня получается, что он меньше исходного на двойку.
Подожди, а что ты хочешь получить, выполняя инструкцию по адресу, выровненному по странице?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 22.2.2008, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 3
Всего: 207



Цитата(JackYF @  22.2.2008,  11:22 Найти цитируемый пост)
Ну, у меня получается, что он меньше исходного на двойку.

не важно, главное, что меньше

Цитата(JackYF @  22.2.2008,  11:22 Найти цитируемый пост)
Подожди, а что ты хочешь получить, выполняя инструкцию по адресу, выровненному по странице? 

либо тот же адрес (если возникает #UD из-за того, что по выровненному адресу нет валидной инструкции), либо адрес на N больше (N - размер в байтах инструкции по выровненному адресу)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
bilbobagginz
Дата 22.2.2008, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 28
Всего: 317



извиняюсь за некомпетентность... 

rip - это IP ( instruction pointer ) ? 

если ты уменьшил его значение на так сильно, т.е. с 0x2acb0d2ba4c0 -> 0x2acb0d2b0000
а потом продвинул, то почему удивляет что он еще "сзади" ?

пожалуйста разжуй, может в процессе и сам найдешь ответ на свой вопрос smile



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
JackYF
Дата 22.2.2008, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 3
Всего: 162



Цитата(bilbobagginz @  22.2.2008,  13:28 Найти цитируемый пост)
а потом продвинул, то почему удивляет что он еще "сзади" ?

что он после этого пошёл ещё назад, а не вперёд.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 22.2.2008, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 3
Всего: 207



Цитата(bilbobagginz @  22.2.2008,  14:28 Найти цитируемый пост)
rip - это IP ( instruction pointer ) ? 

нет
RIP - это RIP  smile 
но смысл такой же, как и у IP
Цитата(bilbobagginz @  22.2.2008,  14:28 Найти цитируемый пост)
если ты уменьшил его значение на так сильно, т.е. с 0x2acb0d2ba4c0 -> 0x2acb0d2b0000
а потом продвинул, то почему удивляет что он еще "сзади" ?

RIP никогда не уменьшается при линейном выполнении кода без переполнения


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
JackYF
Дата 22.2.2008, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 3
Всего: 162



Цитата(MAKCim @  22.2.2008,  20:11 Найти цитируемый пост)
при линейном выполнении кода

у тебя в коде есть цикл...


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 22.2.2008, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 3
Всего: 207



Цитата(JackYF @  22.2.2008,  21:52 Найти цитируемый пост)
у тебя в коде есть цикл... 

какое отношение цикл в коде имеет к тому, что я сказал?  smile 

еще раз поясню ситуацию
в цикле вызывается sleep() продолжительностью 10 секунд
GDB подсоединяется к процессу в то время, когда он находится в режиме ядра в состоянии TASK_INTERRUPTIBLE в ожидании события таймера
GDB останавливает процесс
далее мы изменяем RIP (GDB использует ptrace(PTRACE_SETREGS, ...)), при этом новое значение RIP записывается в стек ядра процесса, откуда оно будет восстановлено при возврате процесса из функции sys_nanosleep() (sleep() разворачивается в вызов системного сервиса sys_nanosleep())
далее мы выполняем stepi (GDB использует ptrace(PTRACE_SINGLESTEP, ...))
реализация ptrace() в ядре (sys_ptrace()) вызывает wake_up_process() для трассируемого процесса, что приводит к добавлению его в одну из очередей выполнения, далее изменяет состояние процесса на TASK_RUNNING и устанавливает бит TF в образе RFLAGS в стеке ядра (RFLAGS, как и RIP, восстанавливается при возврате из режима ядра)
через некоторое время планировщик процессов выбирает этот процесс и запускает его
после получения управления процесс осуществляет возврат из sys_nanosleep() (потому как 10 секунд на текущей итерации уже давно прошли), при этом восстанавливаются новые значения RIP и RFLAGS
дальше по идее, должно идти выполнение одной инструкции по новому адресу с инкрементацией RIP
здесь возможно два случая
либо генерация #UD (если инструкция по новому адресу не валидна), либо, собственно, выполнение инструкции, генерация #DB, остановка процесса, передача управления GDB
однако ничего подобного не происходит и RIP декрементируется


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
bilbobagginz
Дата 23.2.2008, 02:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 28
Всего: 317





--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
MAKCim
Дата 23.2.2008, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 3
Всего: 207



bilbobagginz
какое отношение к моей проблеме имеет описанная в ссылке проблема?


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
MAKCim
Дата 24.2.2008, 13:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 3
Всего: 207



короче, буду я, наверное, bug-report писАть
во всяком случае, хотя бы ответ получу, баг это или нет


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
powerfox
Дата 28.2.2008, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 10
Всего: 97



Цитата(MAKCim @  24.2.2008,  14:00 Найти цитируемый пост)
короче, буду я, наверное, bug-report писАть
во всяком случае, хотя бы ответ получу, баг это или нет


MAKCim, можно и в рассылке поговорить с людьми smile Или выловить в IRC. 


--------------------
user posted image
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Linux/UNIX: Oбщие вопросы"
nickless
Imple
pythonwin

В этом форуме предпочтительны вопросы на следующие темы:

  • Конкретные вопросы о конкретном ПО. В таких вопросах желательно привести точные данные о программе: версия программы, версия ОС, версия ядра, и проблему в форме: сделал Х, хотел получить Y, а получил Z.
  • Неконкретные вопросы о выборе ПО
  • Обзоры - как дополнение в ветку Обзоры


  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).


В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.


Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программное обеспечение под *NIX системы | Следующая тема »


 




[ Время генерации скрипта: 0.1285 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.