![]() |
Модераторы: ZeeLax, powerfox |
![]() ![]() ![]() |
|
MAKCim |
|
||||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 3 Всего: 207 |
по мотивам этой темы
господа обладатели 64-х битных систем (AMD64, EM64T) прошу провести следующий эксперимент 1. пишем программу
2. запускаем ее 3. через ps определяем PID процесса 4. запускаем gdb 5. подключаемся к процессу
и оказываемся где-то в __nanosleep_nocancel() 6. выравниваем текущий RIP по размеру страницы в меньшую сторону (допустим текущий RIP = 0x2acb0d2ba4c0, тогда выровненное значение = 0x2acb0d2ba000) и запоминаем выровненное значение
7. делаем stepi
и смотрим текущий RIP он меньше исходного на 1 ![]() у кого такие же результаты? C2D, 1.86Ghz, kernel 2.6.18 (64-bit) Это сообщение отредактировал(а) MAKCim - 21.2.2008, 18:20 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||||
|
|||||||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 3 Всего: 207 |
я не верю, что ни у кого нет 64-х битного процессора с установленным Linux
![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 3 Всего: 162 |
MAKCim, вот он я
![]() Добавлено через 7 минут и 46 секунд
|
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 3 Всего: 207 |
JackYF,
у тебя то же самое я не могу это объяснить ![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 3 Всего: 162 |
Ну, у меня получается, что он меньше исходного на двойку.
Подожди, а что ты хочешь получить, выполняя инструкцию по адресу, выровненному по странице? |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 3 Всего: 207 |
не важно, главное, что меньше
либо тот же адрес (если возникает #UD из-за того, что по выровненному адресу нет валидной инструкции), либо адрес на N больше (N - размер в байтах инструкции по выровненному адресу) -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 28 Всего: 317 |
извиняюсь за некомпетентность...
rip - это IP ( instruction pointer ) ? если ты уменьшил его значение на так сильно, т.е. с 0x2acb0d2ba4c0 -> 0x2acb0d2b0000 а потом продвинул, то почему удивляет что он еще "сзади" ? пожалуйста разжуй, может в процессе и сам найдешь ответ на свой вопрос ![]() -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 3 Всего: 162 |
что он после этого пошёл ещё назад, а не вперёд. |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 3 Всего: 207 |
нет RIP - это RIP ![]() но смысл такой же, как и у IP
RIP никогда не уменьшается при линейном выполнении кода без переполнения -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 3 Всего: 162 |
||||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 3 Всего: 207 |
какое отношение цикл в коде имеет к тому, что я сказал? ![]() еще раз поясню ситуацию в цикле вызывается 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 декрементируется -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 28 Всего: 317 |
-------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 3 Всего: 207 |
bilbobagginz,
какое отношение к моей проблеме имеет описанная в ссылке проблема? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 3 Всего: 207 |
короче, буду я, наверное, bug-report писАть
во всяком случае, хотя бы ответ получу, баг это или нет -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
powerfox |
|
|||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 10 Всего: 97 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "Linux/UNIX: Oбщие вопросы" | |
|
В этом форуме предпочтительны вопросы на следующие темы:
За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу). В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим. Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Программное обеспечение под *NIX системы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |