dll用什么软件打开
DLL是Dynamic Link Library的缩写,意为动态链接库。
DLL文件一般被存放在C:WindowsSystem目录下。
在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。
当我们执行某一个程序时,相应的DLL文件就会被调用。
一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。
那么DLL文件怎么打开呢?其实,理论上DLL是不能打开的,如果您还是想打开,可以使用一些软件开发或反编译功能,比如DLL函数查看器,但不建议修改。
当然也有的DLL是加了壳的,您需要先脱壳才可以。
这里小编要提示大家删除DLL文件或修改DLL文件的内容,可能会导某些程序无法打开或运行错误,提示没有DLL文件。
因此一般情况下不建议您打开DLL文件或进一步对其进行编辑操作。
有一款能自动查看你缺失的dll文件的软件
楼主您好:那个是英文版的软件,我原来下载过,可以找到电脑内缺少的动态连接库文件,但是那个软件是付费的,当时我也愁,自己写的注册机也不好用,网上也没有注册机,后来不了了之了,如果系统缺少文件可以用ghost找到备份的文件,然后复制出来放到自己系统就可以了,实在不行就重做系统吧,希望可以帮到您
有什么文件可以检查缺少那些DLL
DLL文件是别人封装后的程序,你肯定是看不了的,如果是用.net写的,可以用反编译软件查看他的源代码,这个软件可以把以.dll和.exe的.net文件还原成源代码,不过有时不会很准确。
鄙视照抄、复制,pp_hu软件的名字叫Reflector,你在网上搜一下,很多的。
用法很简单,装好后,把你要查看的DLL文件拖到左边,这样你就可以看见这个DLL文件下的类、方法等,点击这些类的名字,在右边就可以看到源代码了。
注:这种软件对经过特殊处理过(如:代码加密)的文件没什么效果
DLL文件用什么软件打开查看里面的代码
DLL是应用程序扩展型文件,是主程序的辅助,一般直接打开没有任何效果DLL文件即动态链接库文件,是一种可执行文件,它允许程序共享执行特殊任务所必需的代码和其他资源。
Windows提供的DLL文件中包含了允许基于Windows的程序在Windows环境下操作的许多函数和资源。
DLL多数情况下是带有DLL扩展名的文件,但也可能是EXE或其他扩展名。
它们向运行于Windows操作系统下的程序提供代码、数据或函数。
程序可根据DLL文件中的指令打开、启用、查询、禁用和关闭驱动程序。
DLL可在“C:Windows”目录“C:WindowsSystem”目录和程序的安装目录中找到。
如果启动程序,但一个或多个DLL文件丢失或毁坏,则会收到出错消息,如“找不到xyz.dll”。
如果启动的程序带有一个过期的DLL文件或不匹配的DLL文件,则会出现“未定义的动态链接调用”消息。
这时,你可在其他电脑上找到正确的DLL文件并将它拷贝到适当的目录下,程序就能正确运行。
DLL函数查看器V2.0,但不建议修改。
DLL是Dynamic Link Library的缩写,意为动态链接库。
在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。
当我们执行某一个程序时,相应的DLL文件就会被调用。
一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。
DLL文件一般被存放在C:\Windows\System目录下。
dll文件是系统的动态链接库文件,可以用一些十六位春文本编辑器打开,如UltraEdit也可以下载DLL文件编辑器编辑但代码是经过加密的非专业人士是看不懂的!
怎样才能知道一个dll文件里都有什么方法可以用?
动态链接库(DLL)是Windows系统的核心,也是COM技术的基础。
在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。
当我们执行某一个程序时,相应的DLL文件就会被调用。
可以到网上下载DLL函数查看器viewdll查看dll文件中的输出函数,也可以使用visual studio自带的DLL查看工具,通常在Common\Tool下
如何查看DLL文件里的函数
可以通过反汇编来知道接口函数的参数,建议使用W32DSM来分析,也可以直接使用VC来分析,就是麻烦一点。
现在使用W32DSM来具体说明:1。
先打开需要分析的DLL,然后通过菜单功能-》出口来找到需要分析的函数,双击就可以了。
它可以直接定位到该函数。
2。
看准该函数的入口,一般函数是以以下代码作为入口点的。
push ebpmov ebp, esp...3。
然后往下找到该函数的出口,一般函数出口有以下语句。
...ret xxxx;//其中xxxx就是函数差数的所有的字节数,为4的倍数,xxxx除以4得到的结果就是参数的个数。
其中参数存放的地方:ebp+08 //第一个参数ebp+0C //第二个参数ebp+10 //第三个参数ebp+14 //第四个参数ebp+18 //第五个参数ebp+1C //第六个参数。
。
。
。
-------------------------------------------还有一种经常看到的调用方式:sub esp,xxxx //开头部分//函数的内容。
。
。
//函数的内容add esp,xxxxret //结尾部分其中xxxx/4的结果也是参数的个数。
-------------------------------------------------还有一种调用方式:有于该函数比较简单,没有参数的压栈过程,里面的esp+04就是第一个参数esp+08就是第二个参数。
。
。
esp+xx就是第xx/4个参数你说看到的xx的最大数除以4后的结果,就是该函数所传递的参数的个数。
----------------------------------------------到现在位置,你应该能很清楚的看到了传递的参数的个数。
至于传递的是些什么内容,还需要进一步的分析。
最方便的办法就是先找到是什么软件在调用此函数,然后通过调试的技术,找到该函数被调用的地方。
一般都是PUSH指令来实现参数的传递的。
这时可以看一下具体是什么东西被压入堆栈了,一般来说,如果参数是整数,一看就可以知道了,如果是字符串的话也是比较简单的,只要到那个地址上面去看一下就可以了。
如果传递的结构的话,没有很方便的办法解决,就是读懂该汇编就可以了。
另外由于编译器的优化原因,可能有的参数没有我前面说的那么简单。
如果在该DLL的某个函数中,有关于API调用的话,并且调用API的参数整好有一个或多个是该DLL函数的参数的话。
那么就可以很容易的知道该DLL函数的参数了。
举例说明:以下汇编代码通过W32DSM得到。
Exported fn(): myTestFunction - Ord:0001h:10001010 8B442410 mov eax, dword ptr [esp+10]:10001014 56 push esi:10001015 8B74240C mov esi, dword ptr [esp+0C]:10001019 0FAF742410 imul esi, dword ptr [esp+10]:1000101E 85C0 test eax, eax:10001020 7414 je 10001036:10001022 8B442418 mov eax, dword ptr [esp+18]:10001026 8B4C2408 mov ecx, dword ptr [esp+08]:1000102A 6A63 push 00000000:1000102C 50 push eax:1000102D 51 push ecx:1000102E 6A00 push 00000000* Reference To: USER32.MessageBoxA, Ord:01BEh |:10001030 FF15B0400010 Call dword ptr [100040B0]* Referenced by a (U)nconditional or (C)onditional Jump at Address:|:10001020(C)|:10001036 8BC6 mov eax, esi:10001038 5E pop esi:10001039 C3 ret-------------------------------------------------------其中myTestFunction是需要分析的函数,它的里面调用了USER32.MessageBoxA这个函数计算参数个数的时候要注意了,它不是0X18/4的结果,原因是程序入口的第二条语句又PUSH了一下,PUSH之前的ESP+10就是第4个参数,就是0x10/4 =4PUSH之后的语句ESP+ XX,其中(XX-4)/4才对应于第几个参数。
ESP+0C ==第2个参数ESP+10 ==第3个参数ESP+18 ==第5个参数ESP+08 ==第1个参数----------------------------这样共计算出参数的个数是5个,注意PUSH esi之前与PUSH esi之后,PUSH一下,ESP的值就减了4,特别需要注意的地方!!!然后看函数的返回处RET指令,由于看到了RET之前给EAX赋了值,所以可以知道该函数就必定返回了一个值,大家都知道EAX的寄存器是4个字节的,我们就把它用long来代替好了,现在函数的基本接口已经可以出来了,long myTestFunction(long p1,long p2,long p3,long p4,long p5);但是具体的参数类型还需调整,如果该函数里面没有用到任何一个参数的话。
那么参数多少于参数的类型就无所谓了。
一般来说这是不太会遇到的。
那么,我们怎么去得到该函数的参数呢?请看下面分析: 你有没有看到* Reference To: USER32.MessageBoxA, Ord:01BEh这一条语句,这说明了,在它的内部使用了WINAPI::MessageBox函数,我们先看一下它的定义:int MessageBox( HWND hWnd, // handle of owner window LPCTSTR lpText, // address of text in message box LPCTSTR lpCaption, // address of title of message box UINT uType // style of message box);它有4个参数。
一般我们知道调用API函数的参数是从右往左压入堆栈的,把它的调用过程翻译为伪ASM就是: PUSH uType PUSH lpCaption PUSH lpText PUSH hWnd CALL MessageBox---------------------------------------我们把这个于上面的语句对应一下,就可以清楚的知道hWnd = NULL(0)lpText = ecxlpCaption = eaxuType = MB_OK(0)---------------------------------在往上面看,原来 EAX 中的值是ESP+18中的内容得到了...
转载请注明出处51数据库 » 查看软件需要哪些dll