Ошибка файла infoic dll

Автор
Сообщение

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 02 авг 2017, 23:57 

Интересующийся
Интересующийся
Аватара пользователя


Зарегистрирован: 14 июн 2014, 17:15
Наличности на руках:
1.49

Сообщения: 133
Откуда: Россия

Цитата:

кто встречал

:smu:sche_nie:
Прошу прощения за навязчивость, но может просто совпадение? Попробовали переткнуть на другой «порт», другой кабель, проверить контакт «сокеты». На моей скудной практике либо флешка дохлая, либо перечисленные выше причины.
….может обнова не при чем?


_________________
*…we are, what we do…*

Не в сети

Профиль  ICQ  

 

dimmich

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 03 авг 2017, 17:35 


Зарегистрирован: 16 апр 2012, 23:36
Наличности на руках:
53.00

Сообщения: 7
Откуда: Владимир

Не имею данного программатора. Но имею некоторый опыт по USB шнурам. На моей практике было много случаев, когда подобная проблема с нечётким обменом информацией была именно из-за USB шнура. Предполагаю: может в новой прошивке сменили скорость обмена данными с компом, или алгоритм передачи пакетов, и теперь инфа нечётко проходит. В некоторых случаях помогало одеть ферритовый фильтр (кольцо) на шнур. Ну и конечно взять более короткий и/или толстый шнур должно помочь.

Не в сети

Профиль  ICQ  

 

dimar

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 03 авг 2017, 23:46 


Зарегистрирован: 30 янв 2016, 22:06
Наличности на руках:
21.04

Сообщения: 46
Откуда: France

Спасибо всем за ответ решил вопрос установив wizardpro и прога обновила драйвер после этого заработал прогер с wizardpro а далее и с minipro и это на оба компа

Не в сети

Профиль    

 

sevmaster

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 09 авг 2017, 13:54 


Зарегистрирован: 22 мар 2017, 20:27
Наличности на руках:
0.00

Сообщения: 0
Откуда: Севастополь

На днях пришел с Китая tl 866A . не мог понять почему не работает. Оказалось что два контакта в программаторе в КЗ. Кз устранил и все заработало.
Удивлен был, пайка хорошая. а так напортачить .

Не в сети

Профиль    

 

IOD

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 10 авг 2017, 21:23 


Зарегистрирован: 28 апр 2015, 17:33
Наличности на руках:
9,783.76

Сообщения: 4445
Откуда: Ковель

Пришли с Китая SST39SF040 5шт, через переходник ни одна не зашилась. К одной подпаял к ногам проводки и напрямую в ZIF-панель завел, зашилась на ура.

Не в сети

Профиль    

 

TL866

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 13 авг 2017, 04:24 


Зарегистрирован: 02 июн 2017, 04:32
Наличности на руках:
0.00

Сообщения: 3
Откуда: Россия

sevmaster писал(а):

На днях пришел с Китая tl 866A . не мог понять почему не работает.

А китайцам не писал на компенсацию за такие недостатки товара ??? А то они свой товар не хотят проверять перед отправкой ,совсем обнаглели ! И упаковывают тоже как попало ……….

Не в сети

Профиль    

 

Ruzal

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 22 авг 2017, 15:52 


Зарегистрирован: 18 авг 2016, 15:37
Наличности на руках:
5.04

Сообщения: 32
Откуда: Днепр

Всем привет, помогите, не могу на MiniPro TL866CS (переделаный в версию A) зашить микросхему фотмата plcc32, уже кучу микросхем перепробовал, переходники менял, пишет внешней кз, как быть?


_________________
Не торопитесь, лучше в 5 дома, чем в 4 в морге

Не в сети

Профиль    

 

lom10

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 22 авг 2017, 18:39 


Зарегистрирован: 28 июн 2017, 16:12
Наличности на руках:
20.08

Сообщения: 16
Откуда: Алексеевка

А какую конкретно микросхему и какие переходники используете?

Не в сети

Профиль    

 

Барзанукаев Ислам

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 12 сен 2017, 11:33 


Зарегистрирован: 08 ноя 2016, 12:07
Наличности на руках:
51.38

Сообщения: 229
Откуда: г.Шали, Чеченская Республика

при попытке прошить биос выдает, кабель менял, программатор тоже
Изображение

Не в сети

Профиль    

 

Eskariot

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 12 сен 2017, 11:55 


Зарегистрирован: 23 авг 2014, 11:41
Наличности на руках:
39.06

Сообщения: 130
Откуда: Екатеринбург

во вкладке config флаг QE поставьте перед прошивкой

Не в сети

Профиль    

 

igils

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 12 сен 2017, 12:41 


Зарегистрирован: 23 июл 2011, 14:13
Наличности на руках:
14,068.38

Сообщения: 11048
Откуда: Ульяновск

Барзанукаев Ислам: и какой вывод можно сделать? Правильно — дохлая флешка.
Никакие флажки в программе ее не воскресят.

Последний раз редактировалось igils 12 сен 2017, 12:52, всего редактировалось 1 раз.

Не в сети

Профиль    

 

Барзанукаев Ислам

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 12 сен 2017, 12:50 


Зарегистрирован: 08 ноя 2016, 12:07
Наличности на руках:
51.38

Сообщения: 229
Откуда: г.Шали, Чеченская Республика

Eskariot писал(а):

во вкладке config флаг QE поставьте перед прошивкой

есть, разницы нет
———- Добавлено спустя 1 минуту 17 секунд: ———-

igils писал(а):

дохлая флешка

если даже флешка читается

Не в сети

Профиль    

 

merkulss

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 12 сен 2017, 20:08 


Зарегистрирован: 05 апр 2014, 11:56
Наличности на руках:
17.10

Сообщения: 158
Откуда: Ахтубинск

Панельку промой ифлешку, или запаяй.

Не в сети

Профиль    

 

vzrivpaket

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 13 сен 2017, 12:20 


Зарегистрирован: 30 мар 2016, 04:43
Наличности на руках:
2,781.30

Сообщения: 1533
Откуда: Moscow

Барзанукаев Ислам писал(а):

если даже флешка читается

Не показатель,даже если контакт нормалек.Смотрим на скрин,ошибки,верификацию не пройдет,микруха битая…

з.ы.Касаемо самого программатора…Все еще актуален имхо,в качестве основного уже не то а в качестве вспомогательного самое оно… Относительно цены,функционала и т.д. равных нет…

Не в сети

Профиль    

 

EvgeniyNuAfanasievi4

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 15 сен 2017, 21:39 


Зарегистрирован: 06 июн 2017, 13:07
Наличности на руках:
12.01

Сообщения: 19
Откуда: Нижний Новгород

vzrivpaket писал(а):

Барзанукаев Ислам писал(а):

если даже флешка читается

Не показатель,даже если контакт нормалек.Смотрим на скрин,ошибки,верификацию не пройдет,микруха битая…

з.ы.Касаемо самого программатора…Все еще актуален имхо,в качестве основного уже не то а в качестве вспомогательного самое оно… Относительно цены,функционала и т.д. равных нет…

а какой же тогда основной и что им такое шить? Матрицы?


_________________
Ничто не вечно под виндою.

Не в сети

Профиль  ICQ  

 

merkulss

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 15 сен 2017, 22:22 


Зарегистрирован: 05 апр 2014, 11:56
Наличности на руках:
17.10

Сообщения: 158
Откуда: Ахтубинск

Нанды, мульты,jtag…модно бесконечно перечислять что умеют крутые программаторы

Не в сети

Профиль    

 

tyzman

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 24 сен 2017, 16:30 


Зарегистрирован: 01 июл 2016, 12:42
Наличности на руках:
7.49

Сообщения: 165
Откуда: Minsk

Доброго всем дня.
Перестали гореть светодиоды, на данном девайсе.
Оба одновременно.
Есть подозрения, что произошло это все после падения.
Сам прогер определяется и работает без проблем.
Может кто встречался?

Не в сети

Профиль    

 

scrofula

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 24 сен 2017, 23:57 


Зарегистрирован: 14 июн 2014, 17:15
Наличности на руках:
1.49

Сообщения: 133
Откуда: Россия

tyzman писал(а):

Доброго всем дня.
Перестали гореть светодиоды, на данном девайсе.
Оба одновременно.
Есть подозрения, что произошло это все после падения.
Сам прогер определяется и работает без проблем.
Может кто встречался?

Банальный непропай. Визуальным осмотр делали хоть? откройте присмотритесь


_________________
*…we are, what we do…*

Не в сети

Профиль  ICQ  

 

zalmatt

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 02 окт 2017, 19:16 


Зарегистрирован: 19 мар 2014, 22:46
Наличности на руках:
8.06

Сообщения: 60
Откуда: IL is not Illinois

Dwit писал(а):

дык, только половину
надо залить 32мб дамп от dell p54g002

Мне так показалось, что начиная с 32 MB программа, а может и прошивка минипро, потребует серьёзной модификации кода, т.к это уже 4-байтная адресация… Дойдут ли руки у китайца?…

Sent from my LG-H815 using Tapatalk

Не в сети

Профиль    

 

Dwit

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 05 окт 2017, 19:53 


Зарегистрирован: 22 дек 2011, 04:03
Наличности на руках:
679.91

Сообщения: 304

zalmatt писал(а):

Мне так показалось, что начиная с 32 MB программа, а может и прошивка минипро, потребует серьёзной модификации кода, т.к это уже 4-байтная адресация… Дойдут ли руки у китайца?..

Я им письма катал, 0 реакции, постал справился без проблем.

Не в сети

Профиль    

 

airpower

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 06 окт 2017, 17:35 


Зарегистрирован: 03 окт 2013, 08:15
Наличности на руках:
38.35

Сообщения: 157
Откуда: Москва

В свое время Postal тоже очень помог , когда нужно было прошить 25Q128 до сих пор им пользуюсь , не очень быстрый , но со своими задачами справляется

Не в сети

Профиль  ICQ  

 

segment

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 09 окт 2017, 00:34 


Зарегистрирован: 02 фев 2013, 03:12
Наличности на руках:
13.00

Сообщения: 8
Откуда: Санкт-Петербург

А как русификатор правильно поставить на V 6.60 ? Просто запустить MiniPro_6.6_Rus.exe взятый с 11-ой страницы ? Чёт у меня при этом пишет — Ошибка файла InfoIC.dll . Говорят от версии V 6.50 подходит русик один в один… .у кого есть-поделитесь.
———- Добавлено спустя 7 минут 1 секунду: ———-
Вопрос снят… Запустил от имени адм.

Не в сети

Профиль    

 

sanchelo81

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 13 окт 2017, 23:41 


Зарегистрирован: 26 окт 2016, 22:24
Наличности на руках:
183.27

Сообщения: 267
Откуда: Россия

Мужики подскажите может кто делал, как прошить nand flash tsop48 s29gl032n90tfi04 без кроватки микросхема в списке есть а вот как ее пристроить к нему переходника у меня нет, может какие варианты есть ???

Не в сети

Профиль    

 

merkulss

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 14 окт 2017, 00:30 


Зарегистрирован: 05 апр 2014, 11:56
Наличности на руках:
17.10

Сообщения: 158
Откуда: Ахтубинск

Это не нанд, это nor. Без фирменного переходника никак.

Не в сети

Профиль    

 

Maxim Skridonenko

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 14 окт 2017, 00:40 


Зарегистрирован: 19 июл 2011, 00:50
Наличности на руках:
4.58

Сообщения: 953
Откуда: Odessa

разве 866 поддерживает их ?


_________________
шаман соседнего аула
все для ремонта
ремонт ноутбуков в Одессе
продажа расходных материалов
продажа нужного и полезного !

Не в сети

Профиль    

 

merkulss

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 14 окт 2017, 01:00 


Зарегистрирован: 05 апр 2014, 11:56
Наличности на руках:
17.10

Сообщения: 158
Откуда: Ахтубинск

Есть. Но вся суть в переходнике.

Не в сети

Профиль    

 

Maxim Skridonenko

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 14 окт 2017, 01:01 


Зарегистрирован: 19 июл 2011, 00:50
Наличности на руках:
4.58

Сообщения: 953
Откуда: Odessa

хотелось бы на него глянуть
покажите, что показывает программа


_________________
шаман соседнего аула
все для ремонта
ремонт ноутбуков в Одессе
продажа расходных материалов
продажа нужного и полезного !

Не в сети

Профиль    

 

merkulss

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 14 окт 2017, 01:20 


Зарегистрирован: 05 апр 2014, 11:56
Наличности на руках:
17.10

Сообщения: 158
Откуда: Ахтубинск

Изображение
Даже переходник остался. Для меня бесполезен, поскольку сам прогер продал.

Не в сети

Профиль    

 

Maxim Skridonenko

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 14 окт 2017, 01:51 


Зарегистрирован: 19 июл 2011, 00:50
Наличности на руках:
4.58

Сообщения: 953
Откуда: Odessa

этот переходник — не проблема


_________________
шаман соседнего аула
все для ремонта
ремонт ноутбуков в Одессе
продажа расходных материалов
продажа нужного и полезного !

Не в сети

Профиль    

 

Oblom

 Заголовок сообщения: Re: Программатор MiniPro TL866CS (A)

СообщениеДобавлено: 14 окт 2017, 03:14 


Зарегистрирован: 21 окт 2011, 23:30
Наличности на руках:
274.35

Сообщения: 168
Откуда: Ukraine

sanchelo81 писал(а):

Мужики подскажите может кто делал, как прошить nand flash tsop48 s29gl032n90tfi04 без кроватки микросхема в списке есть а вот как ее пристроить к нему переходника у меня нет, может какие варианты есть ???

На кроватке стоят сдвиговые регистры. И один дешёвый «секъюритити» чип.
Коль нет мозгов — купить оригинал , дешевле все равно не получится. Вот хоть обспрашивайся до изнеможения. Тут правильная защита, снимается этим же прогером/клоном , либо понимаешь , либо автору XXX$

Не в сети

Профиль    

 

From quite some time already I got interested in the art of electronics and more specifically into hardware reverse engineering.
Since I’m mostly interested in the device’s firmware, I have to deal with EEPROM or Flash chips.
MiniPro turned out to be my weapon of choice for reading or programming memory chips.
However, sometimes the device I’m playing with, uses a chip that MiniPro doesn’t yet have in its database.

Unfortunately, MiniPro doesn’t use «user friendly» database for the supported chips and I’m left with no other option, than wait for the authors to _eventually_ add it into the database, or, alternatively, reverse engineer the database, and add whatever I want by myself.

The author choose a DLL file as a database — InfoIC.dll

Removing the DLL from the program folder leads to error message and program crash.

Something I should mention is that the program is really, really badly coded. There are a lot of places with obvious buffer overflows, and crashing the program instead of safely terminating it when the crucial DLL is not found, is the most obvious sign, about its code quality.

Whatever, lets dug into InfoIC.dll itself:

A hand full of export functions. Seems easy enough.
??0CInfoIC@@QAE@XZ, ??4CInfoIC@@QAEAAV0@ABV0@@Z and ?nInfoIC@@3HA are junk exports, so I’ll ignore them.

From the executable side, the important functions are initialized here:

Assembly.text:004424E2                 push    offset aInfoic_dll	; "infoIC.dll"
.text:004424E7                 call    ds:LoadLibraryA
.text:004424ED                 cmp     eax, ebp
.text:004424EF                 mov     hInstance, eax
.text:004424F4                 jz      loc_44259B
.text:004424FA                 mov     edi, ds:GetProcAddress
.text:00442500                 push    offset aGeticstru	; "GetIcStru"
.text:00442505                 push    eax
.text:00442506                 call    edi ; GetProcAddress
.text:00442508                 mov     ecx, hInstance
.text:0044250E                 push    offset aGeticmfc		; "GetIcMFC"
.text:00442513                 push    ecx
.text:00442514                 mov     _GetIcStru, eax
.text:00442519                 call    edi ; GetProcAddress
.text:0044251B                 mov     edx, hInstance
.text:00442521                 push    offset aGeticlist	; "GetIcList"
.text:00442526                 push    edx
.text:00442527                 mov     _GetIcMFC, eax
.text:0044252C                 call    edi ; GetProcAddress
.text:0044252E                 mov     _GetIcList, eax
.text:00442533                 mov     eax, hInstance
.text:00442538                 push    offset aGetmfcstru	; "GetMfcStru"
.text:0044253D                 push    eax
.text:0044253E                 call    edi ; GetProcAddress
.text:00442540                 mov     ecx, hInstance
.text:00442546                 push    offset aGetdllinfo	; "GetDllInfo"
.text:0044254B                 push    ecx
.text:0044254C                 mov     _GetMfcStru, eax
.text:00442551                 call    edi ; GetProcAddress
.text:00442553                 mov     ecx, _GetIcStru
.text:00442559                 mov     _GetDllInfo, eax
.text:0044255E                 cmp     ecx, ebp
.text:00442560                 jz      short loc_44257E
.text:00442562                 cmp     _GetIcMFC, ebp
.text:00442568                 jz      short loc_44257E
.text:0044256A                 cmp     _GetIcList, ebp
.text:00442570                 jz      short loc_44257E
.text:00442572                 cmp     _GetMfcStru, ebp
.text:00442578                 jz      short loc_44257E
.text:0044257A                 cmp     eax, ebp
.text:0044257C                 jnz     short loc_442593
.text:0044257E loc_44257E:
.text:0044257E                 mov     edx, hInstance
.text:00442584                 push    edx
.text:00442585                 call    ds:FreeLibrary
.text:0044258B                 mov     hInstance, ebp
.text:00442591                 jmp     short loc_44259B
.text:00442593 loc_442593:
.text:00442593                 cmp     hInstance, ebp
.text:00442599                 jnz     short loc_4425A7
.text:0044259B loc_44259B:
.text:0044259B                 push    ebp
.text:0044259C                 push    ebp
.text:0044259D                 push    offset aIcListDllFileE	; "IC List Dll file error!"
.text:004425A2                 call    sub_488284

So, it seems like this the only check that verifies if InfoIC.dll lib is valid or not.

I’ve compiled a DLL, containing the exports GetDllInfo, GetIcList, GetIcMFC, GetIcStru and GetMfcStru and made all of them as voids, with no arguments.

C#include <windows.h>

#define DLL_EXPORT __declspec(dllexport)

void DLL_EXPORT GetIcStru() { }
void DLL_EXPORT GetIcMFC() { }
void DLL_EXPORT GetIcList() { }
void DLL_EXPORT GetMfcStru() { }
void DLL_EXPORT GetDllInfo() { }

BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
    switch (fdwReason) {
        case DLL_PROCESS_ATTACH: break;
        case DLL_PROCESS_DETACH: break;
        case DLL_THREAD_ATTACH: break;
        case DLL_THREAD_DETACH: break;
    }
    return TRUE;
}

Now the program no longer shows the warning message, but it crashed again.

The next thing I did, was to load MiniPro.exe in OllyDbg with its original InfoIC.dll, and set a breakpoint:

Assembly.text:004424E2        push    offset aInfoic_dll	; "infoIC.dll"
.text:004424E7        call    ds:LoadLibraryA		; here
.text:004424ED        cmp     eax, ebp
.text:004424EF        mov     hInstance, eax
.text:004424F4        jz      loc_44259B
...

When the library is loaded, set breakpoints on the entry points of the exports and write down the execution order.

At execution, only GetMfcStru got called, so I’ve start the reverse engineering here:

Assembly.text:10001020                 public GetMfcStru
.text:10001020 GetMfcStru      proc near
.text:10001020
.text:10001020 arg_0           = dword ptr  4
.text:10001020 arg_4           = dword ptr  8
.text:10001020
.text:10001020                 mov     eax, [esp+arg_0]		; Manufacturer ID
.text:10001024                 push    esi
.text:10001025                 push    edi
.text:10001026                 mov     edi, [esp+8+arg_4]	; memcpy : destination address
.text:1000102A                 lea     ecx, [eax+eax*8]		; / calculate offset
.text:1000102D                 lea     edx, [eax+ecx*2]		; 
.text:10001030                 mov     ecx, 13h			; memcpy : number of DWORDs to copy
.text:10001035                 xor     eax, eax			; return 0
.text:10001037                 lea     esi, unk_101691E0[edx*4]	; memcpy : source address
.text:1000103E                 rep movsd			; memcpy
.text:10001040                 pop     edi
.text:10001041                 pop     esi
.text:10001042                 retn
.text:10001042 GetMfcStru      endp

The program obviously accept two arguments — arg_0 and arg_4. The rest is simply a memcpy() implementation, copying a piece of data from address of the DLL to a buffer provided as arg_4 based on a offset provided by arg_0.
Knowing the size of the copied buffer (0x13 DWORDs), I’ve took some data from unk_101691E0:

InfoIC.dllOffset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

001691E0  00 00 00 00 65 00 00 00 41 43 45 00 00 00 00 00  ....e...ACE.....
001691F0  00 00 00 00 00 00 00 00 00 00 00 00 41 43 45 20  ............ACE 
00169200  54 65 63 68 6E 6F 6C 6F 67 79 00 00 00 00 00 00  Technology......
00169210  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00169220  00 00 00 00 B0 47 04 10 47 00 00 00              ....�G..G...

It looks like some pretty simple structure, and after some research back and forward through main executable and DLL, I was able to obtain a valid structure:

Ctypedef struct MfcStru {
    DWORD	mfc_id;			// ID of the Manufacturer
    DWORD	mfc_logo;		// Manufacturer logo ID. Logos are hardcoded as BMP resources into the DLL
    char	mfc_name_short[20];	// Short manufacturer name (eg. "ATMEL", "ALI", etc.)
    char	mfc_name_full[40];	// Full manufacturer name (eg. "Atmel Corporation", "Acer Laboratories Inc", etc.)
    byte*	mfc_ic_struc;		// Pointer to the ICs structures buffer
    DWORD	mfc_ic_count;		// Number of ICs for this manufacturer
} MfcStru;

Having this information, I’ve updated my DLL like so:

Cvoid DLL_EXPORT GetMfcStru(DWORD id, byte *result) {
    MfcStru Mfc = {0, 0, "TEST (short)", "TEST (long)", NULL, 0};
    memcpy(result, &Mfc, sizeof(MfcStru));
}

Executing it as-is, again crashed the program here:

Assembly00461DC9  |. 8D4424 00      LEA EAX,DWORD PTR SS:[ESP]		; ESP is holding the result
00461DCD  |. 56             PUSH ESI
00461DCE  |. 57             PUSH EDI
00461DCF  |. 50             PUSH EAX				; result
00461DD0  |. 51             PUSH ECX				; id
00461DD1  |. FF15 B0CB5200  CALL DWORD PTR DS:[52CBB0]		; call to GetMfcStru
00461DD7  |. A1 18C75200    MOV EAX,DWORD PTR DS:[52C718]	; EAX = 0, as iterator for MfcStru.mfc_ic_struc
00461DDC  |. 83C4 08        ADD ESP,8
00461DDF  |. 8D0440         LEA EAX,DWORD PTR DS:[EAX+EAX*2]
00461DE2  |. 8D14C0         LEA EDX,DWORD PTR DS:[EAX+EAX*8]
00461DE5  |. 8B4424 4C      MOV EAX,DWORD PTR SS:[ESP+4C]	; points to MfcStru.mfc_ic_struc
00461DE9  |. 8A0C90         MOV CL,BYTE PTR DS:[EAX+EDX*4]	; crash occurs here

I can easily calculate the size of MfcStru.mfc_ic_struc structure like so:
if, EAX = 1 (eg. second entry, since the first is positioned at 0)
1+1*2 = 3;
3+3*8 = 27;

Because those are DWORDs, 27*4 gives me 108 or 0x06C as final size in bytes for MfcStru.mfc_ic_struc entry.

The starting address is basically MfcStru.mfc_ic_struc value 0x100447B0, minus the DLL image size 0x10000000, or simply 0x000447B0:

InfoIC.dllOffset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

000447B0  01 00 00 00 00 00 00 00 01 00 00 00 41 43 45 32  ............ACE2
000447C0  34 43 30 32 41 00 00 00 00 00 00 00 00 00 00 00  4C02A...........
000447D0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000447E0  00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00  ................
000447F0  00 00 00 00 00 00 80 00 08 00 00 00 08 00 00 00  ......�.........
00044800  10 27 00 00 00 00 00 00 00 00 00 00 00 00 00 00  .'..............
00044810  00 00 00 00 00 00 00 08 80 00 00 00              ........�...

So, what I did next was to put those bytes in a buffer, assign it to MfcStru.mfc_ic_struc and set the MfcStru.mfc_ic_count to 1, as if there’s only one entry in the IC database.

Cbyte ic_struc[] = "x01x00x00x00x00x00x00x00x01x00x00x00x41x43x45x32"
                  "x34x43x30x32x41x00x00x00x00x00x00x00x00x00x00x00"
                  "x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
                  "x00x00x00x00x00x00x00x00x00x01x00x00x00x00x00x00"
                  "x00x00x00x00x00x00x80x00x08x00x00x00x08x00x00x00"
                  "x10x27x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
                  "x00x00x00x00x00x00x00x08x80x00x00x00";

void DLL_EXPORT GetMfcStru(DWORD id, byte *result) {
    MfcStru Mfc = {0, 0, "TEST (short)", "TEST (long)", ic_struc, 1};
    memcpy(result, &Mfc, sizeof(MfcStru));
}

Alright, the program no longer crashes on execution.

However, clicking on the button for Device select, still crashes it.
Same way as before, I’ve set breakpoints to the export functions entry points, clicked the button and it turned out, now GetIcMFC is executed.
Stepping over it, crashes the program, so I took a look what happens inside the original InfoIC.dll:

Assembly.text:10001090                 public GetIcMFC
.text:10001090 GetIcMFC        proc near
.text:10001090
;...
.text:10001090 arg_0           = dword ptr  4
.text:10001090 arg_4           = dword ptr  8
.text:10001090 arg_8           = dword ptr  0Ch
.text:10001090
.text:10001090                 sub     esp, 7Ch
.text:10001093                 push    ebx
.text:10001094                 push    ebp
.text:10001095                 push    edi
.text:10001096                 mov     edi, [esp+88h+arg_0]
.text:1000109D                 or      ecx, 0FFFFFFFFh
.text:100010A0                 xor     eax, eax
.text:100010A2                 xor     ebp, ebp
.text:100010A4                 xor     edx, edx
.text:100010A6                 repne scasb
.text:100010A8                 not     ecx
.text:100010AA                 dec     ecx
.text:100010AB                 xor     ebx, ebx
.text:100010AD                 mov     eax, ecx
.text:100010AF                 mov     ecx, ds:dword_1016BA40
.text:100010B5                 cmp     ecx, ebp
.text:100010B7                 mov     [esp+88h+var_7C], edx
.text:100010BB                 mov     [esp+88h+var_70], eax
.text:100010BF                 mov     [esp+88h+var_6C], ebx
.text:100010C3                 jle     loc_1000131F
;...
.text:10001313                 mov     eax, [esp+8Ch+var_7C]	; return value (case 1)
.text:10001317                 pop     esi
.text:10001318                 pop     edi
.text:10001319                 pop     ebp
.text:1000131A                 pop     ebx
.text:1000131B                 add     esp, 7Ch
.text:1000131E                 retn
.text:1000131F loc_1000131F:
.text:1000131F                 pop     edi
.text:10001320                 pop     ebp
.text:10001321                 mov     eax, edx			; return value (case 2)
.text:10001323                 pop     ebx
.text:10001324                 add     esp, 7Ch
.text:10001327                 retn
.text:10001327 GetIcMFC        endp

I was interested in the arguments passed and the eventual returned value only.

Obviously there are three arguments arg_0, arg_4 and arg_8 and a DWORD return value.
Some executions later, I’ve found that arg_0 and arg_4 are memory buffers, while arg_8 is a DWORD/int value.
That’s enough information to tweak my implementation of GetIcMFC:

CDWORD DLL_EXPORT GetIcMFC(byte *arg_0, byte *arg_4, DWORD arg_8) {
    return 0;
}

The program no longer crashes when I click the device select button, but the device select window doesn’t contain anything either:

Before digging deep into GetIcMFC and actually reverse engineer it, I’ve once again set breakpoints at the exports EPs, to get the complete exports call order.

After GetIcMFC, GetIcList and GetDllInfo were executed.
To obtain arguments and return values, I’ve proceed the same way like I did so far with GetIcMFC and the result was this:

C// Four arguments, and DWORD return value
DWORD DLL_EXPORT GetIcList(byte *arg_0, byte *arg_4, DWORD arg_8, DWORD arg_C) {
    return 0;
}

// Two arguments, and DWORD return value
DWORD DLL_EXPORT GetDllInfo(byte *arg_0, byte *arg_4) {
    return 0;
}

GetDllInfo looks short and simple, so I started with it:

C.text:100014E0                 public GetDllInfo
.text:100014E0 GetDllInfo      proc near
.text:100014E0                 mov     eax, [esp+arg_0]
.text:100014E4                 mov     edx, [esp+arg_4]
.text:100014E8                 mov     dword ptr [eax], 64h			; arg1
.text:100014EE                 mov     ecx, ds:dword_1016BA40
.text:100014F4                 mov     [edx], ecx				; arg2
.text:100014F6                 mov     edx, ds:dword_1016BA40
.text:100014FC                 xor     eax, eax					; zero EAX
.text:100014FE                 test    edx, edx
.text:10001500                 jle     short locret_10001513
.text:10001502                 push    esi
.text:10001503                 mov     ecx, offset dword_10169228
.text:10001508 loc_10001508:
.text:10001508                 mov     esi, [ecx]
.text:1000150A                 add     ecx, 4Ch
.text:1000150D                 add     eax, esi
.text:1000150F                 dec     edx
.text:10001510                 jnz     short loc_10001508
.text:10001512                 pop     esi
.text:10001513 locret_10001513:
.text:10001513                 retn
.text:10001513 GetDllInfo      endp

Both arguments are used as «out» parameters, and are set to 0x64 for arg_0 and pointer to dword_1016BA40 for arg_4.
That dword_1016BA40 is pointing to a constant value of 0x88, and after some research in the InfoIC’s guts I found out 0x88 is the total number of IC Manufacturers in the whole database.
Nice.

dword_10169228 is pointing to the MfcStru.mfc_ic_count value of the first Manufacturer, that pointer is increased by 0x4C and there’s an obvious loop between 10001508 and 10001513.
With a little more research it turned out that GetDllInfo iterates through the Manufacturers list and adds up their mfc_ic_count parameters.
The result is then returned and it’s used for the static «IC Total:» counter.

I have only one hardcoded Manufacturer with one IC, so I can set arg_4 to 1 (as one Manufacturer) and return 1 (as one IC) for now:

CDWORD DLL_EXPORT GetDllInfo(DWORD *arg_0, DWORD *arg_4) {
    *arg_0 = 0x64;
    *arg_4 = 0x01;
    return 1;
}


The device select window now shows there’s one IC in the database. Good.

Next I took a look at GetIcMFC‘s guts. The function code is way to bulky to just paste it here.
After a hour or so in debugging, I was finally able to figure it out completely.
The function takes three arguments that at the end, I called «search«, «IDlist» and «type«.
search is the first argument, that holds the search word typed by the user inside the Device search field;
IDlist is used as return buffer, where the IDs of the Manufacturers, which ICs contains the user typed search word are stored;
type is the type of the IC, taken from the radio boxes — «ALL«, «ROM/FLASH/NVRAM«, «MCU/MPU«, «PLD/GAL/CPLD«, «SRAM/DRAM» or «Logic IC«

Basically, the idea of the function is to obtain a list of Manufacturers IDs (IDlist) as DWORD values in the buffer accepted as second argument.
If there’s a «type» chosen by the user, the manufacturers got filtered by that, and only manufacturers having IC’s of the chosen type are added to the list.
Same goes for the «search» argument, so only Manufacturers who’s ICs contain the search phrase are added to the list.
The return value is the numbers of the obtained manufacturers in the IDlist.

For now I will just return 1, as i have only one Manufacturer in my test list:

CDWORD DLL_EXPORT GetIcMFC(char *search, byte *IDlist, DWORD type) {
    return 1;
}

The GetIcList function comes next and it’s quite similar to GetIcMFC.
It takes four parameters — search, IDlist, id and type.
The most significant difference is that, it has an «id» argument, that specifies which Manufacturer is about to get searched.

IDlist now holds the IDs of the ICs, that are again filtered by a «search» phrase and/or «type«.
The return value is the number of ICs in the IDlist.

Again, I will just return 1.

CDWORD DLL_EXPORT GetIcList(char *search, byte *IDlist, DWORD id, DWORD type) {
    return 1;
}


I’m getting closer.

The last export function was GetIcStru.
I wasn’t able to find any call to this function in the main executable.
However the function itself is simple:

Assembly.text:10001050 GetIcStru       proc near
.text:10001050
.text:10001050 arg_0           = dword ptr  4
.text:10001050 arg_4           = dword ptr  8
.text:10001050 arg_8           = dword ptr  0Ch
.text:10001050
.text:10001050                 mov     eax, [esp+arg_0]			; Manufacturer ID
.text:10001054                 push    esi
.text:10001055                 push    edi
.text:10001056                 lea     ecx, [eax+eax*8]
.text:10001059                 lea     edx, [eax+ecx*2]			; Manufacturer offset
.text:1000105C                 mov     eax, [esp+8+arg_4]		; MfcStru.mfc_ic_struc
.text:10001060                 test    eax, eax
.text:10001062                 mov     esi, ds:off_10169224[edx*4]	; Manufacturer data
.text:10001069                 jle     short loc_10001074
.text:1000106B                 lea     eax, [eax+eax*2]
.text:1000106E                 lea     eax, [eax+eax*8]			; IC offset
.text:10001071                 lea     esi, [esi+eax*4]			; IC data
.text:10001074 loc_10001074:
.text:10001074                 mov     edi, [esp+8+arg_8]
.text:10001078                 mov     ecx, 1Bh
.text:1000107D                 rep movsd							
.text:1000107F                 pop     edi
.text:10001080                 xor     eax, eax				; Always return 0
.text:10001082                 pop     esi
.text:10001083                 retn
.text:10001083 GetIcStru       endp

That’s basically all the information I need, to do something useful from here. So I did.
Instead of using hardcoded database, I’ve made my own implementation of InfoIC.dll, that uses external and easy to edit XML file.
Though I didn’t reverse engineered the whole IC Structure format, I was able to push it to the point where you can easily change some of the IC information.

This is still work in progress, but you can download the attached DLL source, XML database and notes about the database format.

DOWNLOAD COMPLETE SOURCE, BUILDS AND XML

From quite some time already I got interested in the art of electronics and more specifically into hardware reverse engineering.
Since I’m mostly interested in the device’s firmware, I have to deal with EEPROM or Flash chips.
MiniPro turned out to be my weapon of choice for reading or programming memory chips.
However, sometimes the device I’m playing with, uses a chip that MiniPro doesn’t yet have in its database.

Unfortunately, MiniPro doesn’t use «user friendly» database for the supported chips and I’m left with no other option, than wait for the authors to _eventually_ add it into the database, or, alternatively, reverse engineer the database, and add whatever I want by myself.

The author choose a DLL file as a database — InfoIC.dll

Removing the DLL from the program folder leads to error message and program crash.

Something I should mention is that the program is really, really badly coded. There are a lot of places with obvious buffer overflows, and crashing the program instead of safely terminating it when the crucial DLL is not found, is the most obvious sign, about its code quality.

Whatever, lets dug into InfoIC.dll itself:

A hand full of export functions. Seems easy enough.
??0CInfoIC@@QAE@XZ, ??4CInfoIC@@QAEAAV0@ABV0@@Z and ?nInfoIC@@3HA are junk exports, so I’ll ignore them.

From the executable side, the important functions are initialized here:

Assembly.text:004424E2                 push    offset aInfoic_dll	; "infoIC.dll"
.text:004424E7                 call    ds:LoadLibraryA
.text:004424ED                 cmp     eax, ebp
.text:004424EF                 mov     hInstance, eax
.text:004424F4                 jz      loc_44259B
.text:004424FA                 mov     edi, ds:GetProcAddress
.text:00442500                 push    offset aGeticstru	; "GetIcStru"
.text:00442505                 push    eax
.text:00442506                 call    edi ; GetProcAddress
.text:00442508                 mov     ecx, hInstance
.text:0044250E                 push    offset aGeticmfc		; "GetIcMFC"
.text:00442513                 push    ecx
.text:00442514                 mov     _GetIcStru, eax
.text:00442519                 call    edi ; GetProcAddress
.text:0044251B                 mov     edx, hInstance
.text:00442521                 push    offset aGeticlist	; "GetIcList"
.text:00442526                 push    edx
.text:00442527                 mov     _GetIcMFC, eax
.text:0044252C                 call    edi ; GetProcAddress
.text:0044252E                 mov     _GetIcList, eax
.text:00442533                 mov     eax, hInstance
.text:00442538                 push    offset aGetmfcstru	; "GetMfcStru"
.text:0044253D                 push    eax
.text:0044253E                 call    edi ; GetProcAddress
.text:00442540                 mov     ecx, hInstance
.text:00442546                 push    offset aGetdllinfo	; "GetDllInfo"
.text:0044254B                 push    ecx
.text:0044254C                 mov     _GetMfcStru, eax
.text:00442551                 call    edi ; GetProcAddress
.text:00442553                 mov     ecx, _GetIcStru
.text:00442559                 mov     _GetDllInfo, eax
.text:0044255E                 cmp     ecx, ebp
.text:00442560                 jz      short loc_44257E
.text:00442562                 cmp     _GetIcMFC, ebp
.text:00442568                 jz      short loc_44257E
.text:0044256A                 cmp     _GetIcList, ebp
.text:00442570                 jz      short loc_44257E
.text:00442572                 cmp     _GetMfcStru, ebp
.text:00442578                 jz      short loc_44257E
.text:0044257A                 cmp     eax, ebp
.text:0044257C                 jnz     short loc_442593
.text:0044257E loc_44257E:
.text:0044257E                 mov     edx, hInstance
.text:00442584                 push    edx
.text:00442585                 call    ds:FreeLibrary
.text:0044258B                 mov     hInstance, ebp
.text:00442591                 jmp     short loc_44259B
.text:00442593 loc_442593:
.text:00442593                 cmp     hInstance, ebp
.text:00442599                 jnz     short loc_4425A7
.text:0044259B loc_44259B:
.text:0044259B                 push    ebp
.text:0044259C                 push    ebp
.text:0044259D                 push    offset aIcListDllFileE	; "IC List Dll file error!"
.text:004425A2                 call    sub_488284

So, it seems like this the only check that verifies if InfoIC.dll lib is valid or not.

I’ve compiled a DLL, containing the exports GetDllInfo, GetIcList, GetIcMFC, GetIcStru and GetMfcStru and made all of them as voids, with no arguments.

C#include <windows.h>

#define DLL_EXPORT __declspec(dllexport)

void DLL_EXPORT GetIcStru() { }
void DLL_EXPORT GetIcMFC() { }
void DLL_EXPORT GetIcList() { }
void DLL_EXPORT GetMfcStru() { }
void DLL_EXPORT GetDllInfo() { }

BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
    switch (fdwReason) {
        case DLL_PROCESS_ATTACH: break;
        case DLL_PROCESS_DETACH: break;
        case DLL_THREAD_ATTACH: break;
        case DLL_THREAD_DETACH: break;
    }
    return TRUE;
}

Now the program no longer shows the warning message, but it crashed again.

The next thing I did, was to load MiniPro.exe in OllyDbg with its original InfoIC.dll, and set a breakpoint:

Assembly.text:004424E2        push    offset aInfoic_dll	; "infoIC.dll"
.text:004424E7        call    ds:LoadLibraryA		; here
.text:004424ED        cmp     eax, ebp
.text:004424EF        mov     hInstance, eax
.text:004424F4        jz      loc_44259B
...

When the library is loaded, set breakpoints on the entry points of the exports and write down the execution order.

At execution, only GetMfcStru got called, so I’ve start the reverse engineering here:

Assembly.text:10001020                 public GetMfcStru
.text:10001020 GetMfcStru      proc near
.text:10001020
.text:10001020 arg_0           = dword ptr  4
.text:10001020 arg_4           = dword ptr  8
.text:10001020
.text:10001020                 mov     eax, [esp+arg_0]		; Manufacturer ID
.text:10001024                 push    esi
.text:10001025                 push    edi
.text:10001026                 mov     edi, [esp+8+arg_4]	; memcpy : destination address
.text:1000102A                 lea     ecx, [eax+eax*8]		; / calculate offset
.text:1000102D                 lea     edx, [eax+ecx*2]		; 
.text:10001030                 mov     ecx, 13h			; memcpy : number of DWORDs to copy
.text:10001035                 xor     eax, eax			; return 0
.text:10001037                 lea     esi, unk_101691E0[edx*4]	; memcpy : source address
.text:1000103E                 rep movsd			; memcpy
.text:10001040                 pop     edi
.text:10001041                 pop     esi
.text:10001042                 retn
.text:10001042 GetMfcStru      endp

The program obviously accept two arguments — arg_0 and arg_4. The rest is simply a memcpy() implementation, copying a piece of data from address of the DLL to a buffer provided as arg_4 based on a offset provided by arg_0.
Knowing the size of the copied buffer (0x13 DWORDs), I’ve took some data from unk_101691E0:

InfoIC.dllOffset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

001691E0  00 00 00 00 65 00 00 00 41 43 45 00 00 00 00 00  ....e...ACE.....
001691F0  00 00 00 00 00 00 00 00 00 00 00 00 41 43 45 20  ............ACE 
00169200  54 65 63 68 6E 6F 6C 6F 67 79 00 00 00 00 00 00  Technology......
00169210  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00169220  00 00 00 00 B0 47 04 10 47 00 00 00              ....�G..G...

It looks like some pretty simple structure, and after some research back and forward through main executable and DLL, I was able to obtain a valid structure:

Ctypedef struct MfcStru {
    DWORD	mfc_id;			// ID of the Manufacturer
    DWORD	mfc_logo;		// Manufacturer logo ID. Logos are hardcoded as BMP resources into the DLL
    char	mfc_name_short[20];	// Short manufacturer name (eg. "ATMEL", "ALI", etc.)
    char	mfc_name_full[40];	// Full manufacturer name (eg. "Atmel Corporation", "Acer Laboratories Inc", etc.)
    byte*	mfc_ic_struc;		// Pointer to the ICs structures buffer
    DWORD	mfc_ic_count;		// Number of ICs for this manufacturer
} MfcStru;

Having this information, I’ve updated my DLL like so:

Cvoid DLL_EXPORT GetMfcStru(DWORD id, byte *result) {
    MfcStru Mfc = {0, 0, "TEST (short)", "TEST (long)", NULL, 0};
    memcpy(result, &Mfc, sizeof(MfcStru));
}

Executing it as-is, again crashed the program here:

Assembly00461DC9  |. 8D4424 00      LEA EAX,DWORD PTR SS:[ESP]		; ESP is holding the result
00461DCD  |. 56             PUSH ESI
00461DCE  |. 57             PUSH EDI
00461DCF  |. 50             PUSH EAX				; result
00461DD0  |. 51             PUSH ECX				; id
00461DD1  |. FF15 B0CB5200  CALL DWORD PTR DS:[52CBB0]		; call to GetMfcStru
00461DD7  |. A1 18C75200    MOV EAX,DWORD PTR DS:[52C718]	; EAX = 0, as iterator for MfcStru.mfc_ic_struc
00461DDC  |. 83C4 08        ADD ESP,8
00461DDF  |. 8D0440         LEA EAX,DWORD PTR DS:[EAX+EAX*2]
00461DE2  |. 8D14C0         LEA EDX,DWORD PTR DS:[EAX+EAX*8]
00461DE5  |. 8B4424 4C      MOV EAX,DWORD PTR SS:[ESP+4C]	; points to MfcStru.mfc_ic_struc
00461DE9  |. 8A0C90         MOV CL,BYTE PTR DS:[EAX+EDX*4]	; crash occurs here

I can easily calculate the size of MfcStru.mfc_ic_struc structure like so:
if, EAX = 1 (eg. second entry, since the first is positioned at 0)
1+1*2 = 3;
3+3*8 = 27;

Because those are DWORDs, 27*4 gives me 108 or 0x06C as final size in bytes for MfcStru.mfc_ic_struc entry.

The starting address is basically MfcStru.mfc_ic_struc value 0x100447B0, minus the DLL image size 0x10000000, or simply 0x000447B0:

InfoIC.dllOffset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

000447B0  01 00 00 00 00 00 00 00 01 00 00 00 41 43 45 32  ............ACE2
000447C0  34 43 30 32 41 00 00 00 00 00 00 00 00 00 00 00  4C02A...........
000447D0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000447E0  00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00  ................
000447F0  00 00 00 00 00 00 80 00 08 00 00 00 08 00 00 00  ......�.........
00044800  10 27 00 00 00 00 00 00 00 00 00 00 00 00 00 00  .'..............
00044810  00 00 00 00 00 00 00 08 80 00 00 00              ........�...

So, what I did next was to put those bytes in a buffer, assign it to MfcStru.mfc_ic_struc and set the MfcStru.mfc_ic_count to 1, as if there’s only one entry in the IC database.

Cbyte ic_struc[] = "x01x00x00x00x00x00x00x00x01x00x00x00x41x43x45x32"
                  "x34x43x30x32x41x00x00x00x00x00x00x00x00x00x00x00"
                  "x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
                  "x00x00x00x00x00x00x00x00x00x01x00x00x00x00x00x00"
                  "x00x00x00x00x00x00x80x00x08x00x00x00x08x00x00x00"
                  "x10x27x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
                  "x00x00x00x00x00x00x00x08x80x00x00x00";

void DLL_EXPORT GetMfcStru(DWORD id, byte *result) {
    MfcStru Mfc = {0, 0, "TEST (short)", "TEST (long)", ic_struc, 1};
    memcpy(result, &Mfc, sizeof(MfcStru));
}

Alright, the program no longer crashes on execution.

However, clicking on the button for Device select, still crashes it.
Same way as before, I’ve set breakpoints to the export functions entry points, clicked the button and it turned out, now GetIcMFC is executed.
Stepping over it, crashes the program, so I took a look what happens inside the original InfoIC.dll:

Assembly.text:10001090                 public GetIcMFC
.text:10001090 GetIcMFC        proc near
.text:10001090
;...
.text:10001090 arg_0           = dword ptr  4
.text:10001090 arg_4           = dword ptr  8
.text:10001090 arg_8           = dword ptr  0Ch
.text:10001090
.text:10001090                 sub     esp, 7Ch
.text:10001093                 push    ebx
.text:10001094                 push    ebp
.text:10001095                 push    edi
.text:10001096                 mov     edi, [esp+88h+arg_0]
.text:1000109D                 or      ecx, 0FFFFFFFFh
.text:100010A0                 xor     eax, eax
.text:100010A2                 xor     ebp, ebp
.text:100010A4                 xor     edx, edx
.text:100010A6                 repne scasb
.text:100010A8                 not     ecx
.text:100010AA                 dec     ecx
.text:100010AB                 xor     ebx, ebx
.text:100010AD                 mov     eax, ecx
.text:100010AF                 mov     ecx, ds:dword_1016BA40
.text:100010B5                 cmp     ecx, ebp
.text:100010B7                 mov     [esp+88h+var_7C], edx
.text:100010BB                 mov     [esp+88h+var_70], eax
.text:100010BF                 mov     [esp+88h+var_6C], ebx
.text:100010C3                 jle     loc_1000131F
;...
.text:10001313                 mov     eax, [esp+8Ch+var_7C]	; return value (case 1)
.text:10001317                 pop     esi
.text:10001318                 pop     edi
.text:10001319                 pop     ebp
.text:1000131A                 pop     ebx
.text:1000131B                 add     esp, 7Ch
.text:1000131E                 retn
.text:1000131F loc_1000131F:
.text:1000131F                 pop     edi
.text:10001320                 pop     ebp
.text:10001321                 mov     eax, edx			; return value (case 2)
.text:10001323                 pop     ebx
.text:10001324                 add     esp, 7Ch
.text:10001327                 retn
.text:10001327 GetIcMFC        endp

I was interested in the arguments passed and the eventual returned value only.

Obviously there are three arguments arg_0, arg_4 and arg_8 and a DWORD return value.
Some executions later, I’ve found that arg_0 and arg_4 are memory buffers, while arg_8 is a DWORD/int value.
That’s enough information to tweak my implementation of GetIcMFC:

CDWORD DLL_EXPORT GetIcMFC(byte *arg_0, byte *arg_4, DWORD arg_8) {
    return 0;
}

The program no longer crashes when I click the device select button, but the device select window doesn’t contain anything either:

Before digging deep into GetIcMFC and actually reverse engineer it, I’ve once again set breakpoints at the exports EPs, to get the complete exports call order.

After GetIcMFC, GetIcList and GetDllInfo were executed.
To obtain arguments and return values, I’ve proceed the same way like I did so far with GetIcMFC and the result was this:

C// Four arguments, and DWORD return value
DWORD DLL_EXPORT GetIcList(byte *arg_0, byte *arg_4, DWORD arg_8, DWORD arg_C) {
    return 0;
}

// Two arguments, and DWORD return value
DWORD DLL_EXPORT GetDllInfo(byte *arg_0, byte *arg_4) {
    return 0;
}

GetDllInfo looks short and simple, so I started with it:

C.text:100014E0                 public GetDllInfo
.text:100014E0 GetDllInfo      proc near
.text:100014E0                 mov     eax, [esp+arg_0]
.text:100014E4                 mov     edx, [esp+arg_4]
.text:100014E8                 mov     dword ptr [eax], 64h			; arg1
.text:100014EE                 mov     ecx, ds:dword_1016BA40
.text:100014F4                 mov     [edx], ecx				; arg2
.text:100014F6                 mov     edx, ds:dword_1016BA40
.text:100014FC                 xor     eax, eax					; zero EAX
.text:100014FE                 test    edx, edx
.text:10001500                 jle     short locret_10001513
.text:10001502                 push    esi
.text:10001503                 mov     ecx, offset dword_10169228
.text:10001508 loc_10001508:
.text:10001508                 mov     esi, [ecx]
.text:1000150A                 add     ecx, 4Ch
.text:1000150D                 add     eax, esi
.text:1000150F                 dec     edx
.text:10001510                 jnz     short loc_10001508
.text:10001512                 pop     esi
.text:10001513 locret_10001513:
.text:10001513                 retn
.text:10001513 GetDllInfo      endp

Both arguments are used as «out» parameters, and are set to 0x64 for arg_0 and pointer to dword_1016BA40 for arg_4.
That dword_1016BA40 is pointing to a constant value of 0x88, and after some research in the InfoIC’s guts I found out 0x88 is the total number of IC Manufacturers in the whole database.
Nice.

dword_10169228 is pointing to the MfcStru.mfc_ic_count value of the first Manufacturer, that pointer is increased by 0x4C and there’s an obvious loop between 10001508 and 10001513.
With a little more research it turned out that GetDllInfo iterates through the Manufacturers list and adds up their mfc_ic_count parameters.
The result is then returned and it’s used for the static «IC Total:» counter.

I have only one hardcoded Manufacturer with one IC, so I can set arg_4 to 1 (as one Manufacturer) and return 1 (as one IC) for now:

CDWORD DLL_EXPORT GetDllInfo(DWORD *arg_0, DWORD *arg_4) {
    *arg_0 = 0x64;
    *arg_4 = 0x01;
    return 1;
}


The device select window now shows there’s one IC in the database. Good.

Next I took a look at GetIcMFC‘s guts. The function code is way to bulky to just paste it here.
After a hour or so in debugging, I was finally able to figure it out completely.
The function takes three arguments that at the end, I called «search«, «IDlist» and «type«.
search is the first argument, that holds the search word typed by the user inside the Device search field;
IDlist is used as return buffer, where the IDs of the Manufacturers, which ICs contains the user typed search word are stored;
type is the type of the IC, taken from the radio boxes — «ALL«, «ROM/FLASH/NVRAM«, «MCU/MPU«, «PLD/GAL/CPLD«, «SRAM/DRAM» or «Logic IC«

Basically, the idea of the function is to obtain a list of Manufacturers IDs (IDlist) as DWORD values in the buffer accepted as second argument.
If there’s a «type» chosen by the user, the manufacturers got filtered by that, and only manufacturers having IC’s of the chosen type are added to the list.
Same goes for the «search» argument, so only Manufacturers who’s ICs contain the search phrase are added to the list.
The return value is the numbers of the obtained manufacturers in the IDlist.

For now I will just return 1, as i have only one Manufacturer in my test list:

CDWORD DLL_EXPORT GetIcMFC(char *search, byte *IDlist, DWORD type) {
    return 1;
}

The GetIcList function comes next and it’s quite similar to GetIcMFC.
It takes four parameters — search, IDlist, id and type.
The most significant difference is that, it has an «id» argument, that specifies which Manufacturer is about to get searched.

IDlist now holds the IDs of the ICs, that are again filtered by a «search» phrase and/or «type«.
The return value is the number of ICs in the IDlist.

Again, I will just return 1.

CDWORD DLL_EXPORT GetIcList(char *search, byte *IDlist, DWORD id, DWORD type) {
    return 1;
}


I’m getting closer.

The last export function was GetIcStru.
I wasn’t able to find any call to this function in the main executable.
However the function itself is simple:

Assembly.text:10001050 GetIcStru       proc near
.text:10001050
.text:10001050 arg_0           = dword ptr  4
.text:10001050 arg_4           = dword ptr  8
.text:10001050 arg_8           = dword ptr  0Ch
.text:10001050
.text:10001050                 mov     eax, [esp+arg_0]			; Manufacturer ID
.text:10001054                 push    esi
.text:10001055                 push    edi
.text:10001056                 lea     ecx, [eax+eax*8]
.text:10001059                 lea     edx, [eax+ecx*2]			; Manufacturer offset
.text:1000105C                 mov     eax, [esp+8+arg_4]		; MfcStru.mfc_ic_struc
.text:10001060                 test    eax, eax
.text:10001062                 mov     esi, ds:off_10169224[edx*4]	; Manufacturer data
.text:10001069                 jle     short loc_10001074
.text:1000106B                 lea     eax, [eax+eax*2]
.text:1000106E                 lea     eax, [eax+eax*8]			; IC offset
.text:10001071                 lea     esi, [esi+eax*4]			; IC data
.text:10001074 loc_10001074:
.text:10001074                 mov     edi, [esp+8+arg_8]
.text:10001078                 mov     ecx, 1Bh
.text:1000107D                 rep movsd							
.text:1000107F                 pop     edi
.text:10001080                 xor     eax, eax				; Always return 0
.text:10001082                 pop     esi
.text:10001083                 retn
.text:10001083 GetIcStru       endp

That’s basically all the information I need, to do something useful from here. So I did.
Instead of using hardcoded database, I’ve made my own implementation of InfoIC.dll, that uses external and easy to edit XML file.
Though I didn’t reverse engineered the whole IC Structure format, I was able to push it to the point where you can easily change some of the IC information.

This is still work in progress, but you can download the attached DLL source, XML database and notes about the database format.

DOWNLOAD COMPLETE SOURCE, BUILDS AND XML

В статье мы опишем все возможные способы, как исправить ошибки DLL Windows 7, 10. Исправление msvcp140 dll, msvcp110 dll, kernelbase dll, comctl32 и других.

DLL – это файлы системных библиотек в Windows. Формально они являются исполняемыми, но запустить их по отдельности не получится. Библиотеки используются другими программами для выполнения стандартных функций сохранения, удаления, печати.

К примеру, когда в одной из программ вы запускаете опцию печати, приложение автоматически подгружает отвечающий за эту функцию файл DLL. Иногда в процессе работы программы появляются системные сообщения о том, что произошла неполадка в работе файла библиотеки. После этого приложение завершает свою работу или вы не можете выполнить определенную функцию. Далее рассмотрим все возможные способы, как исправить ошибки DLL Windows 7, 10. Схема действий одинакова для всех версий ОС.

Причины ошибок в работе библиотек DLL Windows

Так как каждая библиотека отвечает за конкретную функцию, причина ошибки зависит от того, какой файл DLL не отвечает. Наиболее частая неполадка происходит с Windows.dll – это главная системная библиотека, отвечающая за запуск всех приложений и самой операционной системы.

Существуют следующие типы ошибок DLL:

  • «Файл не найден». Возможно, вы удалили нужную библиотеку, переименовали или переместили её в другое место на жестком диске;
  • «Файл отсутствует». Такое сообщение появляется в том случае, если система не может найти нужный объект на диске и часто причиной такой ошибки является работа вредоносного ПО, которое заменило программный код в библиотеке;
  • «Нарушение прав доступа к файлу». С этим типом неполадки пользователи сталкиваются при попытке включения игры. Вместо запуска работ ПО система выдает сообщение о невозможности получения доступа к библиотеке. К примеру, «ошибка msvcr100 DLL»;
  • «DLL не удалось зарегистрировать» — это означает, что произошла фатальная ошибка при установке приложения. Устранить неполадку поможет повторная инсталляция игры.

Большинство ошибок DLL в Windows появляется из-за установки пиратской версии ОС. Как правило, в модифицированных сборках используются вредоносные библиотеки, с которыми не могут взаимодействовать другие приложения. Если вы используете неофициальную версию Виндовс, советуем скачать на сайте Microsoft.com оригинальную копию образа ОС и установить её на свой компьютер.

Другие причины появления проблем с файлами DLL:
  • Случайное удаление файла. Часто при попытке очистить жесткий диск Windows от ненужных файлов пользователи по незнанию удаляют файлы библиотек. Также, деинсталлировать файл может другая программа (вредоносное ПО или утилита для автоматической очистки диска);
  • Отказ оборудования. Если для установки или запуска игры вы используете оптический диск и дисковод, при некачественном материале одного из компонентов может появиться фатальная ошибка, которая повреждает файл запуска с расширением DLL;
  • В системе не установлены последние обновления. Разработчики из Майкрософт всегда рекомендуют устанавливать новейшие апдейты ОС. Это позволяет избавиться от проблем не только с библиотеками, но и с ошибками, которые они провоцируют. Также, обновления защищают систему. Она становиться менее подвержена действию вирусов;
  • Проблемы с драйверами. Когда для конкретной программы или внешнего устройства, которое она использует, не установлены последние версии драйверов, пользователь сталкивается со всевозможными ошибками ОС. Одной из таких проблем может стать ошибка msvcp120 – система не может открыть приложение из-за фатальной ошибки совместимости;
  • Несовместимость технических требований игры и характеристик компьютера. В таком случае, нужно выбрать другую более старую версию приложения и переустановить его или же обновить используемую сборку ОС.

Способ 1 — Ошибочное удаление файла DLL

Если после открытия приложения ничего не происходит, а через несколько секунд появляется сообщение «ошибка msvcr100 DLL» или «ошибка msvcp120 DLL», это означает, что на компьютере нет нужной библиотеки. Возможно, она не была установлена вместе с ОС или файл был удален другой программой.

Системное окно с ошибкой выглядит следующим образом:

как исправить ошибки DLL Windows

Если вы столкнулись с такой проблемой, для начала рекомендуем открыть папку жесткого диска С и в графе поиска вписать название нужного DLL. Часто библиотека просто перемещена в другую папку. Исправить проблему поможет её помещение в директорию CWindowsSystem32 (для 32-х разрядный версий ОС) или в CWindowsSysWoW64 (для 64-х разрядных сборок).

В случае, если на диске «С» вы не нашли нужный файл, на сайте Майкрософт нужно скачать апдейт для программного пакета Visual C++ 2013. Эта утилита настраивает взаимодействие всех системных файлов и исправляет существующие ошибки.

Для скачивания пакета перейдите по ссылке https://support.microsoft.com/ru-ru/help/3179560/update-for-visual-c-2013-and-visual-c-redistributable-package, в таблице выберите свою страну и язык, а затем кликните на ссылке для скачивания.

как исправить ошибки DLL Windows

После инсталляции обновления перезагрузите компьютер и попробуйте повторно запустить программу. Если этот вариант решение не помог, переходите к следующему методу.

Способ как исправить ошибки DLL  – Регистрация библиотеки вручную

Бывают случаи, когда нужна библиотека есть на компьютере пользователя и находится в правильной папке, но программа все равно её «не видит». После установки пакета обновления Visual C++, как правило, тоже ничего не происходит. Как быть в этом случае?

Исправить такую ошибку DLL в Windows 10 и Windows 7 поможет регистрация библиотеки на сервере Майкрософт. Скорее всего, на вашем компьютере установлена корректная версия DLL, но из-за проблем со связью копии ОС и сервером разработчика возникают подобного рода проблемы.

Пользователь может самостоятельно запустить работу службы регистрации и менее чем за 1 минуту добавить существующую библиотеку в список «пригодных» для использования файлов.

Следуйте инструкции:

  • Одновременно нажмите на клавиши Win+R для открытия окна «Выполнить»;
  • Теперь в текстовом поле введите «CMD» и подтвердите действие;

как исправить ошибки DLL Windows

  • В результате, откроется окно командной строки, с помощью которого и будет проводиться регистрация библиотеки. В новой строке введите указанную на рисунке ниже команду. Изменяйте название библиотеке в зависимости от того, какое её имя указано в ошибка запуска приложения.

как исправить ошибки DLL Windows

Важно! Для выполнения регистрации вы должны быть авторизованы в учетной записи администратора системы и компьютер необходимо подключить к интернету. 

Способ 3 — Запуск среды восстановления

Еще один способ быстрого исправления всех ошибок системы – это использование утилиты восстановления. Запустить нужное окно можно с помощью среды Виндовс. Откройте окно параметров нажатием клавиш Win-I.

как исправить ошибки DLL Windows

Затем откройте вкладку «Обновление и безопасность»«Восстановление». В правой части окна промотайте страничку вниз и в разделе «Особые варианты загрузки» кликните на «Перезагрузить сейчас».

Заметьте! В этом же окне вы можете сбросить настройки ОС к заводским параметрам. Если вы хотите полностью восстановить систему и готовы к удалению все программ и файлов, выбирайте этот пункт. С его помощью есть больше шансов навсегда избавиться от ошибок, которые связан с системными библиотеками. 

После выбора особых вариантов загрузки и повторного запуска компьютера вы увидите не рабочий стол системы, а специальное окно Troubleshooting (решение неполадок). Кликните на указанную ниже плитку, чтобы запустить автоматическое сканирование и исправление:

как исправить ошибки DLL Windows

После повторной перезагрузки ОС система ошибки будут исправлены. Пользовательские файлы удалены не будут.

Владельцам Windows 7 недоступна возможность автоматического исправления в режиме перезагрузки, но можно запустить встроенную утилиту диагностики. Для этого зайдите в окно панели управления и в строке поиска введите «Средство проверки». Кликните на первый результат поисковой выдачи.

Следуйте инструкции в окне встроенного помощника для выявления проблем и их исправления:

как исправить ошибки DLL Windows

Способ 4 — Установка отсутствующих DLL и обновление программ

Ранее м уже рассмотрели варианты восстановления ошибочных библиотек. Однако, если в Windows XP, 7, 10 возникла ошибка Kernel32 DLL, рекомендуется переустановить файл вручную. Рассмотрим, как исправить такого рода неполадку.

На веб-сайте разработчика пользователи могут только загрузить пакет программ для комплексного восстановления системных файлов. Если же ваша ОС работает нормально, а проблемы возникли только с одной библиотекой, рекомендуется найти в сети и скачать на компьютер нужный файл вручную.

В интернете есть масса сайтов, предлагающих скачать копии DLL, с проблемами которых пользователи сталкиваются чаще всего. Важно помнить, что не следует ничего скачивать из подозрительных ресурсов, а перед помещением файла в системную папку его нужно обязательно просканировать встроенным брандмауэром и еще одним усыновленным в системе антивирусом. Это поможет избавиться от дальнейших неполадок, если библиотека окажется вирусной.

Среди надежных ресурсов для скачивания системных DLL можно выделить:

  • DLL.ru;
  • Dll-files.ru;
  • Download-dll.ru.

Пользователю необходимо ввести имя недостающей библиотеки и начать её скачивание. Далее поместите полученный файл в системную папку System32 или SysWOW64, в зависимости от разрядности установленной копии ОС. При следующем открытии программы ошибка исчезнет.

Также, рекомендуем обновить программу, с которой возникли неполадки. Часто даже после многократной замены файла библиотеки не удается избавиться от ошибок запуска или работы программы. Это говорит о ом, что в системе установлена несовместимая версия игры или прикладного приложения.

Способ 5 — Переустановка приложения

Еще один способ решения – это простая переустановка программы. Возможно, после возникновения проблем с DLL утилита не «видит» нового файла библиотеки, потому необходимо деинсталлировать программу.

Удаляйте приложения только через окно Панель управления — Установка и удаление программ. После деинсталляции советуем также поискать на диске «С» папки с названием игры, которые могли быть не удалены. Затем перезагрузите компьютер, установите ПО ее раз и попробуйте запустить его. Новая библиотека должна распознаться без проблем.

как исправить ошибки DLL Windows

Способ 6 — Обновление драйверного ПО

Обновление драйверного ПО позволяет устранить ошибки несовместимости установленных программ, аппаратного оборудования и операционной системы. Рассмотрим, как исправить ошибку HAL DLL в Windows 7, 10, ведь именно этот тип неполадки появляется из-за несовместимости компонентов.

Необходимо установить последние обновления для всех компонентов ОС. Зайдите в Диспетчер задач Виндовс. В седьмой версии это можно сделать с помощью окна панели управления, в десятой версии нужно воспользоваться окном поиска по системе.

В окне Диспетчера кликните правой кнопкой мышки на названии компьютера, а затем выберите поле «Обновить конфигурацию». Для установки новых версий драйверов на компьютере должно быть установлено соединение с интернетом.

как исправить ошибки DLL Windows

Способ 7 — Удаление вирусов

Просканируйте систему встроенным Защитником или другим установленным антивирусом. Если в результате сканирования обнаружится, что вирус — это и есть ошибочная библиотека, удалите её с компьютера и загрузите пакет обновления Visual C++ на сайте Майкрософт.

Теперь вы знаете, как быстро исправить ошибки DLL в Windows 10 и Windows 7. Если у вас остались вопросы по восстановлению DLL, оставляйте их в комментариях.

как исправить ошибки DLL Windows

Ошибка dll возникает в результате отсутствия или повреждения файла с расширением .dll. В этом нет ничего страшного. Если коротко и не вдаваясь в  лишние подробности, dll — это динамически подключаемая библиотека.

И как показывает практика, некоторые программы требуют установки тех dll, которые не входят в стандартную библиотеку Windows. А теперь хотел бы привести наглядный пример, связанный с ошибкой dll.

Когда я попытался открыть полезную программу HTML Color2000, то в результате получил такое сообщение:

Системная ошибка

Как видим из скриншота, у меня отсутствовал файл MSVBVM50.DLL. После второй и третьей переустановки программы (как нам советует этот помощник) проблема оставалась не разрешенной.

После этого я нашел сайт специально для скачивания разных .dll расширений.

Официальный сайт: http://www.dll-files.com

Использовать сайт очень просто и главное — бесплатно. Это тоже самое, что и библиотека, только для нужной цели.

Пункт 1. Находим нужный файл. Поиск по базе файлов dll либо в алфавитном порядке:

Выбираем dll

или можем воспользоваться поиском. При этом вводим имя проблемного файла и жмем на кнопку search. Поиск довольно-таки умен и может сразу предложить нам правильный вариант:

MSVBVM50

Если все ок, перед нами появляется запрашиваемый файл. А в самом низу имеются 2 кнопочки:

Загрузка файла MSVBVM50

Пункт 2. Загружаем файл. Мы жмем на Download zip-file потому, что этот процесс займет меньше времени и усилий с нашей стороны. Проверено на личном опыте.

Пункт 3. Помещаем файл в нужное место. Мы должны зайти в свой системный диск. Скорее всего это Диск С. Далее находим папку Windows и папку system32. Затем после того, как мы распаковали наш архив с файлом dll, можно перемещать его к остальным библиотечным файлам:

Динамически подключаемая библиотека

Все готово! Пользуемся плодами своего труда. Теперь можно повторно открыть нашу программу, у которой была эта ошибка и она откроется.

Далее речь пойдет о расширенных возможностях сайта. Вы видели из скриншота, что имеется также программа с названием MSVBVM50.DLL FIXER. Что это за программа и почему она есть?

DLL-FILES.COM FIXER (полное название программы) — это платная программа, которая стоит всего 29,95$. Вариантов оплаты много, кроме платежной системы Webmoney, здесь есть Visa, MasterCard, PayPal и другие платежные системы. Вот кстати скрин:

29,95$ за ошибки dll

Преимущества платной версии таковы:

  • Исправление всех проблем DLL файл за один раз.
  • Сканирование по расписанию и ремонт вашего реестра Windows.
  • Защита приложений и ПК от сбоев системы.
  • Ускорение компьютера и операционной системы.
  • Остановка нежелательной системы оповещения.

В целом эта программа исправляет ошибку, связанную с отсутствием файлов dll. Когда я ее запустил, она через короткое время поздравила меня с тем, что нужный MSVBVM50.DLL файл установлен. Делает она это БЕСПЛАТНО! Но вот другие возможности программы — это уже за дополнительные 30$ без 5-ти центов.

Ошибка реестра: насколько это серьезно

Ошибкки dll

У меня было обнаружено всего 170 ошибок. В основном это ошибки COM и ActiveX. Как говорит программа, эти ошибки так или иначе, связанны с этими понятиями. Я поискал в Интернете и нашел следующее:

ActiveX — это разработка известной компании Microsoft, предназначение которого через Интернет распространять различное ПО. Программы, которые созданы благодаря технологии ActiveX, они могут быть встроены в обычные веб-страницы и выполнять разнообразные функции.

Как исправить ошибку dll

Как мы видим, эти ошибки могут снижать производительность ПК. Поэтому принял решение поискать какое-нибудь альтернативное решение для чистки и исправления ошибок реестра.

Существует масса программ по этой тематике. Но я в данном случае ориентировался на легкость программы и ее бесплатность. Выбор пал на бесплатную программу по названием Registry Life.

Как исправить ошибки в реестре

Реестр нашего компьютера должен быть в хорошем состоянии, чтобы работоспособность оставалась на высоком уровне. Кроме того, засоренный реестр вызывает всевозможные ошибки и торможение системы в целом.

Итак, для лечения реестра будем использовать программу Registry Life.

Скачать программу можно здесь: http://www.softportal.com/software-13793-registry-life.html

Вот скрин программы Registry Life:

Программа-Registry-Life

1. Чистка реестра

Для того, чтобы исправить проблемы реестра, нужно нажать кнопку «Запустить чистку реестра» и «Далее».

У меня было найдено 88 проблем, связанных с реестром. Программа Registry Life написала следующее:

Найдены проблемы в реестре. Проверка завершена. Ниже показаны разделы реестра, содержащие ошибки. Чтобы увидеть неверные записи в каком-либо из разделов реестра, дважды кликните по нему.

  • 88 проблем найдено в разделах реестра;
  • Ассоциации типов файлов: 10 проблем;
  • Общие библиотеки: 12 проблем;
  • Пользовательские настройки программ: 54 проблемы;
  • Наборы управляющих параметров: 12 проблем;
  • Показать неверные записи (для опытных пользователей).

Мы жмем на кнопку исправить. И все готово!

Логическая структура реестра в порядке

2. Оптимизация реестра

Этот инструмент физически оптимизирует файлы, в которых записан системный реестр. Эта процедура позволяет повысить производительность системы. В ходе ее выполнения файлы реестра будут дефрагментированы и сжаты. Программа проанализирует системный реестр и выполнит его оптимизацию.

Внимание! Необходимо закрыть все другие работающие приложения и отключить антивирусные программы перед началом оптимизации. А сразу после оптимизации потребуется перезагрузка системы.

Мы просто жмем на кнопочку «Выполнить оптимизацию реестра» и перезагружаем наш Windows. Все готово!

Заключение

Можно использовать различные инструменты для устранения ошибок, связанных с dll файлами. Я считаю этот вариант наиболее оптимальным. Но это лишь мое мнение. Главное — не паниковать. Система выдает нам какую-то ошибку, мы смотрим что там написано, вводим в поиск, устанавливаем.

Если все плохо — чистим и оптимизируем реестр. Вам я желаю успехов в этом деле. Если что  не понятно, спрашивайте. Чем сможем, поможем.

teweb.ru-v-socialnyh-setjah

Понравился пост? Нажми любую кнопку:

В этой статье мы разберем что такое DLL-файлы и возможные причины ошибок при их выполнении в Windows 7, 8, 10/

Что такое DLL-файлы и как исправить DLL ошибки в Windows 7, 8, 10

DLL – это файлы, которые принадлежат системным библиотекам, и формально считаются исполняемыми. Однако запустить самостоятельно их невозможно. Они используются для выполнения стандартных задач операционной системы, таких как запуск программ, удаление, сохранение, печать и прочее.

Разберем на примере: Вам нужно распечатать документ Word.  Вы выбираете функцию «Печать», и для выполнения этой операции из системной библиотеки выгружается соответствующий файл DLL, который управляет функциями печати. Но в процессе выполнения могут возникнуть ошибки разного рода (причины их появления будут описаны далее) из-за чего программа прекращает работу и не дает завершить процесс до конца.

Причины ошибок в работе библиотек

Каждый отдельный DLL отвечает за выполнение конкретной функции, и источник проблемы зависит от того, с каким именно файлом возникли неполадки. Как показывает практика, наиболее распространённые ошибки касаются файла Windows.dll – главной системной библиотеки. Он отвечает за запуск всех установленных приложений и операционной системы в целом.

В зависимости от сообщения, которое свидетельствует о завершении работы функции, можно судить о причинах возникновения ошибки:

  • «Файл не найден» — означает, что нужная библиотека была удалена (случайно или вредоносным ПО) или была перемещена в другую директорию.
  • «Файл отсутствует» свидетельствует о том, что системе не удалось найти необходимый файл в нужной папке. Часто за такой ошибкой стоят вирусы, заменяющие исходные коды библиотек.
  • «Нарушение прав доступа к файлу» — сообщение, знакомое большинству геймеров, так как чаще всего оно появляется после неудачной попытки запустить игру. В таком случае вместо выполнения заданной операции, ОС тщетно пытается «выгрузить» необходимый DLL из библиотеки, однако не получает в нее доступа.
  • «DLL не удалось зарегистрировать» указывает на то, что программа (или игра, что вероятнее) была установлена некорректно. Решить фатальную ошибку поможет полная деинсталляция, а потом повторная установка приложения.

Чаще всего неполадки с DLL файлами происходят у тех, кто используют неофициальные версии ОС Windows. Пиратские версии используют модифицированные «проблемные» библиотеки, которые не могут нормально взаимодействовать с другим программным обеспечением и утилитами. Решить это может замена пиратской версии операционной системы на лицензионную, или, как минимум, инсталляция оригинальной копии образца сертифицированной ОС. Найти ее можно на сайте Microsoft.com.

Существуют и другие причины появления ошибок такого рода:

  • Несовместимость технических требований установленного приложения и возможностей компьютера. Можно попытаться скачать более ранние версии программы, или обновить сборку операционной системы.
  • Устаревшие драйверы также могут затормозить выполнение операций. Если для запуска необходимы «свежие» драйвера, которые отсутствуют на устройстве, задача не будет выполнена из-за целого ряда ошибок. Предупредить эту проблему поможет своевременное обновление «дров» вручную, или автоматически при помощи специальных утилит.
  • Аппаратные неполадки, как, например, поломка дисковода с последующей невозможностью корректного чтения оптических носителей, тоже может повредить DLL файл, отвечающий за его нормальную работу.
  • Наряду с устаревшими драйверами, много хлопот может доставить и неактуальная версия операционной системы Windows. Все обновления для оригинальных продуктов предоставляются бесплатно. Сами разработчики ОС настоятельно рекомендуют регулярно обновлять систему. Это не только избавит от «торможений» и ошибок, но и поможет защитить ее от вредоносного ПО.
  • Имеет место быть и случайное удаление. Часто неопытные пользователи в попытках расширить свободное пространство на жестком диске, не разобравшись, удаляют десятки файлов, среди которых может оказаться и DLL-файл.

Способы устранения ошибок

Есть несколько способов устранения ошибок. Большинство из них универсальны, но некоторые будут эффективны только в конкретных ситуациях.

Ошибочное удаление исполнительного файла

При запуске приложений об отсутствии нужной библиотеки в директории будет свидетельствовать сообщение об ошибках msvcr100 DLL или msvcp120 DLL. Есть вероятность того, что они просто не установились в комплекте вместе с ОС, были удалены вручную или сторонними программами.

Для начала необходимо провести небольшую диагностику. В строке поиска (она находится в разделе «Пуск») нужно вписать название искомого файла. В большинстве случаев это дает положительный результат, так как нередко такие файлы находятся в неправильных папках. Если поиск увенчался успехом, найденный DLL нужно переместить обратно в нужное хранилище по адресу:

  • CWindowsSystem32 (для ОС в 32-битных версиях)
  • Или в CWindowsSysWoW64 (для 64-разрядных ОС).

Если файл не удалось найти, восстановить корректную работу системы поможет обновление программного пакета от Microsoft – Visual C++ последней версии. Он наладит работу всех системных файлов и исправит возникшие и потенциальные ошибки.

Самостоятельная регистрация библиотеки

Этот метод подойдет для частого случая, когда нужный системный файл находится в правильном месте, но система по своим причинам все равно его «не видит» или не может найти. Исходя из практики, можно сразу сказать, что апдейт программного пакета не даст никаких результатов, и придется перейти к более серьезным мерам.

В такой ситуации, нужную библиотеку придется зарегистрировать на сервере вручную. Удалять или перемещать DLL файл не нужно. С высокой вероятностью с ним все нормально, а неполадки возникают именно в процессе взаимодействия между ОС и серверами разработчиков.

Для самостоятельной регистрации библиотеки нужно выполнить три простых шага:

  1. Зажать комбинацию клавиш “Windows+R”.
  2. В строке выполнения вписать команду “cmd”.
  3. После этого откроется командное окно, в котором нужно провести регистрацию библиотеки. Ее название зависит от того, с каким именно файлом произошли неполадки.

Через среду восстановления

Быстро и просто исправить все ошибки операционной системы поможет специальная утилита восстановления. Она предусмотрена в самой ОС. Для ее запуска нужно одновременно зажать клавиши Windows+I, после чего откроется окно параметров.

Из открытого списка нужно выбрать пункт «Обновление и безопасность», а затем вкладку «Восстановление». Нужный раздел «Особые варианты загрузки» будет находиться в самом низу. В нем нужно выбрать операцию «Перезагрузить сейчас».

Обратите внимание! В этом каталоге также можно «откатить» операционную систему до заводских настроек. Это значит, что система будет восстановлена и вернется к своему первоначальному виду. Все установленные и сохранение файлы и программы будут удалены безвозвратно, поэтому их лучше сохранить заранее. System Reboot считается одним из лучших способов «лечения» системы и исправления ее от ошибок.

Как только система будет перезагружена, вместо обычного экрана запуска появится окно для решения неполадок. Для автоматического анализа проблем и их решения понадобится кликнуть на кнопку «Troubleshoot».

После этого компьютер будет снова перезагружен. При повторном включении абсолютно все ошибки будут исправлены без удаления пользовательских файлов или программ.

Обновление программ и установка необходимых DLL вручную

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

К надежным источникам для скачивания относятся такие крупные площадки, как:

  • Download-dll.ru;
  • ru;
  • Dll-files.ru.

Принцип использования довольно прост. Нужно ввести имя недостающего файла на сайте, скачать его и проверить антивирусом. Если с ним все в порядке, то его можно смело помещать в системную папку.

Переустановка программы

Не всегда проблема с запуском приложений заключается в неполадках самой ОС. Есть большая вероятность того, что в процессе установки утилиты возникла ошибка, после чего система просто не может обнаружить нужный DLL-файл.

Исправить ситуацию поможет обычная переустановка программы. Есть один важный момент. Перед тем, как инсталлировать утилиту вновь, ее нужно полностью удалить ТОЛЬКО через каталог «Установка и удаление программ». Он находится в разделе «Панель управления» в меню «Пуск». Также после деинсталляции понадобится перезагрузить компьютер, и только после этого можно приступать к повторной установке.

Обновление драйверов

Обновляя драйверное программное обеспечение, решается самая главная причина возникновения проблем – несовместимость между тремя основными составляющими устройства:

  • Аппаратным оборудованием.
  • Установленными программами.
  • Операционной системой.

Сделать это можно вручную, или при помощи специальных программ. Здесь будет рассмотрен первый метод:

  1. Для начала нужно войти в Диспетчер задач.
  2. Найти строку с названием компьютера и щелкнуть по ней правой кнопкой мышки.
  3. Выбрать функцию «Обновить конфигурацию».

Для обновления драйверов понадобится Интернет-соединение.

Очистка компьютера от вирусов

Еще один эффективный способ решения неполадок с DLL-файлами – это сканирование компьютера на вирусы с их последующим удалением. Для этих целей подойдет любой скачанный антивирус или же встроенный «Защитник». Он быстро обнаружит и поместит в карантин ошибочную библиотеку, созданную вирусом, и удалит ее.

После этого нужно будет установить или обновить пакет Microsoft Visual C++ и восстановить работу и взаимодействие системных файлов.

Программы для автоматического исправления ошибок

Провести диагностику и исправить ошибки можно и в автоматическом режиме при помощи специальных программ. Без конкретных названий найти хорошее ПО, которое эффективно бы справлялось с поставленными задачами, довольно трудно. Чаще всего в ТОПе поиска находятся приложения, предназначенные для чистки компьютера, но не для решения проблем с системными библиотеками.

Помимо встроенных расширений для устранения неполадок (они описаны в разделе про среду восстановления) есть несколько сторонних утилит, которые также настраивают корректную работу ОС:

  • FixWin 10 подойдет для устройств под управлением Windows Ее единственный недостаток – отсутствие русского языка, который с лихвой покрывается ее достоинствами: работа без установки, широкий инструментарий для автоматической коррекции типичных ошибок, а также подробная инструкция о том, как исправить неполадку вручную для каждого типа сообщения и файла.
  • Kerish Doctor – это многофункциональная программа, описание которой не войдет в рамки одной статьи. В этот список она попала, благодаря разделу «Обслуживание» и «Решение проблем с ПК». В нем размещен широкий список автоматических действий в зависимости от заявленной проблемы. В нее включены практически все случаи, за исключением специфических и узконаправленных. Подходит для любой обслуживаемой версии Windows.
  • И последняя программа Anvisoft PC PLUS – удобное и функциональное решение для исправления ошибок во всех версиях ОС. Она проста в использовании. После запуска на главном экране нужно выбрать тип возникшей проблемы, затем конкретную неполадку и запустить автоматическую диагностику и исправление. В большинстве случаев для скачивания дополнительных файлов потребуется подключение к интернету. Программа работает только на английском языке.

Заключение

Основными источниками ошибок системных библиотек являются: устаревшие версии ОС и драйверов, вирусы, случайное удаление нужных файлов и несовместимость основных составляющих. 99% проблем (за исключением специфических случаев) можно решить вручную, используя инструкции из разделов выше, или воспользоваться одной из программ, исправляющей неполадки автоматически.

  • 11 Янв 2015

radeon_save, что такое ТП ???

  • 11 Янв 2015

  • 12 Янв 2015

Тоже был неприятно удивлен этому. Может кто знает как всё-таки прошить Tiny 2313A soic через ICSP ?
ПО ver 6.10, HW ver. последняя 03.2.63
Или есть смысл сразу ТП писать? Был у кого опыт общения с ТП этого программатора?
Тебе ж конкретно по ATtiny2313A в инфо файле написано и нарисовано, что шьется (в твоем корпусе) только через SO-DIP20 адаптор. Просьбы в тех.поддержку писать, да ещё и китайскую … мало вероятно что прочтут хотя бы.
Да и ещё на вопрос «…а как можно прошить ПЗУ AT45DB041B с помощью ICSP интерфейса» в рисунке ошибка, для корпуса CASON и 8-SOIC надо соединять так (для корпусов 28-pin смотрим datasheet):
1 нога ICSP программатора — на 4 ножку AT45DB041B
2 нога — на 3, 5 и 6 ножки AT45DB041B
3 — на 7
4 — на 1
5 — на 8
6 — на 2
на цвета шлейфа не обращаем внимания.

  • 12 Янв 2015

radeon_save сказал(а):

Тоже был неприятно удивлен этому. Может кто знает как всё-таки прошить Tiny 2313A soic через ICSP ?
ПО ver 6.10, HW ver. последняя 03.2.63
Или есть смысл сразу ТП писать? Был у кого опыт общения с ТП этого программатора?

А таки да, походу шьется только через ZIF разьем, ICSP не активен, а ты не пробовал поэксперементировать и в ZIF согласно распиновке чипа в даташите найти на чипе ICSP выводы и воткнуть провода в ZIF и попробовать шить? Проконает ли?

dd2c14cbfc126e90f780ceb847aa1bb6.png

  • 12 Янв 2015

Leumas, Тоже об этом думал. Пробовал, спаял переходник как вы выше указали, нифига. Программатор не видит её, ID не получает. МС точно живая так как через Willem прошивается по ISP. Сейчас Willema нет под рукой, прошить надо 12 шт AT2313 уже распаянных на рабочих образцах.

Кстати, интересно, почему не проканало… Может программатор в панели по другому принципу (шине) общается с МС ?!?

  • 12 Янв 2015

Эх, значит через ZIF панель прогер с микрой общается только по паралельному интерфейсу, значит последовательный интерфейс ICSP для 2313 и 4313 китайцы еще не реализовали :(
Мне самому нада будет 10шт тинек2313 зашить, пока не распаяны то могу и через адаптер прошить, но как только запаяю то останется только ICSP который походу китайцы для этих микрух не допилили еще :(
Добавят ли?

  • 12 Янв 2015

Так вот я и хотел написать в ТП, может хоть что-нибудь ответят, да только не нашел почту, на которую писать.

Ставил прогу WizardProg87, думал там реализованно- ничего подобного. Думаю что наши ребята просто перевели программу от MiniPro.

  • 12 Янв 2015

Так оно и есть, это таже самая прога, только переведена на русский + иконки сменили.
имейл вроде как autoelector@yahoo.com

  • 12 Янв 2015

Ок, напишу им. По результату отпишусь, если интересно.

  • 12 Янв 2015

Будет хорошо, пора бы им обновить софт, добавить чипы и расширить их количество, особенно если научат читать NAND чипы )))

  • 13 Янв 2015

Будет нанды обрабатывать — ему цены не будет . Мне голенький едет , так слежу за темками на разных форумах .
Вот что-то сам нарисовал и ребята помогали .

► MiniProTL866_tsop.rar

  • 13 Янв 2015

Хочу заказать данный программатор TL866A, но вот вопрос интересует: может он прошивать такие влешки как в планшетах и TV-box напрямую? они вроде бы и называются NAND чипы. упомянул выше:

Leumas сказал(а):

Будет хорошо, пора бы им обновить софт, добавить чипы и расширить их количество, особенно если научат читать NAND чипы )))

  • 13 Янв 2015

Supercontick, такие

Supercontick сказал(а):

TL866A не шьет.

  • 13 Янв 2015

Supercontick, если не ошибаюсь то тебе нада прогер Тритон

  • 16 Янв 2015

Привет всем. Хочу предупредить всех, что Wizardprog v 2.0 на XP выдаёт ошибку устаревшей программы! Предыдущая версия 1.6 работает нормально.

  • 17 Янв 2015

Сегодня пришел данный программатор TL866CS / поставил оболочку Wizardprog v 2.0 на XP .программатор тест прошел. пока ничего не прошивал . но с виду все работает.
:mrgreen:

  • 17 Янв 2015

Тест и у меня проходил TL866A, а вот при попытке чтения………

  • 17 Янв 2015

serg55.usv сказал(а):

Будет нанды обрабатывать — ему цены не будет

Не будет с Nand работать

artvv сказал(а):

Хочу предупредить всех, что Wizardprog v 2.0 на XP выдаёт ошибку устаревшей программы! Предыдущая версия 1.6 работает нормально.

Может все же не ошибку выдает,а предупреждение обновить прошивку прогера.

  • 17 Янв 2015

В windows 8 не требует обновить прошивку, а в XP требует. Не кажется это странным?

  • 17 Янв 2015

artvv сказал(а):

В windows 8 не требует обновить прошивку, а в XP требует. Не кажется это странным?

Работать на несоответствующей прошивке не будет.

  • 18 Янв 2015

Прошу у всех прощения. Проверял в спешке на работе, и где-то лоханулся. Перепроверил дома — и на 8-ке не работает.
В предыдущих версиях, и нашей и китайской, прошивки были одинаковые. Теперь они отличаются. Китайская свежее нашей:
Файл прошивки update.bin в WizardProg87 создан 26.01.2014 ICinfo.dll создан 14.02.2014.
Файл прошивки update.dat в MiniPro создан 16.07.2014 InfoIC.dll создан 16.07.2014.
Соответственно версии у прошивок разные:
У MiniPro Firmware version:03.2.63
У WizardProg87 Firmware version:03.2.62
Сообщение выскакивает у тех, кто работал с китайской прошивкой
от версии 6.10, а перешить наша программа уже не даёт. Просто кнопка перепрошивки не активна. Пробовал откатиться на старую
версию прошивки от китайской 5.91 с помощью программы
«TL866 firmware updater». После этого наша программа предложила
обновить прошивку, и всё заработало. Затолкать сразу нашу
прошивку с помощью «TL866 firmware updater» не получилось.
Пишет «Ошибка CRC».
Для себя сделал вывод, что нужно вернуться к китайской.
Да и у китайской на 24 микросхемы больше в списке.

  • 22 Янв 2015

Прошло 10 дней с момента написания в ТП MiniPro. Ни ответа, ни привета… В принципе шанс был что они ХОТЬ ЧТО-ТО ответят, но нет, к сожалению. Писал письмо на Английском, разумеется, с разных доменов — yandex.ru и gmail.com, «отбивки» почтовых серверов не было, значит почта к ним ушла.

Я был оптимистично настроен, так как приходилось писать в ТП компании ASRock- ответили быстро и по существу.

Добавлено 22-01-2015 14:50

В ASRock писал, когда ремонтировал материнскую плату, на s775, не смог определить одну МС. Описание в инете не нашел, решил написать на авось в их ТП, описал проблему и парт номер детали и позиционное обозначение на плате и ревизию платы с моделью, разумеется. Ответили мгновенно (в течении суток), даже в виде таблички, я был приятно удивлен.

  • 24 Янв 2015

radeon_save сказал(а):

Прошло 10 дней с момента написания в ТП MiniPro. Ни ответа, ни привета…

С тех пор ,когда афтары-китайцы вынудили сломать прошивку этого прогера,о всяких пожеланиях и обновлениях можно забыть.

  • 24 Янв 2015

А кто его знает, может обновка и будет, время покажет, а пока довольствуемся тем что имеем.

Кстати, видел на ютубе переходники HDMI EEPROM
Нет ли у кого то печатной платки?
видео вот  ссылка скрыта от публикации 
и вот  ссылка скрыта от публикации 

  • 1 Фев 2015

После установки версии MiniPro 6.10 попросила обновить программу програматора, меня чёрт дёрнул нажать в Tools «Reflash firmware» после этого программатор не работает с WizardProg87 пишет «Версия программі устарела для данной операции» и самое главное перестала видеть микросхемы PLCC32.
Можно как-то решить данную проблему откатом на предыдущую версию ?

Содержание

  1. Причины некорректной работы DLL файлов
  2. Инструкция для решения ошибок dll
  3. Ошибки связанные c библиотеками DirectX
  4. Ошибки связанные c библиотеками Microsoft Visual C++
  5. DLL файлы удалены или устарели
  6. Загрузка dll с помощью командной строки
  7. Обновление причастного драйвера
  8. Проверка на вирусы
  9. Реестр поврежден?

Из-за несовместимости между программами и системой мы иногда сталкиваемся с ситуацией, когда ПО не может работать, а система сообщает, что отсутствует поддержка определенного DLL-файла. Почему программное обеспечение, которое хорошо работает под определенной версией системы, не может использовать другую? Есть ли какое-либо другое решение, кроме переустановки Windows? Что делать, если появляется сообщение о нехватке любого DLL? На данной странице вы узнаете, как быстро исправить эту ошибку.

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

Файлы DLL, используемые многими программами, существуют в каталоге Windows или его подразделах. Это документы, которые поставляются с системой. Некоторые программы тоже устанавливают эти файлы в каталог ОС при их установке. Однако, когда ПО используется как лицензионное, то пользователи обычно не испытывают проблем.

У вас же могут быть разные случаи, например сам ДЛЛ был скопирован в неправильную директорию или при установке ПО не произвел замену с уже существующим в нужной системной папке.

Одной из основных проблем, с которыми сталкиваются пользователи Windows, являются ошибки файла DLL. Данные файлы представляют собой библиотеки с динамической компоновкой, которые используются для повышения производительности программ и их эффективности. Проблема с DLL может привести к замедлению работы компьютера. Если вы не предпримете надлежащих шагов для исправления рассматриваемых ошибок, то ваш компьютер станет непригодным для использования.

  • Компоненты Windows не установлены:
    • DirectX;
    • Visual C.
  • DLL файлы удалены или устарели,
    • +способ по загрузке dll из командной строки.
  • Драйвера вашего ПК устарели или отсутствуют.
  • Вирусы могут помешать нормальной работе.
  • Реестр системы поврежден.

Важно отметить, что ошибки файлов DLL регулярно проверяются Windows. Каждый файл DLL имеет ограничение на проверку. Если с этим файлом возникла проблема, операционная система уведомит вас и попросит устранить неисправность. Однако еще более важно то, как вы исправляете эти ошибки, потому что невозможно решить проблему, не имея доступа к необходимым инструментам.

Исправление ошибок DLL не является невыполнимой задачей. По сути, если ваш компьютер сталкивается с проблемой при выполнении определенной программы, первое, что вы должны сделать, это найти на компьютере файлы DLL, которые соответственно лежат в папке с имени программы. Затем вы должны устранить любые проблемы, связанные с этими конкретными DLL документами.

Инструкция для решения ошибок dll

Самым правильным методом будет скачивание и установка ПО заново вместе со всеми дополнительными компонентами указанными в системных требованиях. Будь то игра или же рабочая программная среда для её нормального запуска обычно требуются DirectX, Visual C.

Ошибки связанные c библиотеками DirectX

И так, когда Windows обнаружит ошибку, то система покажет уведомление с надписью:

Запуск программы не возможен, так как на компьютере отсутствует (название файла DLL). Попробуйте переустановить программу.

Ошибка DLL DirectX (d3dx9_43.dll) в Windows

В случаях, когда сам файл имеет название по типу следующих библиотек: d3dx9.dll, xinput1.dll, d3dx10.dll и т.д. (часто имена очень схожи и имеют буквы d и x перед расширением), то решение проблемы заключается в установке нужной версии DirectX, которую можно узнать в системных требованиях самой программы (рядом с системными требованиями пишут и версию Дирекса для корректной работы).

Ошибки связанные c библиотеками Microsoft Visual C++

Еще одним частым пулом уведомлений являются случаи, когда внутри текста присутствует фраза:

Запуск программы не возможен, так как на компьютере отсутствует (название файла DLL). Попробуйте переустановить программу.

В названии файла фигурируют слова MSVC или RUNTIME.

Ошибка DLL Microsoft Visual C++ (MSVCP140.dll) в Windows

Исходя из данных системных требований приложения, определите какая именно версия библиотеки Visual C нужна и установите её.

DLL файлы удалены или устарели

Ради примера допустим, что при установке ПО вы не изменяли место, в котором будут храниться его файлы.

Система подскажет, какого файла не хватает. Воспользуйтесь функцией системного поиска (лупа в нижнем левом углу экрана), для розыска этого файла в используемой ОС, выберите из результатов документ с DLL расширением (имя должно совпадать с тем, которое указано в уведомлении об ошибке), находящегося в системном каталоге (часто это C:WindowsSystem32). Скопируйте и переместите его в новую системную директорию, в зависимости от вашей ОС (пути указаны в пункте 2 данного алгоритма).

Отсутствующие DLL-файлы не обязательно копировать в директорию Windows, их можно скопировать в другие места. Самым частым является директория с корнем установленного ПО. При установке игры или приложения вы указываете путь установки, именно о нем здесь идет речь.

  1. Внимательно посмотрите на название ошибки. Это может быть:
    • unarc.dll
    • vcruntime140.dll
    • window.dll
    • windows.dll
    • msvcp140.dll
    • msvcp120.dll
    • msvcp100.dll
    • steam.dll
    • d3dx9.dll
    • xinput1.dll
    • steamapi64.dll
    • isdone.dll

Если в представленном списке нет нужно вам файла (имя.dll высвечивается в окне уведомления об ошибке сразу после слов «Запуск программы не возможен, так как на компьютере отсутствует…» — пример показан на скриншотах выше), то посетите базу DLL.

В поле «Поиск недостающих Dll файлов» введите имя, которое подсказала вам система например: unarc.dll и нажмите «Поиск DLL файлов».

Ниже, в результатах поиска появятся все доступные документы кликните по ссылке с именем файла и перейдите таким образом на страницу скачивания.

Поиск dll файлов в базе

Пролистайте вниз и найдите кнопку «Скачать». При нажатии на вашем ПК в папке «Загрузки» , появится искомый документ, после чего переходите к следующему пункту.

Скачивание необходимого dll из базы

Мы советуем вам поместить файл в директорию программы, которая запрашивает данный документ. Убедитесь, что вы используете правильную разрядность ПО и ОС. Если ошибетесь с версиями, то возникнет ошибка 0xc000007b.

  1. После того, как вы определились с кодом ошибки
    • Скачайте недостающий файл DLL и переместите по пути C:WindowsSystem32 или по вашему (если была изменена корневая папка).
    • Если копирование с заменой в «System32» не сработало, попробуйте переместить в системные директории (это зависит от версии ОС и от того, откуда приложение будет запрашивать библиотеки):
      • C:WindowsSystem (Windows 95/98/Me);
      • C:WINNTSystem32 (Windows NT/2000);
      • C:WindowsSystem32 (Windows XP, Vista, 7, 8, 8.1, 10).
      • C:WindowsSysWOW64.

Папка System32 в Windows

Загрузка dll с помощью командной строки

  1. Если все таки не получается, то через командную строку от имени администратора введите:
  2. Если у вас Виндовс 32bit
    • regsvr32 (укажите имя недостающего файла).dll. Без скобок.
  3. Если у вас Виндовс 64bit
    • cd c:windowssyswow64
    • regsvr32 c:windowssyswow64(укажите имя недостающего файла).dll. Без скобок.

Запуск командной строки от имени администратора в Windows

Обновление причастного драйвера

Бывают случаи, когда ошибка DLL возникает из-за устаревшего драйвера. Например, если игра запущена через диск, то стоит обновить драйвер в диспетчере устройств. Для этого:

  1. В левом нижнем углу экрана найдите значок лупы для осуществления поиска и в поле ввода напишите диспетчер устройств.
  2. Кликните Enter.
  3. В появившемся окне выберите оборудование, драйвер которого мешает корректной работе (в рассматриваемом случае это дисковод).
  4. Нажмите по его названию правой кнопкой мыши.
  5. В раскрывшемся меню выберите пункт обновить драйверы…

Обновляем драйвера в Windows

Проверка на вирусы

Если на данном этапе проблема до сих пор не решена, проверьте свой ПК на вирусы. Это необходимо для того, чтобы убедиться нет ли вредоносных файлов, которые маскируются под DLL.

Проверка на вирусы в Windows

Реестр поврежден?

Самое страшное, что может случится у обычного пользователя, это когда важная ветка реестра операционной системы повреждена. В этом случае даже если заменять DLL файлы на рабочие, скачанные вручную и закинутые в корневые папки по типу System32, каждый раз будут появляться новые уведомления со следующей ошибкой (т.е. скорее всего все DLL указанные в окнах ошибки нужно будет так же устанавливать самостоятельно, а их может быть очень много).

Like this post? Please share to your friends:
  • Ошибка файла hal dll
  • Ошибка файл слишком большой торрент
  • Ошибка файла data bin
  • Ошибка файл слишком большой для этой файловой системы
  • Ошибка файл уже используется как удалить