5 / 5 / 6
Регистрация: 24.01.2016
Сообщений: 67
|
|
1 | |
Точка входа в процедуру InterlockedCompareExchange64 не найдена в библиотеке DLL KERNEL32.DLL07.04.2016, 13:09. Показов 8061. Ответов 7
Метки нет Все метки)
(
День добрый!
При запуске моей программы (много моего кода + много разных сторонних dll) на WinXP SP2, получаем соответствующую ошибку "Точка входа в процедуру InterlockedCompareExchange64 не найдена в библиотеке DLL KERNEL32.DLL". Как найти какая функция моего кода и из какой dll производит конкретный вызов? Понятно что по цепочке все доходит до InterlockedCompareExchange64 из kernel32.dll, но как проследить всю цепочку?
0
|
|
07.04.2016, 13:09 | |
Ответы с готовыми решениями:
7
Точка входа в процедуру не найдена в библиотеке DLL Точка входа в процедуру не найдена в библиотеке dll
Точка входа в процедуру InitializeConditionVariable не найдена в библиотеке DLL KERNEL32.dll |
Ушел с форума
![]() |
|
07.04.2016, 13:42 | 2 |
Эта ошибка вылетает на самых ранних этапах запуска exe, когда
загрузчик разрешает соответствие между импортируемыми функциями и их адресами в системных и других dll. Т.е. цепочки вызовов нету. Добавлено через 1 минуту Попробуй dependency walker, чтобы узнать откуда идет зависимость от этой функции, может она в какой-нибудь чужой dll и только в одном месте, тогда все не так плохо...
1
|
126 / 125 / 59
Регистрация: 22.01.2014
Сообщений: 460
|
||||||||||||||||||||||||||
07.04.2016, 14:04 | 3 | |||||||||||||||||||||||||
Можно использовать tdump.exe(Из под коробки Borland C++ Compiler, есть легальная бесплатная версия BCC-5.5 )
Пример из под Msys-shell:
Примерно ваш пример:
Imports from KERNEL32.dll (hint = 0279) GetSystemTimeAsFileTime (hint = 01C5) GetCurrentThreadId (hint = 0293) GetTickCount (hint = 03A7) QueryPerformanceCounter (hint = 0300) IsDebuggerPresent (hint = 04A5) SetUnhandledExceptionFilter (hint = 04D3) UnhandledExceptionFilter
либо если вы умеете использовать shell:
2
|
5 / 5 / 6
Регистрация: 24.01.2016
Сообщений: 67
|
|
07.04.2016, 15:53 [ТС] | 4 |
Спасибо, полезная утилита. Теперь я знаю что адрес (или какая там инфа о функции находится) InterlockedCompareExchange64 зашит не в одну из сторонних dll из моего проекта, а в сам exe:
Imports from KERNEL32.DLL: InterlockedCompareExchange64. Но вот кому конкретно из моего кода эта функция нужна..
0
|
126 / 125 / 59
Регистрация: 22.01.2014
Сообщений: 460
|
||||||
07.04.2016, 18:36 | 5 | |||||
Надо исследовать объектные файлы и библиотеки.
Тот же dumpbin, для MinGW - objdump. Но я в таких случаях делаю проще: запускаю fgrep с нужными параметрами и не стесняюсь бинарного формата объектных файлов и библиотек:
1
|
5 / 5 / 6
Регистрация: 24.01.2016
Сообщений: 67
|
|
07.04.2016, 23:46 [ТС] | 6 |
Может натолкнешь на мысль что делать дальше.
1) Поиск по всем файлам находит InterlockedCompareExchange64 только в cheat.obj (еще в exe и одноименном tds) 2) В объектном файле мало понятно к кому он там относится и я выполняю Prepocess для cheat.c. В полученном файле (cheat.i) видно, что к функции InterlockedCompareExchange64 обращаются из 8 похожих функций (_InlineInterlockedAnd64, _InlineInterlockedAdd64 и т.п.) следующим образом: Код
/* c:\program files (x86)\embarcadero\studio\17.0\include\windows\sdk\winnt.h 6912: */__inline /* c:\program files (x86)\embarcadero\studio\17.0\include\windows\sdk\winnt.h 6913: */LONGLONG /* c:\program files (x86)\embarcadero\studio\17.0\include\windows\sdk\winnt.h 6914: */_InlineInterlockedExchangeAdd64 ( /* c:\program files (x86)\embarcadero\studio\17.0\include\windows\sdk\winnt.h 6915: */ LONGLONG volatile *Addend, /* c:\program files (x86)\embarcadero\studio\17.0\include\windows\sdk\winnt.h 6916: */ LONGLONG Value /* c:\program files (x86)\embarcadero\studio\17.0\include\windows\sdk\winnt.h 6917: */) /* c:\program files (x86)\embarcadero\studio\17.0\include\windows\sdk\winnt.h 6918: */{ /* c:\program files (x86)\embarcadero\studio\17.0\include\windows\sdk\winnt.h 6919: */LONGLONG Old; /* c:\program files (x86)\embarcadero\studio\17.0\include\windows\sdk\winnt.h 6920: */ /* c:\program files (x86)\embarcadero\studio\17.0\include\windows\sdk\winnt.h 6921: */do { /* c:\program files (x86)\embarcadero\studio\17.0\include\windows\sdk\winnt.h 6922: */Old = *Addend; /* c:\program files (x86)\embarcadero\studio\17.0\include\windows\sdk\winnt.h 6923: */} while (InterlockedCompareExchange64(Addend, /* c:\program files (x86)\embarcadero\studio\17.0\include\windows\sdk\winnt.h 6924: */Old + Value, /* c:\program files (x86)\embarcadero\studio\17.0\include\windows\sdk\winnt.h 6925: */Old) != Old); /* c:\program files (x86)\embarcadero\studio\17.0\include\windows\sdk\winnt.h 6926: */ /* c:\program files (x86)\embarcadero\studio\17.0\include\windows\sdk\winnt.h 6927: */return Old;
0
|
126 / 125 / 59
Регистрация: 22.01.2014
Сообщений: 460
|
|
08.04.2016, 09:17 | 7 |
InterlockedCompareExchange64 появляется в Windows начиная с Windows Vista.
Просмотрите заголовочные файлы, может там есть директивы #if, #ifdef, #ifndef и сравнение с версией NT, которая может быть выставлена неправильно. .Нужно искать и по inline функциям, которые содержат обращение InterlockedCompareExchange64. Может быть проще найти нужный участок кода диассемблированием объектного файла (cheat.obj).
1
|
5 / 5 / 6
Регистрация: 24.01.2016
Сообщений: 67
|
|
08.04.2016, 13:10 [ТС] | 8 |
Я имел ввиду, что все 8 функций, имеющих обращение к InterlockedCompareExchange64, содержат в имени _Inline (например _InlineInterlockedAnd64), и пытаясь найти кто в свою очередь к ним обращается, я, производя поиск без приставки _inline (например InterlockedAnd64), нашел бы упоминания и с приставкой и без (искал снова по всем файлам, включая все obj и т.п.). Но такое ощущение, что функции есть, но их никто не вызывает. Разве такое может быть?
Добавлено через 5 минут Можно еще получить .asm файл командой "Compile to assembly", там снова эти же 8 функций обращаются к InterlockedCompareExchange64, но их в свою очередь никто не вызывает. Добавлено через 7 минут Еще можно получить файл .tdump командой "TDump cheat.obj", в полученном файле имеем два упоминания InterlockedCompareExchange64: Код
0049EB COMENT Purge: Yes, List: Yes, Class: 233 (0E9h) End of Dependency List 0049F1 LNAMES Name 1: '_TEXT' Name 2: 'CODE' Name 3: '' Name 4: '_DATA' Name 5: 'DATA' Name 6: 'DGROUP' Name 7: '_BSS' Name 8: 'BSS' Name 9: '$$BSYMS' Name 10: 'DEBSYM' Name 11: '$$BTYPES' Name 12: 'DEBTYP' Name 13: '$$BNAMES' Name 14: 'DEBNAM' Name 15: '$$BROWSE' Name 16: '$$BROWFILE' 004A5F SEGDEF 1 : _TEXT DWORD PUBLIC USE32 Class 'CODE' Length: 19a6 004A69 SEGDEF 2 : _DATA DWORD PUBLIC USE32 Class 'DATA' Length: 1660 004A73 SEGDEF 3 : _BSS DWORD PUBLIC USE32 Class 'BSS' Length: 0010 004A7D GRPDEF Group: DGROUP Segment: _BSS Segment: _DATA 004A86 SEGDEF 4 : $$BSYMS BYTE PUBLIC USE32 Class 'DEBSYM' Length: 79c4 004A90 SEGDEF 5 : $$BTYPES BYTE PUBLIC USE32 Class 'DEBTYP' Length: f6d0 004A9A SEGDEF 6 : $$BNAMES BYTE PUBLIC USE32 Class 'DEBNAM' Length: 93e9 004AA4 SEGDEF 7 : $$BROWSE BYTE PUBLIC USE32 Class 'DEBSYM' Length: 0000 004AAE SEGDEF 8 : $$BROWFILE BYTE PUBLIC USE32 Class 'DEBSYM' Length: 0000 004AB8 EXTDEF 1 : 'InterlockedExchangeAdd' Type: 0 2 : 'InterlockedExchange' Type: 0 3 : 'InterlockedCompareExchange' Type: 0 4 : 'InterlockedCompareExchange64' Type: 0 5 : '_wcscpy' Type: 0 6 : '_printf' Type: 0 7 : '_exit' Type: 0 8 : '_wcsncpy' Type: 0 9 : '_wcsncat' Type: 0 10: '_cef_string_list_alloc' Type: 0 11: '_cef_string_userfree_utf16_alloc' Type: 0 12: '_cef_string_utf8_to_utf16' Type: 0 13: '_strlen' Type: 0 14: '_cef_string_list_append' Type: 0 15: '_cef_string_userfree_utf16_free' Type: 0 16: '_cef_string_list_free' Type: 0 17: 'GetModuleHandleA' Type: 0 18: '_cef_execute_process' Type: 0 19: '__exit' Type: 0 20: '_cef_initialize' Type: 0 21: '_getcwd' Type: 0 22: '_snprintf' Type: 0 23: '_cef_browser_host_create_browser' Type: 0 24: '_cef_cookie_manager_get_global_manager' Type: 0 25: '_cef_do_message_loop_work' Type: 0 26: '_cef_shutdown' Type: 0 27: '_wcslen' Type: 0 004CD1 PUBDEF 'add_ref' Segment: _TEXT:0D28 004CE2 PUBDEF 'release' Segment: _TEXT:0D57 004CF3 PUBDEF 'has_one_ref' Segment: _TEXT:0D8B 004D08 PUBDEF '_initialize_cef_base' Segment: _TEXT:0DBF 004D26 PUBDEF 'on_before_command_line_processing' Segment: _TEXT:0E20 Код
03C0: 45 08 8A 10 88 55 FF 8A 45 FF 59 5D C3 55 8B EC E....U..E.Y].U.. 03D0: 8A 45 0C 8B 55 08 88 02 5D C3 55 8B EC 51 8B 45 .E..U...].U..Q.E 03E0: 08 66 8B 10 66 89 55 FE 66 8B 45 FE 59 5D C3 55 .f..f.U.f.E.Y].U 03F0: 8B EC 66 8B 45 0C 8B 55 08 66 89 02 5D C3 55 8B ..f.E..U.f..].U. 005865 FIXU32 FixUp: 03f Mode: Self Loc: Offset32 Frame: TARGET Target: EI[1]: InterlockedExchangeAdd FixUp: 052 Mode: Self Loc: Offset32 Frame: TARGET Target: EI[2]: InterlockedExchange FixUp: 065 Mode: Self Loc: Offset32 Frame: TARGET Target: EI[3]: InterlockedCompareExchange FixUp: 097 Mode: Self Loc: Offset32 Frame: TARGET Target: EI[4]: InterlockedCompareExchange64 FixUp: 0db Mode: Self Loc: Offset32 Frame: TARGET Target: EI[4]: InterlockedCompareExchange64 FixUp: 125 Mode: Self Loc: Offset32 Frame: TARGET Target: EI[4]: InterlockedCompareExchange64 FixUp: 169 Mode: Self Loc: Offset32 Frame: TARGET Target: EI[4]: InterlockedCompareExchange64 FixUp: 1ad Mode: Self Loc: Offset32 Frame: TARGET Target: EI[4]: InterlockedCompareExchange64 FixUp: 1f7 Mode: Self Loc: Offset32 Frame: TARGET Target: EI[4]: InterlockedCompareExchange64 FixUp: 239 Mode: Self Loc: Offset32 Frame: TARGET Target: EI[4]: InterlockedCompareExchange64 FixUp: 27d Mode: Self Loc: Offset32 Frame: TARGET Target: EI[4]: InterlockedCompareExchange64 005895 LEDATA Segment: (1) _TEXT Offset: 0400 Length: 03FC 0000: EC 51 8B 45 08 8B 10 89 55 FC 8B 45 FC 59 5D C3 .Q.E....U..E.Y]. 0010: 55 8B EC 8B 45 0C 8B 55 08 89 02 5D C3 55 8B EC U...E..U...].U.. 0020: 83 C4 F8 8B 45 08 8B 10 89 55 F8 8B 50 04 89 55 ....E....U..P..U 0030: FC 8B 45 F8 8B 55 FC 59 59 5D C3 55 8B EC 8B 45 ..E..U.YY].U...E 0040: 08 8B 55 0C 89 10 8B 55 10 89 50 04 5D C3 55 8B ..U....U..P.].U. Добавлено через 2 часа 1 минуту Проблема решена. Внутри файла winnt.h (а по cheat.i видно что InterlockedCompareExchange64 там обитает) можно просто удалить эти 8 функций, вызывающих InterlockedCompareExchange64. А можно добавить #define _MANAGED в свой код (по этому макросу все вызывающие InterlockedCompareExchange64 функции будут отброшены на этапе предкомпиляции) и все будет работать на XP ![]() P.S. Еще один способ для тех, кому достался .exe с данной ошибкой, а исходников нет - просто правим в Hex-Editore бинарник, затирая 64 в имени InterlockedCompareExchange64 (InterlockedCompareExchange64 -> InterlockedCompareExchange), после чего все так же отлично работает.
1
|
08.04.2016, 13:10 | |
Помогаю со студенческими работами здесь
8
Точка входа в процедуру _dbk_fcall_wraper не найдена в библиотеке DLL BORLNDMM.DLL Точка входа в процедуру не найдена в библиотеке DLL MyLib.dll Точка входа в процедуру не найдена в библиотеке dll Точка входа в процедуру _write не найдена в библиотеке DLL Как исправить ошибку: "Точка входа в процедуру не найдена в библиотеке DLL Qt5Core.dll" ? Точка входа в не найдена в библиотеке DLL Qt5Core.dll Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |