Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/14: Рейтинг темы: голосов - 14, средняя оценка - 4.57
LetoLetoD
5 / 5 / 6
Регистрация: 24.01.2016
Сообщений: 65
1

Точка входа в процедуру InterlockedCompareExchange64 не найдена в библиотеке DLL KERNEL32.DLL

07.04.2016, 13:09. Просмотров 2651. Ответов 7
Метки нет (Все метки)

День добрый!
При запуске моей программы (много моего кода + много разных сторонних dll) на WinXP SP2, получаем соответствующую ошибку "Точка входа в процедуру InterlockedCompareExchange64 не найдена в библиотеке DLL KERNEL32.DLL". Как найти какая функция моего кода и из какой dll производит конкретный вызов? Понятно что по цепочке все доходит до InterlockedCompareExchange64 из kernel32.dll, но как проследить всю цепочку?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2016, 13:09
Ответы с готовыми решениями:

Точка входа в процедуру не найдена в библиотеке DLL
Столкнулся с проблемой, что при компиляции и запуске программы, выдаётся...

Точка входа в процедуру не найдена в библиотеке dll
пытаюсь подключить библиотеку вот такая ошибка, как бы поправить?

MinGW. Точка входа в процедуру __gxx_personality_v0 не найдена в библиотеке DLL /brut.exe
Установил MinGW, создал батник, который компилирует файл. При запуске...

Точка входа в процедуру __gxx_personality_v0 не найдена
Здравствуйте. Я пытаюсь сделать простейший пример библиотеки tgui (gui для...

Точка входа в dll в Linux
Если в Windows точка входа в DLL является функция BOOL WINAPI DllMain(...), то...

7
Убежденный
Ушел с форума
Эксперт С++
15999 / 7270 / 1180
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
07.04.2016, 13:42 2
Эта ошибка вылетает на самых ранних этапах запуска exe, когда
загрузчик разрешает соответствие между импортируемыми функциями и
их адресами в системных и других dll. Т.е. цепочки вызовов нету.

Добавлено через 1 минуту
Попробуй dependency walker, чтобы узнать откуда идет зависимость от этой функции,
может она в какой-нибудь чужой dll и только в одном месте, тогда
все не так плохо...
1
nikolay1982
121 / 121 / 59
Регистрация: 22.01.2014
Сообщений: 419
07.04.2016, 14:04 3
Можно использовать tdump.exe(Из под коробки Borland C++ Compiler, есть легальная бесплатная версия BCC-5.5 )
Пример из под Msys-shell:
Bash
1
tdump openssl.exe | grep GetTickCount
(hint = 0293) GetTickCount
Примерно ваш пример:
Bash
1
tdump myprog.exe
Выведет примерно:
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
Bash
1
tdump myprog.exe >myprog.txt
Открыть его (myprog.txt) блокнотом, искать если нужная функция поиском.
либо если вы умеете использовать shell:
Bash
1
tdump myprog.exe | grep InterlockedCompareExchange64
Из под MSVC есть dumpbin.exe, с помощью ее можно сделать аналогичное.
Bash
1
dumpbin /imports myprog.exe
Но это только для статической загрузки dll, для динамической нужно использовать отладчик.
2
LetoLetoD
5 / 5 / 6
Регистрация: 24.01.2016
Сообщений: 65
07.04.2016, 15:53  [ТС] 4
Спасибо, полезная утилита. Теперь я знаю что адрес (или какая там инфа о функции находится) InterlockedCompareExchange64 зашит не в одну из сторонних dll из моего проекта, а в сам exe:
Imports from KERNEL32.DLL: InterlockedCompareExchange64. Но вот кому конкретно из моего кода эта функция нужна..
0
nikolay1982
121 / 121 / 59
Регистрация: 22.01.2014
Сообщений: 419
07.04.2016, 18:36 5
Надо исследовать объектные файлы и библиотеки.
Тот же dumpbin, для MinGW - objdump.
Но я в таких случаях делаю проще: запускаю fgrep с нужными параметрами и не стесняюсь бинарного формата объектных файлов и библиотек:
Bash
1
2
3
4
5
6
7
cd myproject/
fgrep   InterlockedCompareExchange64 -r .
#Рекурсивный поиск слова InterlockedCompareExchange64 во всех файлах проекта, в том числе,".c",".obj",".dll",".exe"
#Если не нашли
cd c:/Programs/MinGW/lib
fgrep   InterlockedCompareExchange64 -r .
#Рекурсивный поиск слова InterlockedCompareExchange64 во всех файлах текущего каталога
1
LetoLetoD
5 / 5 / 6
Регистрация: 24.01.2016
Сообщений: 65
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;
3) Сами функции _InlineInterlockedExchangeAdd64 и остальные никто не вызывает, и их поиск по cheat.i и всем файлам вообще ни к чему не приводит (искал имена функций без _Inline).
0
nikolay1982
121 / 121 / 59
Регистрация: 22.01.2014
Сообщений: 419
08.04.2016, 09:17 7
InterlockedCompareExchange64 появляется в Windows начиная с Windows Vista.
Просмотрите заголовочные файлы, может там есть директивы #if, #ifdef, #ifndef и сравнение с версией NT, которая может быть выставлена неправильно.

Цитата Сообщение от LetoLetoD Посмотреть сообщение
Сами функции _InlineInterlockedExchangeAdd64 и остальные никто не вызывает, и их поиск по cheat.i и всем файлам вообще ни к чему не приводит (искал имена функций без _Inline)
.Нужно искать и по inline функциям, которые содержат обращение InterlockedCompareExchange64. Может быть проще найти нужный участок кода диассемблированием объектного файла (cheat.obj).
1
LetoLetoD
5 / 5 / 6
Регистрация: 24.01.2016
Сообщений: 65
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.
Но InterlockedExchangeAdd, InterlockedExchange, InterlockedCompareExchange снова нигде кроме этих двух фрагментов кода не упоминаются..

Добавлено через 2 часа 1 минуту
Проблема решена. Внутри файла winnt.h (а по cheat.i видно что InterlockedCompareExchange64 там обитает) можно просто удалить эти 8 функций, вызывающих InterlockedCompareExchange64. А можно добавить #define _MANAGED в свой код (по этому макросу все вызывающие InterlockedCompareExchange64 функции будут отброшены на этапе предкомпиляции) и все будет работать на XP Думаю косяки IDE, которая не выставила данный макрос, при указании в настройках проекта, что все должно работать под WinXP.

P.S. Еще один способ для тех, кому достался .exe с данной ошибкой, а исходников нет - просто правим в Hex-Editore бинарник, затирая 64 в имени InterlockedCompareExchange64 (InterlockedCompareExchange64 -> InterlockedCompareExchange), после чего все так же отлично работает.
1
08.04.2016, 13:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2016, 13:10

Ошибка: "Точка входа в процедуру gxx_personality_sj0 не найдена" при запуске приложения
имеется код: #include <SFML/Graphics.hpp> int main() { sf::RenderWindow...

Точка входа не найдена
написал dll и создал приложение. Как проге показать эту самую точку входа?

Windows I/o без Kernel32.dll и Advapi32.dll
Добрый день. Необходимо в Windows XP SP3 распечатать в стандартный поток...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru