eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: Adler (+4 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Программирование —› Исключение 0x0eedfade - откуда ноги растут?
. 1 . 2 . >>
Посл.ответ Сообщение


Ранг: 450.3 (мудрец)
Статус: Участник

Создано: 20 сентября 2009 18:13 New!
Цитата · Личное сообщение · #1

Последнее время стал часто замечать, что мои некоторые проекты на Delphi вдруг начинают вызывать исключение 0x0eedfade. Проявляется это не всегда и не везде. То есть на стадии разработки работало, прошло время - не работает. Отлавливал ошибку путём выкидывания некоторых участков кода, выводил в лог места которые удавалось пройти до проблемного момента, отлаживал пошагово и много времени провёл в гугле. На основе своих изысканий сделал вывод, что от приложения к приложению места могут быть разные, то есть например я использую функцию подсчета контрольной суммы, код помещен не в библиотеку, а идёт в виде функции в теле проекта, это модуль, сделав один, я делаю ещё 3 копии и вношу изменения. Таким образом получаю 4 длл с частью похожего кода но с разным назначением, где в одной вдруг начинает слетать в недрах функции подсчёта CRC, в то время как в остальных трёх этот код работает без проблем... Стоит закомментировать вызов функции, как всё работает без ошибок... Я не готов выложить пример, а лишь пытаюсь докопаться до сути. Поиск в интернете показал, что это исключение появляется совершенно неожиданно во многих известных программах, можно дать в гугле 0x0eedfade и имя программы и скорее всего это исключение там появлялось...
На форумах по Delphi пытаются отловить проблемные места используя try except, кто-то переписывает проблемный код хотя в нём нет явных ошибок, на форуме по Sound Empire проблему решали отключением интегрированной звуковой карты и много разных вариантов решения предлагают в сети.
Единственное чего не удалось найти, так это внятного описания того из за чего и почему это появляется и как избежать подобного на стадии разработки. Ибо незнание и непонимание принципов возникновения этой проблемы не даёт гарантии, что отлично работающая и отлаженная программа будет работать на любом компьютере...
Ну правда, тем же винампом пользуется огромное кол-во народа и только один на форуме пишет, что у него возникло такое исключение...
Как быть? Прошу разбирающихся людей или встречавших подобную проблему просветить меня.


Ранг: 481.4 (мудрец)
Статус: Участник
Тот самый :)

Создано: 20 сентября 2009 21:08 New!
Цитата · Личное сообщение · #2

В системном логе ничего не пишет?


Ранг: 523.1 (!)
Статус: Участник
5KRT

Создано: 20 сентября 2009 21:22 · Поправил: daFix New!
Цитата · Личное сообщение · #3

ToBad
Если у тебя нет антивирусника, то может быть у тебя и вирус в дельфе сидит.
Тут BoRoV писал антивирусник под него, попробуй провериться

http://exelab.ru/f/index.php?action=vthread&topic=14896&forum=6&page =3#5

*************

BoRoV, просто нашёл первую ссылку и кинул))


Ранг: 534.6 (!)
Статус: Uploader
retired

Создано: 20 сентября 2009 21:35 New!
Цитата · Личное сообщение · #4

daFix пишет:
Тут BoRoV писал антивирусник под него, попробуй проверитьсяhttp://exelab.ru/f/index.php?action=vthread&topic=14896&f orum=6&page =3#5

я бы дал сылку на это, а не англ перевод его, все таки на русском понятней
http://exelab.ru/f/index.php?action=vthread&topic=14896&forum=6&page =2#24

Ранг: 13.7 (новичок)
Статус: Участник

Создано: 20 сентября 2009 21:38 · Поправил: Nowar New!
Цитата · Личное сообщение · #5

В статье http://www.progz.ru/articles.php?view=84 описана ошибка в процедуре _StartLib модуля system.pas
Данная ошибка присутствовала только в Delphi 6 до SP2.

Ранг: 309.8 (мудрец)
Статус: Участник

Создано: 20 сентября 2009 21:55 New!
Цитата · Личное сообщение · #6

Проще всего удалить дельфи и поставить нормальный компилятор

Ранг: 255.5 (наставник)
Статус: Участник
vx

Создано: 20 сентября 2009 23:06 New!
Цитата · Личное сообщение · #7

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


Ранг: 450.3 (мудрец)
Статус: Участник

Создано: 21 сентября 2009 01:05 · Поправил: ToBad New!
Цитата · Личное сообщение · #8

***del


Ранг: 450.3 (мудрец)
Статус: Участник

Создано: 21 сентября 2009 01:13 New!
Цитата · Личное сообщение · #9

Hexxx пишет:
В системном логе ничего не пишет?


Пишет: Всплывающее окно приложения: test1.exe - Ошибка приложения : Исключение неизвестное программное исключение (0x0eedfade) в приложении по адресу 0x7c812a23.

daFix пишет:
Если у тебя нет антивирусника, то может быть у тебя и вирус в дельфе сидит.


С индюком была эпопея, но всё давно позади, антивирь теперь стоит.

Nowar пишет:
В статье описана ошибка в процедуре _StartLib модуля system.pas


Интересная статья. Почитал, проверил - у меня правильно всё в библиотеке. Delphi 7 установлена.


SLV пишет:
Проще всего удалить дельфи и поставить нормальный компилятор


Ну это извечный спор, что лучше, а что хуже. Дельфи для меня удобней, плюс наработок много. Изучать новый язык, а я так понимаю что под нормальным имелся ввиду Си - по времени сейчас не могу. А вообще вопрос собственно в том, что ошибка возникает там, где по идее её не должно быть. Хочется разобраться с причиной, а не перейти на другой компилятор или не использовать частное решение одной из ситуаций, как обычно поступали многие.

Clerk пишет:
Во первых что за коды, откуда взят код исключения ?


Из месседжбокса... Простая dll на дельфи, из мейна запускается трид обслуживающий сеть. Там и падает не пройдя создание таблицы crc, хотя этот же код неизменно работает в другом проекте. Если удалить эту функцию - падает не успевая создать трид. Если захожу в дельфовый отладчик, вижу что остановился на рете какого то трида, стек указывает куда то очень далеко... В принципе в журнале так и пишет..

p.s. Ставил Delphi 10, перекомпилировал - таже фигня.

Ранг: 18.6 (новичок)
Статус: Участник

Создано: 21 сентября 2009 01:18 · Поправил: uinor New!
Цитата · Личное сообщение · #10

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

Я на 7ке уже много лет - никогда такого не было, за исключением моих же косяков, конечно

Ранг: 129.7 (ветеран)
Статус: Участник

Создано: 21 сентября 2009 05:23 New!
Цитата · Личное сообщение · #11

Проверьте на другом билде виндов. У меня пару раз бывало что на конкретном билде kernel32.dll приложение падает там, где падать не должно в принципе.

Ранг: 516.1 (!)
Статус: Участник

Создано: 21 сентября 2009 06:12 New!
Цитата · Личное сообщение · #12

induc?


Ранг: 647.0 (!)
Статус: Участник
ALIEN Hack Team

Создано: 21 сентября 2009 09:11 · Поправил: ARCHANGEL New!
Цитата · Личное сообщение · #13

SLV пишет:
Проще всего удалить дельфи и поставить нормальный компилятор
Ага, Вижал Бейсик.
Azur1d пишет:
Проверьте на другом билде виндов. У меня пару раз бывало что на конкретном билде kernel32.dll приложение падает там, где падать не должно в принципе.
Наверное, это была какая-то спец. сборка от дяди Васи в элитном подвале сборок?
ToBad
Вообще, я замечал, что Делфи не всегда корректно работает с передачей параметров в функции по своему дефолтовому соглашению о вызовах (типа fastcall). Попробуй заменить соглашение о вызовах для своих функций на stdcall.
Clerk пишет:
Какие шлюзы исключений юзаются и какой при вызове их стек ?
Вопрос, который меня озадачил. Шлюзы, это типа, нужно узнать, какой обработчик исключения в ядре срабатывает? Ну, это можно и по коду исключения сказать, или имеется ввиду, не перехвачены ли эти дефолтовые обработчики всякими Syser'ами? Какой стэк при вызове - это, типа, надо с ядра этот стэк забрать и привести здесь? Я предлагаю проще - Breakpoint on KiUserExceptionDispatcher, далее оределяем по параметрам адрес исключения, при следующем запуске ставим на этот адрес бряк, а когда он сработает, т.е. непосредственно перед исключением, делаем Call Stack, и узнаем, откуда ноги растут. Далее причину можно определить сравнением трасс этой сбойной, и нормальной из работающего проекта.

Ранг: 88.3 (постоянный)
Статус: Участник

Создано: 21 сентября 2009 09:43 New!
Цитата · Личное сообщение · #14

ToBad

У тебя запускает тред dll?
Так для размышления, может быть именно тут ошибка. Если в main dll запускается тред, то фактически он будет только создан но не запушен, а запустится только тогда, когда закончится инициализация этой библиотеки. Может быть ты в том же main после создания потока чтото делаешь с результатами полученными после выполнения потока (который естественно не выполняется и результатов нет)

И еще, где может быть ошибка, ты говоришь что dll что то мутит с сетью. Вот например функция InternetOpen или InternetConnect (не помню точно), при вызове подгружает еще какие то dll, к которых создаются дополнительные потоки, вот в этом случае, если ты вызываешь InternetOpen или InternetConnect а потом InternetReadFile из dll main, то последняя замораживается (т.к. созданные треды еще не выполняются) и возможно Delphi генерит такое исключение.

Ранг: 129.7 (ветеран)
Статус: Участник

Создано: 21 сентября 2009 09:55 New!
Цитата · Личное сообщение · #15

ARCHANGEL пишет:
Наверное, это была какая-то спец. сборка от дяди Васи в элитном подвале сборок?

Нет. Это была Kernel32.dll версии 5.1.2600.5781 Ошибка по адресу 0x00012afb
Вот -->тут <-- еще много жалоб на конкретно эту ошибку в конкретно этом билде длл. Так что дядя Вася не при чем.

Ранг: 255.5 (наставник)
Статус: Участник
vx

Создано: 21 сентября 2009 16:13 New!
Цитата · Личное сообщение · #16

ARCHANGEL
> Breakpoint on KiUserExceptionDispatcher
Я уверен что это исключение намеренно сгенерировано посредством NtRaiseException, либо в боксе не верная информация отображается.

Ранг: 116.5 (ветеран)
Статус: Участник

Создано: 21 сентября 2009 16:40 New!
Цитата · Личное сообщение · #17

В разделе для новичков эта тема уже подымалась в топе Исключения в Ollydbg и там был, правда, аспак, но это подтверждает догадки Clerk-а о том чо это искуственно созданное исключение.

Ранг: 114.8 (ветеран)
Статус: Участник

Создано: 21 сентября 2009 17:56 New!
Цитата · Личное сообщение · #18

Исключение 0x0eedfade выбрасывается (в частности, в целях отладки) в функе System.@RaiseExcept (в самом модуле - _RaiseExcept) при возникновении различных чисто дельфовых ошибок, например, неправильные данные на входе StrToInt (см. функу SysUtils.ConvertError в отладчике), или ошибка при создании вариантного массива (функа Variants.VarArrayCreateError).
Если все нормально, то приложение (если не отладчик) обрабатывает их и выдает соответствующий месаджбокс, вроде ''1oo' is not a valid integer value' (строка из SysConst). Если никак не обрабатывается, то и вылетает сообщение "Исключение неизвестное программное исключение (0x0eedfade) в приложении по адресу..." (обычно по адресу возврата из RtlRaiseException). Такое может случиться если, например, вызвать это исключение вне какого-либо вцл класса (в разделе инициализации модуля или в консольном приложении).
Попробуй отследить при каких обстоятельствах вызывается @RaiseExcept, генерящий бажное 0x0eedfade, и устранить их (обстоятельства))), либо попробуй обрабатывать исключение.

Ранг: 255.5 (наставник)
Статус: Участник
vx

Создано: 21 сентября 2009 18:45 New!
Цитата · Личное сообщение · #19

Valemox
Это не догадки, а матчасть. NTSTATUS- коды формируются определённым образом(wrk, ntstatus.h):
Code:
  1. //   3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  2. //   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  3. //  +---+-+-+-----------------------+-------------------------------+
  4. //  |Sev|C|R|     Facility          |               Code            |
  5. //  +---+-+-+-----------------------+-------------------------------+
  6. //
  7. //  where
  8. //
  9. //      Sev - is the severity code
  10. //
  11. //          00 - Success
  12. //          01 - Informational
  13. //          10 - Warning
  14. //          11 - Error
  15. //
  16. //      C - is the Customer code flag
  17. //
  18. //      R - is a reserved bit
  19. //
  20. //      Facility - is the facility code
  21. //
  22. //      Code - is the facility's status code
  23. //
  24. //
  25. // Define the facility codes
  26. //
  27. #define FACILITY_USB_ERROR_CODE          0x10
  28. #define FACILITY_TRANSACTION             0x19
  29. #define FACILITY_TERMINAL_SERVER         0xA
  30. #define FACILITY_SXS_ERROR_CODE          0x15
  31. #define FACILITY_RPC_STUBS               0x3
  32. #define FACILITY_RPC_RUNTIME             0x2
  33. #define FACILITY_IO_ERROR_CODE           0x4
  34. #define FACILITY_HID_ERROR_CODE          0x11
  35. #define FACILITY_FIREWIRE_ERROR_CODE     0x12
  36. #define FACILITY_DEBUGGER                0x1
  37. #define FACILITY_COMMONLOG_ERROR_CODE    0x1A
  38. #define FACILITY_CLUSTER_ERROR_CODE      0x13
  39. #define FACILITY_ACPI_ERROR_CODE         0x14
  40.  
  41.  
  42. //
  43. // Define the severity codes
  44. //
  45. #define STATUS_SEVERITY_WARNING          0x2
  46. #define STATUS_SEVERITY_SUCCESS          0x0
  47. #define STATUS_SEVERITY_INFORMATIONAL    0x1
  48. #define STATUS_SEVERITY_ERROR            0x3

Если разобрать значение 0x0eedfade(00001110 11101101 11111010 11011110B), то получается что это не ошибка(Sev. 00 - Success), устройство не системное и не известно(Fac. 0xE). Даже без этого сразу видно что это не системный код ошибки. Такой сепшен может быть сгенерирован только програмно посредством сервиса NtRaiseException.


Ранг: 450.3 (мудрец)
Статус: Участник

Создано: 22 сентября 2009 02:42 New!
Цитата · Личное сообщение · #20

Кажется я начал понимать причину этих ошибок... Ещё точно проверю завтра и обязательно отпишу, но создалось впечатление, что виной всему моё беспорядочное использование и взаимное присвоение типов longint и dword. И хотя то и то 4 байта, видимо разница всё же значимая...

Ранг: 18.6 (новичок)
Статус: Участник

Создано: 22 сентября 2009 08:11 New!
Цитата · Личное сообщение · #21

Clerk, это ж Access Violation по адресу. Зачем привлекать сюда столь низкий уровень? Просто народ не может нормально пояснить проблему.

Понятное дело что "кто-то" просто прокосячил. Что за попытка притянуть за уши какую-то мега-проблему? ToBad, ошибка у вас в коде.

Ранг: 255.5 (наставник)
Статус: Участник
vx

Создано: 22 сентября 2009 11:07 New!
Цитата · Личное сообщение · #22

uinor
> Access Violation
Это не страничное нарушение. Хотя возможно гдето в глубине этого мусора оно возникает, но дельфи не правильно нас об этом информирует. Короче я против дельфе, фтопку его, он притупляет, это гуан среда.


Ранг: 647.0 (!)
Статус: Участник
ALIEN Hack Team

Создано: 22 сентября 2009 13:10 New!
Цитата · Личное сообщение · #23

Clerk пишет:
Короче я против дельфе, фтопку его, он притупляет, это гуан среда.
Зато проги дельфоские без декомпиля сложнее (на порядок сложнее) ломать, т.к. одна функция может содержать пять call'ов, внутри каждого из которых ещё 5, а там ещё 3, а там ещё 7 и т.д. Так что разрабы от делфей никогда не откажутся + скорость разработки.


Ранг: 450.3 (мудрец)
Статус: Участник

Создано: 22 сентября 2009 15:05 New!
Цитата · Личное сообщение · #24

ARCHANGEL пишет:
Зато проги дельфоские без декомпиля сложнее (на порядок сложнее) ломать, т.к. одна функция может содержать пять call'ов, внутри каждого из которых ещё 5, а там ещё 3, а там ещё 7 и т.д. Так что разрабы от делфей никогда не откажутся + скорость разработки.


Ну да, скорость разработки зачастую очень важна... Что касается кучи call'ов и прочего мусора, то многое конечно зависит от того, кто пишет... Можно активно использовать ассемблерные вставки или обращаться напрямую к функциям ws2_32, а можно использовать Indy и косячить как я в этом топике.

Ранг: 255.5 (наставник)
Статус: Участник
vx

Создано: 22 сентября 2009 16:49 New!
Цитата · Личное сообщение · #25

ARCHANGEL
Если вам стопяцот холостых ветвлений нужно, то используйте криптор .

Ранг: 310.8 (мудрец)
Статус: Участник

Создано: 23 сентября 2009 11:15 New!
Цитата · Личное сообщение · #26

Это искусственный эксепшн, т.к. произведен из feedfade - "хекс слов". Просто нужен был severity code = 0 и пришлось укоротить. Правда это мои домыслы


Ранг: 450.3 (мудрец)
Статус: Участник

Создано: 23 сентября 2009 12:45 New!
Цитата · Личное сообщение · #27

tundra37 пишет:
Это искусственный эксепшн


Тогда лучше сделали бы: 0xdeaddead

Ранг: 129.7 (ветеран)
Статус: Участник

Создано: 23 сентября 2009 13:20 New!
Цитата · Личное сообщение · #28

ToBad, отпишитесь потом о результатах, интересно все-таки.

Ранг: 114.8 (ветеран)
Статус: Участник

Создано: 23 сентября 2009 18:12 New!
Цитата · Личное сообщение · #29

tundra37 пишет:
Это искусственный эксепшн

Да, см. пост #18

ToBad пишет:
Тогда лучше сделали бы: 0xdeaddead

Неполучица) - бит 28 зарезервирован (будет выброшено 0xceaddead)

ToBad, ну так что это за функция была с лонгинтом внутри? ))


Ранг: 450.3 (мудрец)
Статус: Участник

Создано: 23 сентября 2009 18:52 New!
Цитата · Личное сообщение · #30

_ruzmaz_ Вот так выдавало ексепшн:

Code:
  1. Var i,m,j,tmp:longint;
  2.     crc_tab:array [0..255] of longint;
  3.  
  4. begin
  5. for i:=0 to 255 do begin
  6. tmp:=i;
  7. for m:=1 to 8 do begin
  8. j:=tmp;
  9. asm
  10. pushf
  11. push eax
  12. mov eax,tmp
  13. shr eax,1
  14. and eax,$7FFFFFFF
  15. mov tmp,eax
  16. pop eax
  17. popf
  18. end;
  19. if (and 1)=1 then tmp:=tmp xor $EDB88320;
  20. end;
  21. crc_tab[i]:=tmp;
  22. end;
  23. crc_tab[255]:=0;
  24. end.


вот так не стало:

Code:
  1. Var i,m,j,tmp:dword;
  2.     crc_tab:array [0..255] of dword;
  3.  
  4. begin
  5. for i:=0 to 255 do begin
  6. tmp:=i;
  7. for m:=1 to 8 do begin
  8. j:=tmp;
  9. asm
  10. pushf
  11. push eax
  12. mov eax,tmp
  13. shr eax,1
  14. and eax,$7FFFFFFF
  15. mov tmp,eax
  16. pop eax
  17. popf
  18. end;
  19. if (and 1)=1 then tmp:=tmp xor $EDB88320;
  20. end;
  21. crc_tab[i]:=tmp;
  22. end;
  23. crc_tab[255]:=0;
  24. end.


Почему именно так реализовано не помню, давно дело было... Но думаю не только тут проблема. Ексепшины ещё бывают, но уже не тут...
. 1 . 2 . >>
 eXeL@B —› Программирование —› Исключение 0x0eedfade - откуда ноги растут?

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS