5 / 5 / 6
Регистрация: 24.01.2016
Сообщений: 67

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

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

Студворк — интернет-сервис помощи студентам
День добрый!
При запуске моей программы (много моего кода + много разных сторонних dll) на WinXP SP2, получаем соответствующую ошибку "Точка входа в процедуру InterlockedCompareExchange64 не найдена в библиотеке DLL KERNEL32.DLL". Как найти какая функция моего кода и из какой dll производит конкретный вызов? Понятно что по цепочке все доходит до InterlockedCompareExchange64 из kernel32.dll, но как проследить всю цепочку?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.04.2016, 13:09
Ответы с готовыми решениями:

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

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

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

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

Добавлено через 1 минуту
Попробуй dependency walker, чтобы узнать откуда идет зависимость от этой функции,
может она в какой-нибудь чужой dll и только в одном месте, тогда
все не так плохо...
1
128 / 126 / 60
Регистрация: 22.01.2014
Сообщений: 464
07.04.2016, 14:04
Можно использовать 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
5 / 5 / 6
Регистрация: 24.01.2016
Сообщений: 67
07.04.2016, 15:53  [ТС]
Спасибо, полезная утилита. Теперь я знаю что адрес (или какая там инфа о функции находится) InterlockedCompareExchange64 зашит не в одну из сторонних dll из моего проекта, а в сам exe:
Imports from KERNEL32.DLL: InterlockedCompareExchange64. Но вот кому конкретно из моего кода эта функция нужна..
0
128 / 126 / 60
Регистрация: 22.01.2014
Сообщений: 464
07.04.2016, 18:36
Надо исследовать объектные файлы и библиотеки.
Тот же 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
5 / 5 / 6
Регистрация: 24.01.2016
Сообщений: 67
07.04.2016, 23:46  [ТС]
Может натолкнешь на мысль что делать дальше.
1) Поиск по всем файлам находит InterlockedCompareExchange64 только в cheat.obj (еще в exe и одноименном tds)
2) В объектном файле мало понятно к кому он там относится и я выполняю Prepocess для cheat.c. В полученном файле (cheat.i) видно, что к функции InterlockedCompareExchange64 обращаются из 8 похожих функций (_InlineInterlockedAnd64,
_InlineInterlockedAdd64 и т.п.) следующим образом:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/* 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
128 / 126 / 60
Регистрация: 22.01.2014
Сообщений: 464
08.04.2016, 09:17
InterlockedCompareExchange64 появляется в Windows начиная с Windows Vista.
Просмотрите заголовочные файлы, может там есть директивы #if, #ifdef, #ifndef и сравнение с версией NT, которая может быть выставлена неправильно.

Цитата Сообщение от LetoLetoD Посмотреть сообщение
Сами функции _InlineInterlockedExchangeAdd64 и остальные никто не вызывает, и их поиск по cheat.i и всем файлам вообще ни к чему не приводит (искал имена функций без _Inline)
.Нужно искать и по inline функциям, которые содержат обращение InterlockedCompareExchange64. Может быть проще найти нужный участок кода диассемблированием объектного файла (cheat.obj).
1
5 / 5 / 6
Регистрация: 24.01.2016
Сообщений: 67
08.04.2016, 13:10  [ТС]
Я имел ввиду, что все 8 функций, имеющих обращение к InterlockedCompareExchange64, содержат в имени _Inline (например _InlineInterlockedAnd64), и пытаясь найти кто в свою очередь к ним обращается, я, производя поиск без приставки _inline (например InterlockedAnd64), нашел бы упоминания и с приставкой и без (искал снова по всем файлам, включая все obj и т.п.). Но такое ощущение, что функции есть, но их никто не вызывает. Разве такое может быть?

Добавлено через 5 минут
Можно еще получить .asm файл командой "Compile to assembly", там снова эти же 8 функций обращаются к InterlockedCompareExchange64, но их в свою очередь никто не вызывает.

Добавлено через 7 минут
Еще можно получить файл .tdump командой "TDump cheat.obj", в полученном файле имеем два упоминания InterlockedCompareExchange64:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.04.2016, 13:10
Помогаю со студенческими работами здесь

Точка входа в процедуру InitializeConditionVariable не найдена в библиотеке DLL KERNEL32.dll
Добрый день, товарищи! Помогите, пожалуйста, советом в решении следующией проблемы: Пытаюсь скомпилировать программу для дальнейшего...

Точка входа в процедуру _dbk_fcall_wraper не найдена в библиотеке DLL BORLNDMM.DLL
При попытке скомпилировать файл выдает такую ошибку Точка входа в процедуру _dbk_fcall_wraper не найдена в библиотеке DLL BORLNDMM.DLL

Точка входа в процедуру не найдена в библиотеке DLL MyLib.dll
Привет! Не думал, что столкнусь с такой проблемой, но все же она меня нашла) Использую вот эту dll...

Точка входа в процедуру не найдена в библиотеке dll
Здравствуйте! У меня точка входа в процедуру не найдена в библиотеке dll. Скриншот вложил. Жду вашу помощь!

Точка входа в процедуру _write не найдена в библиотеке DLL
Добрый день. Использую RAD 10.2 update 3 C++ на Windows 10 x64 С девнего времени перестал работать инкрементный линк. Если...


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

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

Новые блоги и статьи
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
PowerShell и онлайн сервисы. Валюта (floatrates.com руб.)
iNNOKENTIY21 11.11.2025
PowerShell функция floatrates-rub Примеры вызова: # Указанная валюта 'EUR' floatrates-rub -Code 'EUR' # Список имеющихся кодов валют floatrates-rub -Available function floatrates-rub {
PowerShell и онлайн сервисы. Погода (RP5.ru)
iNNOKENTIY21 11.11.2025
PowerShell функция Get-WeatherRP5rss для получения погоды с сервиса RP5 Примеры вызова Get-WeatherRP5rss с указанием id 5484 — Москва (восток, Измайлово) и переносом строки:. . .
PowerShell и онлайн сервисы. Погода (wttr)
iNNOKENTIY21 11.11.2025
PowerShell Функция для получения погоды с сервиса wttr Примеры вызова: Погода в городе Омск с прогнозом на день, можно изменить прогноз на более дней, для этого надо поменять запрос:. . .
PowerShell и онлайн сервисы. Валюта (ЦБР)
iNNOKENTIY21 11.11.2025
# Получение курса валют function cbr (] $Valutes = @('USD', 'EUR', 'CNY')) { $url = 'https:/ / www. cbr-xml-daily. ru/ daily_json. js' $data = Invoke-RestMethod -Uri $url $esc = 27 . . .
И решил я переделать этот ноут в машину для распределенных вычислений
Programma_Boinc 09.11.2025
И решил я переделать этот ноут в машину для распределенных вычислений Всем привет. А вот мой компьютер, переделанный из ноутбука. Был у меня ноут асус 2011 года. Со временем корпус превратился. . .
Мысли в слух
kumehtar 07.11.2025
Заметил среди людей, что по-настоящему верная дружба бывает между теми, с кем нечего делить.
Новая зверюга
volvo 07.11.2025
Подарок на Хеллоуин, и теперь у нас кроме Tuxedo Cat есть еще и щенок далматинца: Хочу еще Симбу взять, очень нравится. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru