当前位置:文档之家› 文件删除原理

文件删除原理

文件删除原理
文件删除原理

文件删除原理

存储在硬盘中的每个文件都可分为两部分:文件头和存储数据的数据区。文件头用来记录文件名、文件属性、占用簇号等信息,文件头保存在一个簇并映射在FAT表(文件分配表)中。而真实的数据则是保存在数据区当中的。平常所做的删除,其实是修改文件头的前2个代码,这种修改映射在FAT表中,就为文件作了删除标记,并将文件所占簇号在FAT 表中的登记项清零,表示释放空间,这也就是平常删除文件后,硬盘空间增大的原因。而真正的文件内容仍保存在数据区中,并未得以删除。要等到以后的数据写入,把此数据区覆盖掉,这样才算是彻底把原来的数据删除。如果不被后来保存的数据覆盖,它就不会从磁盘上抹掉。用Fdisk分区和Format格式化和文件的删除类似,前者只是改变了分区表,后者只是修改了FAT表,都没有将数据从数据区直接删除。

由文件删除的原理可知,要彻底删除数据,只有把删除文件所在的数据区完全覆盖掉。绝大部分彻底删除工具所使用的就是这个道理:把无用的数据反复写入删除文件的数据区,并进行多次地覆盖,从而达到完全删除文件的目的。

Windows的这种伪删除,虽然给我们带来了好处,让我们有后悔药可吃。但对于很机密的文件就有了麻烦,存在着被重新恢复的可能性。所以,删除机密文件,一定要借助彻底删除工具,让机密文件彻底“粉身碎骨”,这样你就可以高枕无忧了

发送IRP删除正在运行文件学习笔记zz

在网上看到了北极星2003写的这篇文章,代码写的很好,注释也很清楚,方便了我这个大菜鸟的学习,对他的无私奉献非常非常感谢。

强制删除文件的思路就是,把SECTION_OBJECT_POINTERS结构的DataSectionObject和ImageSectionObject两个域清空即可删除正在运行的文件。如果不清空就不能删除运行中的文件。正在运行的文件的这两个域值不为0而文件系统正在根据这两个域决定该文件是否可以删除。如

果文件系统检测这两个值为0,就理解为文件没有被使用,可以删除。接下去,就是直接发IRP,初始化IRP,设置IRP堆栈信息,设置完成例程,派发IRP。

一、获得文件内核句柄

RtlInitUnicodeString ( &FileName, L” \\DosDevices\\C:\\test.exe” ) ;

InitializeObjectAttributes ( &objectAttributes, &FileName,\

OBJ_KERNEL_HANDLE|OBJ_CASE_INSENSITIVE, \

NULL, NULL ) ;

ntStatus = IoCreateFile ( &hFile,FILE_READ_ATTRIBUTES, &objectAttributes, &ioStatus, \

0,FILE_ATTRIBUTE_NORMAL,FILE_SHARE_DELETE,FILE_OPEN,0,NULL,0,\ CreateFileTypeNone,NULL, IO_NO_PARAMETER_CHECKING);

打开文件应该传入这个文件的路径。但是实际上这个函数IoCreateFile并不直接接受一个字符串。使用者必须首先填写一个OBJECT_ATTRIBUTES结构。

用到一个宏:InitializeObjectAttributes用来初始化对象属性

我们是对c:\test.exe,这是个固定的文件了,属性应该也固定了,为什么还要初始化属性呢?

其实这里的初始化属性,主要是为了包含文件的对象路径,然后在指明该代码对该文件的一些要求,如获得内核句柄,不区分文件名的大小写,而不是对文件的操作。即将FileName,OBJ_KERNEL_HANDLE|OBJ_CASE_INSENSITIVE,全放入objectAttributes这个结构中。

typedef struct _OBJECT_ATTRIBUTES {

ULONG Length;

HANDLE RootDirectory;

PUNICODE_STRING ObjectName;

ULONG Attributes;

PVOID SecurityDescriptor;

PVOID SecurityQualityOfService;

} OBJECT_ATTRIBUTES, *POBJECT_A TTRIBUTES;

要说明2点:

1、objectAttributes结构中的ObjectName要求的是对象的路径名,因此不能写成c:\test,

c:是一个符号链接对象,内核模式下,符号链接要写成\\??\\C:或者\\DosDevices\\C:

因此对象路径名为:\\DosDevices\\C:\\test.exe或\\??\\C:\\test.exe

2、InitializeObjectAttributes只需要填写OBJ_CASE_INSENSITIVE| OBJ_KERNEL_HANDLE即可

OBJ_CASE_INSENSITIVE意味着名字字符串是不区分大小写的

OBJ_KERNEL_HANDLE表明打开的文件句柄一个“内核句柄”

二、发送IRP去除文件的只读属性

对文件的任何操作,最终都是通过IRP请求,然后文件系统驱动对该IRP进行处理,完成对文件的指定操作。

驱动程序,则可以自己创建IRP,初始化IRP,设置IRP堆栈信息,设置完成例程,派发IRP。这里我们采用的就是这种方法。

三、发送IRP删除文件

Windows API中的DeleteFile实现文件删除功能的内部实现:

DeleteFile通过IRP_MJ_SET_INFORMATION请求的IRP,并且将pIrpStack->Parameters.SetFile.FileInformationClass设为FileDispositionInformation且((PFILE_DISPOSITION_INFORMATION)Irp->AssociatedIrp.SystemBuffer)->DeleteFile设为TRUE来达到删除文件。

所以我们有:

FILE_DISPOSITION_INFORMATION FileInformation;

FileInformation.DeleteFile = TRUE;

//初始化IRP

Irp->AssociatedIrp.SystemBuffer = &FileInformation;

//设置IRP堆栈

irpSp->Parameters.SetFile.FileInformationClass = FileDispositionInformation;

由上,我们可以删除这个文件,但是如果文件在运行,则不能删除,需要加上如下代码:

//如果没有这4行,就无法删除正在运行的文件

PSECTION_OBJECT_POINTERS pSectionObjectPointer;

pSectionObjectPointer = fileObject->SectionObjectPointer;

pSectionObjectPointer->ImageSectionObject = 0;

pSectionObjectPointer->DataSectionObject = 0;

对于如何创建IRP,初始化IRP,设置IRP堆栈信息,设置完成例程,派发IRP,这里先不写了,等再整理整理后再写吧。

利用MoveFileEx实现程序的隐藏、自启动与自删除

hkRalf /

RalfPla [p14UST]

关键字:MoveFileEx;MOVEFILE_DELAY_UNTIL_REBOOT;文件的隐藏;程序自启动;程序的自删除。

摘要:程序的自启动与自删除几乎是所有后门或者木马所必须具备的功能。程序实现自启动的方法有很多种,最常见的方法莫过于写注册表,添加服务,或者将自身复制到启动目录。自删除通常的办法是写批处理。但是这些方法都已经众所周知,均被各杀毒软件、防护软件,主动防御软件以及经验丰富的管理员视为可疑行为。本文利用API函数MoveFileEx的dwFlags 参数实现了上述功能,并且具有一定的隐蔽性。

一、了解MoveFileEx

MoveFileEx是MoveFile函数的扩展函数,也是用来移动文件,不过多加了一些功能。MoveFileEx函数的原型如下:

BOOL MoveFileEx (

LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, DWORD dwFlags );

第一个参数是要移动的文件名,第二个是移动后的文件名,最后一个参数决定了移动的方式。仔细看最后一个参数可取的值,其中一项为MOVEFILE_DELAY_UNTIL_REBOOT ,MSDN 中对此标记描述如下:

The function does not move the file until the operating system is restarted. The system moves the file immediately after AUTOCHK is executed, but before creating any paging files. Consequently, this parameter enables the function to delete paging files from previous startups.

This flag can only be used if the process is in the context of a user who belongs to the administrator group or the LocalSystem account.

This flag cannot be used with the MOVEFILE_COPY_ALLOWED flag.

当dwFlags被设为MOVEFILE_DELAY_UNTIL_REBOOT时,函数直到系统重启后才移动文件。注意文件的移动是发生在AUTOCHK执行之后,在页面文件创建之前。而此时用户还没有完全的进入操作系统,所以可以应用这点删除那些正常情况下很难删除的文件甚至是页面文件。

lpNewFileName为NULL时,MovefileEx实现的就是删除的功能。很多杀毒软件和一些恶意程序删除工具就是利用了MoveFileEx函数的这个特性来实现的重启后删除病毒。MOVEFILE_DELAY_UNTIL_REBOOT标记使用时需要具有管理员或者LocalSystem用户的进程上下文。

MOVEFILE_DELAY_UNTIL_REBOOT标记不能和MOVEFILE_COPY_ALLOWED标记一同使用。因为在不同的卷下实现不了真正的移动,MOVEFILE_COPY_ALLOWED标记使用的

时候,函数通过模拟CopyFile 和DeleteFile 两个函数实现移动。正在运行的程序不能移动到不同的卷(分区)下,这时只实现了Copyfile,下一步DeleteFile没有成功,正在运行的程序是不能删除的。

当dwFlags参数被设置为MOVEFILE_DELAY_UNTIL_REBOOT时,MoveFileEx把重启后移动的文件和要移到的文件的位置存在下面的多字符注册表值(REG_MULTI_SZ)里:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session\Manager\PendingFileR enameOperations。如图1。

图1

二、进一步探究

我们都知道Windows下正在运行的程序是不能直接删除的(Linux下正在运行的程序则可以删除的)。

下面的演示的是一个比较简单后门程序(door.exe),绑定端口1985,实现了一些基本的后门功能。运行此后门。如果删除的话会弹出如下对话框:

图2

正在运行的程序虽然不能删除,但是一般可以改名或者移动,移动后程序依然可以运行。如图3、4

图3

图4

可以看到正在运行的程序被移动到了另一个目录。

图5

而且比较有意思的是一般的进程查看工具查看的此时door.exe进程的文件映像还是在没移动的目录里。

下面是Process Explorer查看的结果:

图6

还有下面这个syscheck2:

图7

试了很多可以查看进程的工具,发现只有IceSword可以检测出移动后的进程所在目录:

图8

这样对方发现这个程序,到相应的目录确找不到它,某种程度实现了隐藏文件的目的.如果用在线程插入的dll文件上,其隐蔽性就很好了.

三、MoveFileEx的利用与实现

利用刚才上面所提到的,我们就可以实现文件的隐藏、自删除以及自启动。

我们可以将一个程序运行后,就将它移动到一个不易发现的目录下(在我的下面的程序里是移动到回收站目录里),然后利用MoveFileEx,设置dwFlags为MOVEFILE_DELAY_UNTIL_REBOOT,使文件重启后移动到一个可以启动的目录下(对于中文的Windows XP操作系统,启动目录为

“C:\Documents and Settings\All Users\「开始」菜单\程序\启动”)。这样文件运行后便立即不在它运行时的目录了,实现了“自删除”功能。下次重启后,系统还没有被登陆,便已经将文件移动到了启动目录里。当用户登陆时,程序启动,随即被移到其他目录中,此时在启动文件夹里也已经没有了它的踪迹,所以通过正常的检查是看不出来文件到底在那里被启动的。整个过程只是调用了一个系统API,没有直接的写注册表。现在的主动防御和杀毒软件不会将这视为可疑操作。

下面是我编的一个示例代码,其中StartShell为后门函数,大家可以自己实现其功能.代码很简单大家一看就懂.

//得到启动目录

char szPath[100]={0};

::GetSystemDirectory(szPath,MAX_PATH);

char szDst[100]={0};

for (int i=0; i<3;i++)

szDst[i]=szPath[i];

strcat(szDst,"Documents and Settings\\All Users\\「开始」菜单\\程序\\启动\\test.EXE");

//得到当前程序名

TCHAR szCurPath[MAX_PATH];

memset(szCurPath, 0, MAX_PATH);

GetModuleFileName(NULL, szCurPath, sizeof(szCurPath)/sizeof(TCHAR));

if !(MoveFileEx(szCurPath,"c:\\RECYCLER\\FK.BAK",MOVEFILE_REPLACE_EXISTING)))//若是要在不同的volume下移动文件,需要设置为MOVEFILE_COPY_ALLOWED

::MessageBox(NULL,"第一次移动文件失败","test",MB_OK); if(!::MoveFileEx("c:\\RECYCLER\\FK.BAK",szDst,MOVEFILE_DELAY_UNTIL_REBOOT | MOVEFILE_REPLACE_EXISTING)){

::MessageBox(NULL,"移动文件失败","test",MB_OK); }

else printf("任务完成\n");

//创建并等待线程

// StartShell 为后门线程函数.

HANDLE hthread=::CreateThread(NULL,NULL,StartShell,NULL,NULL,NULL);

CloseHandle(hthread);

::WaitForSingleObject(hthread,INFINITE);

return 0;

四、补充与后记

一直以来都想写点技术上的东西,但却总是为各种各样的事情烦恼和忙碌着。我的四年的大学生活要结束了,我的爱情消逝了,我一直深爱着的人离开了,我也终于把这篇文章写完了。欲哭无泪,长歌当哭……(希望编辑不要删除我的话)

程序的缺点也是显而易见的:如果不登陆,程序在启动文件夹就不会运行,在服务器上应用价值就有问题了,因为服务器很多时间是不登陆状态的;程序必须放到与系统分区下,因为不同分区下正在运行的程序移动不了。

除了MoveFileEx函数MoveFileWithProgress函数也可实现一样的功能,所不同的是它提供了对文件移动过程信息的追踪,具体可以查下MSDN。

对于冰刃可以查看到移动后的程序路径,我们可以调用底层操作,强制删除正在运行的程序,这时在冰刃看到的程序路径是在根目录下,程序依然还在运行,没有什么影响。具体的大家可以自己实践。

本文并无什么特别高深的知识,只是给大家提供了个不同的思路,我的博客https://www.doczj.com/doc/4618239336.html,/hkralf, 欢迎大家与我共同讨论。

操作被占用的文件-unlocker机理分析

操作被占用的文件-unlocker机理分析

Posted on 2009-10-25 16:56 S.l.e!ep.¢% 阅读(343) 评论(0) 编辑收藏引用所属分类: RootKit

操作被占用的文件-unlocker机理分析

2009-10-11 21:54

========================================== ==========================

以下为转帖

[前言]

——————————————————————

之前给原作者发过邮件, 不过没能得到unlocker的源代码, 所以自己逆向了一份;

逆向的很匆忙, 因为近来事情太多, 而且unlocker本身也是版权所有, 所以不好做的太露骨;

本人也还有不少地方不是很明白, 有机会和我联系, 一起探讨:-)

感谢EagleNet的讨论.

[关于unlocker]

——————————————————————

Unlocker是一个免费的工具, 原作者的网站是: http://ccollomb.free.fr/unlocker

当使用者发现有某个文件或目录无法删除时, 只要按下鼠标右键中的"Unlocker",

程序会显示出是哪一些程序占用了该目录或文件, 接着只要按下"Unlock"就能够为你的文件解锁.

==============================Here we

start=================================

[大致流程]

——————————————————————

主程序Unlocker.exe通过ZwQuerySystemInformation查询当前系统的所有句柄信息, 然后调用OpenProcess获取目标进程句柄,

遍历当前所有进程, 根据进程ID, 得到此进程打开的所有句柄信息, 接下来用DuplicateHandle复制Handle到本地进程,

然后把文件句柄发给驱动UnlockerDriver5.sys进行名字的查询, sys将返回文件句柄对应的内核文件对象的完整名字.

确定文件名后, 如果要删除文件, 则调用OpenProcess与DuplicateHandle 关闭句柄, 然后ZwDeleteFile删除文件.

[UnlockerAssistant.exe]

[UnlockerHook.dll]

——————————————————————

UnlockerAssistant.exe主要是实现系统托盘等辅助功能, 同时安装钩子:

.text:00403AC9 public start

.text:00403AC9 start:

//...

.text:00403AD5 call sub_40391E

跟进, 能看到主要的实现代码:

.text:00403925 call sub_402E83

//...

.text:00403944 push offset LibFileName ; "UnlockerHook.dll"

.text:00403949 call ds:LoadLibraryA

//...

.text:0040398A push offset ProcName ; "HookInstall"

.text:00403994 call edi ; GetProcAddress

注册窗口消息, 初始化控件, 安装钩子;

.text:00403A1A call ds:Shell_NotifyIconA

.text:00403A20 call sub_40359E ;RegOpenKeyExA... 设置托盘图标, 写入注册表启动项;

.text:00403A69 push offset s_Hookuninstall ; "HookUninstall"

卸载钩子.

当然也有绿化版本只写入右键, 这些大家自己看反汇编的代码, 详细的钩子过程反汇编UnlockerHook.dll, 也不再做纠缠.

我们只看UnlockerHook.dll里一处:

.text:10001102 sub_10001102 proc near ;

//...

.text:10001181 call ds:GetModuleFileNameW

.text:1000118E call ds:PathRemoveFileSpecW

//...

.text:100011A7 push offset s_SUnlocker_exe ; "\"%s\\Unlocker.exe\""

//...

.text:100011E0 call ds:ShellExecuteExW

呼出主程序, 进行文件处理.

[UnlockerDriver5.sys分析] ——————————————————————

反汇编驱动文件, 跳到入口点:

INIT:00402000 ; int __stdcall start(PDRIVER_OBJECT

DriverObject,int)

INIT:00402000 public start

INIT:00402000 start proc near

//...

INIT:0040203D call ds:IoCreateDevice

//...

INIT:004020E3 call ds:IoCreateSymbolicLink

//...

上面就是DriverEntry了. 注意这一段:

INIT:004020AB mov dword ptr [ecx], offset loc_401000 INIT:004020B1 mov dword ptr [esi+40h], offset loc_401000

INIT:004020B8 mov dword ptr [esi+44h], offset sub_401090

INIT:004020BF mov dword ptr [esi+48h], offset loc_401020

INIT:004020C6 mov dword ptr [esi+34h], offset sub_401240

经典的, 处理MajorFunction[IRP_MJ_DEVICE_CONTROL*(sizeof PVOID)]等等.

我们跟踪这两个函数, 先跟sub_401240, 如下:

PAGE:0040124D call ds:RtlInitUnicodeString

//...

PAGE:00401257 call ds:IoDeleteSymbolicLink

//...

PAGE:00401265 call ds:IoDeleteDevice

很明显的DriverUnload函数;

接着跟sub_401090, 这个函数就是类似于DispatchControl(IRP_MJ_DEVICE_CONTROL)了;

我们挑关键的看, RtlInitUnicodeString函数填充UNICODE_STRING结构就不多做纠缠:

PAGE:004010FA call ds:ObReferenceObjectByHandle

获取由句柄描述的对象的指针, 也就是获取FILE_OBJECT对象;

这里, 想想内核级文件的Read和Write, 通过HANDLE执行就要先用ObReferenceObjectByHandle函数来获得Handle对应的FileObject,

然后我们再给FileObject发送IRP进行实质操作.

略过分配内存, 接着往下走:

PAGE:00401158 call ds:ObQueryNameString

这个函数将获取设备名, 然后和FILE_OBJECT的FileName构成完整的名字返回(应用层在注册表中保存设备名+目录名);

PAGE:00401214 call ds:ObfDereferenceObject

再一次调用ObfDereferenceObject, 将对象的引用计数器恢复到先前的值, 防止泄漏;

PAGE:0040122D call ds:IofCompleteRequest MajorFunction[IRP_MJ_CLOSE*(sizeof PVOID)], 完成操作.

回头看看这个驱动, 实际上是很经典也很简单的驱动程序, 实现的功能也很简单:

返回文件句柄对应的内核文件对象的完整名字, 传给主程序进行文件"删除""移动"等操作.

[Unlocker.exe分析]

——————————————————————

直接跳到入口点:

.text:004135FB public start

.text:004135FB start proc near

//...

.text:00413607 call sub_412EDC

跟进去, 挑重点:

.text:00412EEF call sub_40D1FF ; 命令行用法说明

.text:00412EFC call sub_40D78C ; 查询注册表

.text:00412F0C push offset Caption ; "Unlocker 1.8.5" .text:00412F11 call sub_413DEF ; 创建线程, 网络升级, 在线辅助

//...

.text:00412F1C mov ecx, eax

.text:00412F1E call sub_40FA79 ; 这里开始!

========================================== ===================================

我把sub_40FA79列出来(有省略), 如下:

.text:0040FA79 sub_40FA79 proc near ; CODE XREF: sub_412EDC+42 p

.text:0040FA79 push ebx

.text:0040FA7A push esi

.text:0040FA7B push offset LibFileName ; "ntdll.dll"

.text:0040FA82 call ds:LoadLibraryA

//...

.text:0040FA8E push edi

.text:0040FA8F mov edi, ds:GetProcAddress

.text:0040FA95 push offset ProcName ; "ZwQuerySystemInformation"

.text:0040FA9D push offset s_Zwqueryobject ; "ZwQueryObject"

.text:0040FAA7 push offset s_Zwdeletefile ; "ZwDeleteFile"

.text:0040FAB2 push offset s_Rtlinitunicod ; "RtlInitUnicodeString"

.text:0040FABD push offset s_Rtladjustpriv ; "RtlAdjustPrivilege"

.text:0040FAC8 push offset s_Ntloaddriver ; "NtLoadDriver"

.text:0040FAD3 push offset s_Ntunloaddrive ; "NtUnloadDriver"

.text:0040FAD8 push ebx ; hModule

.text:0040FAD9 mov [esi+14h], eax

.text:0040FADC call edi ; GetProcAddress

这一段的代码是unlocker的重点部分, 获取ntdll.dll地址后, 调用其中的函数: 1)ZwQuerySystemInformation函数获得系统当前所以进程的所建立的句柄及其相关信息;

2)ZwQueryObject获取句柄所代表对象信息, 查出目标文件(设备名+目录名);

3)ZwDeleteFile删除目标文件;

4)NtLoadDriver加载驱动, 当然还需要后面的注册表修改;

========================================== =================================

再往下:

.text:00412F9E call ds:PathRemoveFileSpecW

.text:00412FAB push offset s_SUnlocker_cfg ; "%s\\Unlocker.cfg"

.text:00412FB5 call ds:wsprintfW

//...

.text:00412FC2 call sub_40D3F4

跟进sub_40D3F4函数, 发现作用是将驱动信息写入注册表;

.text:00413008 push dword ptr [eax+8] ; lpFileName .text:0041300B call sub_410E28

//...

.text:004133E8 call ds:QueryDosDeviceA

//...

.text:004134B7 push offset s_DeviceLanmanr ; "\\Device\\LanmanRedirector"

.text:004134BC push eax ; LPWSTR

.text:004134BD mov [ebp+lpSrch], eax

.text:004134C0 call ds:wsprintfW

遍历查询DOS设备, 进行重定向;

.text:00413504 mov esi, ds:DialogBoxParamA

.text:0041350A mov edi, ds:GetModuleHandleA

//...

.text:00413529 call sub_411A59 //--->getfullname

创建一个对话框窗口, 显示所有枚举出的相关进程;

sub_411A59函数将获取对象文件的完整名, 并返回, 我们跟进去:

.text:00411F63 push dword ptr [esi] ; dwProcessId

.text:00411F65 mov edi, ds:OpenProcess

.text:00411F6B push ebx ; bInheritHandle

.text:00411F6C push 450h ; dwDesiredAccess .text:00411F71 call edi ; OpenProcess

之前是进程和模块遍历, 找到相关联的所有进程和模块, OpenProcess打开需

要操作的文件;

.text:00411F93 call ds:GetCurrentProcess

//...

.text:00411FA2 call ds:DuplicateHandle

获取本地进程, 将对象进程的句柄复制到本地进程(句柄进程相关);

.text:00411FBB push offset s_?Unlockerdriv ; "\\\\?\\UnlockerDriver5"

.text:00411FC0 call ds:CreateFileW

//...

将句柄发送给驱动程序, 驱动将返回文件句柄对应的内核文件对象的完整名字;

[文件操作选择]

——————————————————————

现在退出sub_411A59函数返回主线, 我们走到这里:

.text:00413536 cmp byte ptr [eax+3], 0

.text:0041353A jz short loc_41357B

.text:0041353A

.text:0041353C mov eax, cInitial

.text:00413541 test eax, eax

.text:00413543 jz short loc_413571 ; "移动"或者"重命名"操作;

.text:00413543

.text:00413545 xor ebx, ebx

.text:00413547 test eax, eax

.text:00413549 jbe short loc_41355F ; "删除"操作

这里将进行文件处理的选择, 是无动作? 删除? 还是移动? 重命名?

.text:0041353A jz short loc_41357B

//...

.text:0041357B xor ebx, ebx

.text:0041357D cmp cInitial, ebx

.text:00413583 jz short loc_4135AE

cInitial存放的值代表当前的窗口是否为初始窗口;

a)

我们先看是派生窗口时的处理, loc_4135AE:

.text:004135B5 push offset sub_412D62 ; lpDialogFunc //...

.text:00412DA4 push [esp+800h+hDlg] ; hDlg

.text:00412DAB call sub_412371 //-->toMoveFile

生成一个浏览对话框供选择路径保存文件:

.text:004123AB call sub_410064

//--->

.text:00410082 call ds:CoInitialize

.text:004100D6 call ds:SHBrowseForFolderW

.text:004100E4 call ds:SHGetPathFromIDListW

.text:004100F4 call ds:CoUninitialize

//<---

.text:004123DE call ds:PathIsDirectoryW

.text:0041242C call ds:GetSaveFileNameW

.text:00412451 call sub_4115AE //-->inject

实际上查看sub_412371这个函数的交叉引用(实际上你不用看引用也很容易就会发现), 会发现:

.text:00412478 sub_412478 proc near //-->GuiControlDeal 这里是一个对话框, 也就是我们右键unlocker时产生的界面, 它将生成

unlocker的主界面,

也将处理各种用户操作的消息, 发给各个子程序去处理;

回到:

.text:004135C7 call esi ; DialogBoxParamA

.text:004135CF call sub_410F86 //-->MoveFile

由于cInitial值为0, 所以此时必定是用户选择了"移动"或"重命名";

========================================== ===============================

跟进sub_410F86, 看到:

.text:00410F96 jnz loc_4110C2 ; 重命名

//...

.text:00411145 call esi ; wsprintfW

//...

.text:00411173 call edi ; SHFileOperationW

//...

.text:00411166 mov [ebp+FileOp.wFunc], 4 ;ReName

text:00411217 call edi ; SHFileOperationW

调用wsprintfW格式化路径后, 填充SHFILEOPSTRUCT结构, 由SHFileOperationW来重命名, 完成后调用MessageBoxA通知完成;

否则就是"移动"操作:

.text:00411048 call sub_410BB2 //-->getdirfile

//--->

.text:00410C20 call ds:FindFirstFileW

.text:00410C95 call ds:FindNextFileW

//<---

.text:00411064 call ds:MoveFileExW

.text:00411076 jnz short loc_41105F ; 循环移动目录下的所有文件

.text:00411093 jb loc_410FBF //-->deleteDir

//...

.text:004113E4 push eax ; int

.text:004113E5 mov eax, lpSrch

.text:004113EA push [ebp+var_8] ; int

.text:004113ED add eax, esi

.text:004113EF push eax ; lpExistingFileName .text:004113F0 call sub_410462 //-->movefile

到这里就完成了这两项功能, 不过注意函数里压栈时的参数:

.text:00411281 call getdirfile

//...

.text:00411302 push 4 ; MOVEFILE_DELAY_UNTIL_REBOOT

.text:00411304 lea eax, [ebp+NewFileName]

.text:0041130A push eax ; lpNewFileName

.text:0041130B push dword ptr [edi] ; lpExistingFileName

.text:0041130D call ds:MoveFileExW

这段代码的意思是, 如果暂时处理不了用户请求的文件操作, 那就在系统重新启动时实行操作;

========================================== ==============================

接着:

.text:004135DE cmp [ebp+var_9], 0

.text:004135E2 jnz loc_413514

返回, 重新获取文件的完整名, 重绘主窗口;

.text:004135E8 call sub_40D51D

.text:004135ED call sub_413B8F

ds:GlobalFree释放内存后, 调用了sub_40D51D, 它删除了注册表里的sys 服务, 然后sub_413B8F休眠, 继续等待操作触发;

b)

现在我们回到a)处, 考虑另一种情况, cInitial==1:

.text:00413586 push offset GuiControlDeal ; lpDialogFunc

.text:00413596 call esi ; DialogBoxParamA

//...

.text:00413568 push [ebp+hMem]

.text:0041356B call sub_41178F //--->CloseFileHandle

此时的文件操作是"删除"(或者"无动作");

sub_41178F函数的作用就是实现删除文件, 我们看:

.text:004117FB call ds:OpenProcess

//...

.text:0041180D call ds:TerminateProcess

//...

.text:00411819 cmp eax, 0FFFFFFFFh

.text:0041181C jnz loc_4119F8

判断目标文件是哪种类型文件, exe还是dll? 是exe则跳到loc_4119F8处;

.text:0041182E call ds:OpenProcess

//...

.text:00411868 call GetModuleFileNameExW

//...

.text:00411873 push offset s__dll ; ".DLL"

.text:00411878 push eax ; pszPath

.text:00411879 call sub_40FC27

文件是dll类型, 获取其路径;

.text:0041189F push offset s_SUS ; "/s /u \"%s\""

//...

.text:004118B3 mov [ebp+ExecInfo.lpVerb], offset s_Open ; "open"

.text:004118BA mov [ebp+ExecInfo.lpFile], offset s_Regsvr32_exe ; "regsvr32.exe"

//...

.text:004118DA call ds:ShellExecuteExW

先将模块注销掉, 使用regsvr32.exe /s /u实现;

.text:00411944 push offset s_Freelibrary ; "FreeLibrary" //...

.text:00411966 push offset s_Closehandle ; "CloseHandle"

然后通过FreeLibrary来释放, 调用GetModuleHandleW查询句柄后, 用CloseHandle将其关闭;

注意这一段代码:

.text:00411888 push 0Eh

.text:0041188A pop ecx

也就是说循环将进行0EH(14)次, FreeLibrary也将执行14次直到dll被释放;

原理图元件库的设计步骤(精)

原理图元件库的设计步骤 一. 了解欲绘制的原理图元件的结构 1. 该单片机实际包含40只引脚,图中只出现了38只, 有两只引脚被隐藏,即电源VCC(Pin40和GND(Pin20。 2. 电气符号包含了引脚名和引脚编号两种基本信息。 3. 部分引脚包含引脚电气类型信息(第12脚、第13脚、第32至第39脚。 4. 除了第18脚和第19脚垂直放置,其余水平放置。由于VCC及GND隐藏,所以放置方式可以任意。 5. 一些引脚的名称带有上划线及斜线,应正确标识。

二. 新建集成元件库及电气符号库 1. 在D盘新建一个文件夹D:/student 2. 建立一个工程文件,选择File/New/Project/Integrated Library,如:Dong自制元件库.LibPkg 3. 新建一个电气符号库,选择File/New/Library/Schematic Library,如:Dong自制元件库.SchLib 4. 追加原理图元件 在左侧的SCH Library标签中,点击库元件列表框(第一个窗口下的Add(追加按钮,弹出New Component Name对话框,追加一个原理图元件,输入8051并确认,8051随即被添加到元件列表框中。 三. 绘制原理图元件 1. 绘制矩形元件体 矩形框的左上角定位在原点,则矩形框的右下脚应位于(130,-250。 注意:图纸设置中各Grids都设为10mil。 2. 放置引脚 (1P0.0~P0.7的放置及属性设置 单击实用工具面板的引脚放置工具图标,并按Tab键,系统弹出【引脚属性】对话框: 【Display Name显示名称】文本框中输入“P0.0”; 【Designator标识符】文本框中输入“39”;

无法删除 文件:无法读取源文件或磁盘。是什么原因呢

在删除文件、文件夹时提示错误信息:“无法删除文件:无法读源文件或磁盘” 注消或重启电脑,然后再试着删除。 按Shift+Delete 进入“安全模式删除。 在纯DOS命令行下使用DEL,DELTREE和RD命令将其删除。 在任务管理器中结束Explorer.exe进程,然后在命令提示符窗口删除文件。 磁盘错误 运行磁盘扫描,并扫描文件所在分区,扫描前确定已选上修复文件和坏扇区,全面扫描所有选项,扫描后再删除文件。 防火墙: 由于反病毒软件在查毒时会占用正在检查的文件,从而导致执行删除时提示文件正在使用,这时可试着暂时关闭它的即时监控程序,或许可以解决。 借助WinRAR: 右击要删除的文件夹,选择“添加到压缩文件。在弹出的对话框中选中“压缩后删除源文件,”随便写个压缩包名,点确定。 或许你会遇到这样一种情况:电脑某硬盘里有一个文件夹经过多种方法的尝试都无法删除,在资源管理器里面删除的时候会有“无法删除文件:无法读源文件或磁盘”的错误提示,而在控制台下面用rd(rmdir)命令删除时,又提示“系统找不到指定的文件”,试用unixutil的unlink和rm也搞不定它。甚至尝试过检查文件系统是否存在问题,但是仍然没发现问题所在。这个文件夹的存在简直成为心腹之患,欲除之而后快。 下面以Windows XP为例,向朋友们介绍删除这样一种文件夹的有效方法 首先需要你了解和熟悉的操作命令: 如果要删除的文件夹或文件是隐藏属性的,删除时的命令为: rd /a 文件夹del /a 文件

假设删不掉的文件夹在“g:\delete”目录下面,则操作如下: 1、“开始”》》“运行”,在“运行”对话框中输入:cmd 2、在命令提示符中输入:g: --回车 cd \delete --回车手动将当前位置切换到“g:\delete”目录下面。 如果命令执行成功则闪烁的光标前面就会出现“g:\delete>”的提示符。 3、输入"dir /x"命令,然后按回车来运行命令。窗口中会显示delete目录下的所有文件、文件夹信息,在显示的各列信息中,倒数第二列为“8.3”格式的短名称。被截短名称一般情况下会以"~1"结尾。 4、选择你需要删除的文件或者文件夹的所在行,观看该行的倒数第二列,把它的文件、文件夹名称抄录下来,然后在“g:\delet e>”的提示符后输入命令: 如果是删除文件夹就输入:rd 文件夹(抄录)--回车如果是删除文件,就输入:del 文件(抄录)--回车 至此,应该可以成功地删除这样的文件或文件夹了! 不过,对于这样难以删除的文件夹,有一点是值得我们借用,就是用它来存放有用的资料而不用担心被轻易地删除掉!

单片机原理及应用期末考试试卷及答案

苏州经贸职业技术学院 2009-2010学年第二学期 《单片机原理及应用》期终试卷(A) 班级:姓名:学号:成绩: 一﹑填空题(将正确答案填在题干的空白处。1分×35=35分) 1、十进制数-47用8位二进制补码表示为:11010001B。 2、89C51含4KB Flash ROM,128B的RAM,在物理上有4个独立的存储器 空间。 3、若8031单片机的晶振频率fosc=12MHz,则振荡周期为1/12us ,状态周期为1/6us ,机器周期为1us ,执行MUL AB指令需要时间为4us 。 4、假定A=85H,R0=20H,(20H)=0AFH。执行指令:ADD A,@R0后,累加器 A的内容34H ,CY的内容1 ,AC的内容1 ,OV的内容1 。 5、假定DPTR的内容为8100H,累加器A的内容为40H,执行下列指令: MOVC A,@A+DPTR 后,送入A的是程序存储器8140H 单元的内容。 6、PSW中RS1 RS0=10H时,R2的地址为12H 。 7、ROM在物理上分为片内ROM 和片外ROM ,在逻辑上两者统一编址。 8、MCS-51单片机当EA=1时,首先使用的是片内程序存储器,存储容量超过4KB时开始使用外部程序存储器;EA=0时,则仅仅使用片外程序存储器。 9、MCS—51单片机访问片外存储器时,利用ALE 信号锁存来自P0 口的低8位地址信号。 10、欲使P1口的高4位输出1,而低4位不变,应执行一条ORL P1,#0F0H指令。 11、12根地址线可选4KB个存储单元,32KB存储单元需要15 根地址线。 12、设80C51 fosc=12MHz,定时器工作在方式0,则最大定时时间为8192μs。 13、异步串行数据通讯有单工、半双工和全双工共三种传送方式。 14、51单片机的中断系统最多可以有 2 个嵌套。 15、8031单片机指令MOV是访问内RAM ,最大范围为256B ,MOVX是访问外RAM ,最大范围为64KB,MOVC是访问ROM ,最大范围为64KB 。 二、单项选择(1分×15=15分) 1、MCS-51上电复位后,SP的内容是(B) (A)00H (B)07H (C)60H (D)70H 2、80C51是(C)

Prote原理图常用元件库及常用元件

Protel DXP 2004 原理图常用元件库及学用元件 提示:搜索元件时,特殊符号用“ *”号代替,在元件名称前与后分别加“ *”,可提高搜索可靠性。 元件库常用元件

Cap C? CB? 蜂鸣器 Buzzer 电容(无极性) 穿心电容器 Cap Feed 电容(有极性) Cap Pol2 MK? 麦克风 Mic 1 可调电容 Cap Var 电路熔断器 Circuit Breaker Circuit Breaker Cap Feed lOOpF Cap Pol2 lOOpF C? Cap Var lOOpF LS? R Buzzer C? Cap lOOpF

肖特基二极管 D Schottky 变容二极管 D Varactor D? * D Schottky D? -MH D Varactor 齐纳二极管 D Zener D? D Zener 隧道二极管 D Tu nn ell D? D Tunnell 保险管Fuse 1 F? 1 1 11 11 Fuse 1 铁芯电感In ductor Iron L? Inductor lion lOniH 可调电感In ductor Adj L? Inductor Adj IO111H

扬声器Speaker LS? Speaker 增强型N沟道MOS管M0SFET-2GN Q? M0SFET-2GN 增强型P沟道MOS管MOSFET-2GP Q? M0SFET^2GP 增强型N沟道MOS管(衬底有引出线)MOSFET-N3 i Lil M0SFET-N3 耗尽型N沟道MOS管 (衬底有引出线) MOSFET-N4 Q? 增强型P沟道MOS管(衬底有引出线)MOSFET-P3 Q? M0SFET-P3 NPN型光电二极 管 Photo PNP

文件夹删除不掉的几种解决方法

一、常规解决办法 1.注消或重启电脑,然后再试着删除。 2.进入“安全模式删除”。 3.在纯DOS命令行下使用DEL、DELTREE和RD命令将其删除。 4.如果是文件夹中有比较多的子目录或文件而导致无法删除,可先删除该文件夹中的子 目录和文件,再删除文件夹。 5.如果是在“添加或删除程序”选项卸载一个软件后,发现软件的安装目录仍旧存在,里边 残留着几个文件,直接删除时,系统却提示文件正在使用无法删除。 此时可首先打开“命令提示符”窗口,按“Ctrl+Alt+Del”组合键打开任务管理器,在进程中将“explorer.exe”进程关闭掉(在这之前最好将所有程序关闭掉),切换到命令提示符窗口, 使用DOS命令进入无法删除的文件夹,输入“Del 文件夹名”就可以将该文件夹删除了。删 除完成后,在任务管理器中选择“文件→新任务”,输入“explorer.exe”重新建立系统的外壳。 二、高级解决方案 1.磁盘错误 运行磁盘扫描,并扫描文件所在分区,扫描前确定已选上修复文件和坏扇区,全面扫描所 有选项,扫描后再删除文件。 2.预读机制 某些视频、图像文件播放中断或正在预览时会造成无法删除。在“运行”框中输入:REGSV R32 /U SHMEDIA.DLL,注销掉预读功能。或在注册表中删除[HKEY_ LOCAL_MACHINE \SOFTWARE\Classes\CLSID\{87D62D94-71B3-4b9a-9489-5FE6850DC73E}\InProcServ er32]键值。然后即可删除文件。 3.防火墙由于反病毒软件在查毒时也会导致执行删除时提示文件正在使用,这时可试着 停止或关闭它再删。 4.Office、WPS系列软件

单片机原理及应用在线考试试题答案

中国石油大学(北京)远程教育学院期末考核 《单片原理及应用》 说明:共100分,每题20分,在下题中任选5题。 1.MCS-51的时钟周期、机器周期、指令周期是如何分配的?当振荡频率为10MHz时,一 个机器周期为多少毫秒? 参考第二章第四节。MCS-51典型的指令周期为一个机器周期,每个机器周期由6个状态周期组成,每个状态周期由2个时钟周期(振荡周期)组成。一个机器周期=6×一个状 态周期=12×一个时钟周期=12× 答: 为使单片机能够完成取指、译码、执行指令等操作,需要为单片机提供时钟信号以产生必要的时序。单片机振荡电路中的振荡信号对应的周期叫振荡周期(时钟周期)。对振荡周期12分频后得到的信号周期叫做机器周期,即12个时钟周期,是1个机器周期。一个机器周期宽度为6个状态周期,并依次表示为S1~S6。每个状态周期由2个时钟周期(振荡周期)组成。Mcs51单片机的111条指令,执行时,所花费的时间,称为指令周期。 一个机器周期=6×一个状态周期=12×一个时钟周期=12×=12×1/10=1.2 us=0.0012ms 2.指出下列指令中画线的操作数的寻址方式? MOV R0, #55H ;立即寻址 MOV A, 2AH ;直接寻址 MOV A, @R1 ;寄存器间接寻址 MOV @R0, A ;寄存器寻址 ADD A, R7 ;寄存器寻址 MOVX A, @DPTR ;寄存器间接寻址 MOV DPTR, #0123H ;立即寻址 MOVC A, @A+DPTR ;基址加变址寻址 INC DPTR;寄存器寻址 参考第三章第二节指令寻址方式 3.外部RAM中从1000H到10FFH有一个数据区,现在将它传送到外部RAM中2500H单元 开始的区域中,编程完成上述功能。 参考第三章第三节数据传送类指令和第六章第二节外部存储器扩展 START: MOV R0,#00H MOV DPTR,#1000H LOOP: MOVX A,@DPTR MOV DPH,#25H MOVX @DPTR,A MOV DPH,#10H

Altium Designer10原理图常用库文件

原理图常用库文件: Miscellaneous Devices.IntLib Miscellaneous Connectors.IntLib PCB元件常用库: Miscellaneous Devices PCB Miscellaneous Connector PCB.PcbLib 部分分立元件库元件名称及中英对照 AND 与门 ANTENNA 天线 BA TTERY 直流电源 BELL 铃,钟 BVC 同轴电缆接插件 BRIDEG 1 整流桥(二极管) BRIDEG 2 整流桥(集成块) BUFFER 缓冲器 BUZZER 蜂鸣器 CAP 电容 CAPACITOR 电容 CAPACITOR POL 有极性电容 CAPV AR 可调电容 CIRCUIT BREAKER 熔断丝 COAX 同轴电缆 CON 插口 CRYSTAL 晶体整荡器 DB 并行插口 DIODE 二极管 DIODE SCHOTTKY 稳压二极管 DIODE VARACTOR 变容二极管 DPY_3-SEG 3段LED DPY_7-SEG 7段LED DPY_7-SEG_DP 7段LED(带小数点) ELECTRO 电解电容 FUSE 熔断器 INDUCTOR 电感 INDUCTOR IRON 带铁芯电感INDUCTOR3 可调电感 JFET N N沟道场效应管 JFET P P沟道场效应管原理图常用库文件:Miscellaneous Devices.IntLib Miscellaneous Connectors.IntLib PCB元件常用库: Miscellaneous Devices PCB Miscellaneous Connector PCB.PcbLib

Cadence 原理图库设计

Cadence原理图库设计 一.工具及库文件目录结构 Cadence提供Part Developer库开发工具供大家建原理图库使用。 Cadence 的元件库必具备如下文件目录结构为: Library----------cell----------view(包括Sym_1,Entity,Chips,Part-table) Sym_1:存放元件符号 Entity:存放元件端口的高层语言描述 Chips:存放元件的物理封装说明和属性 Part-table:存放元件的附加属性,用于构造企业特定部件 我们可以通过定义或修改上述几个文件的内容来创建和修改一个元件库,但通过以下几个步骤来创建元件库则更直观可靠一些。 二.定义逻辑管脚 在打开或新建的Project Manager中,如图示,打开Part Developer。 然后出现如下画面, 点击Create New,下图新菜单中提示大家选择库路径,新建库元件名称及器件类型。

点击ok后,Part Developer首先让大家输入元件的逻辑管脚。一个原理图符号可以有标量管脚和矢量管脚。 标量管脚在符号中有确定位置,便于检查信号与管脚的对应,但矢量管脚却可使原理图更简洁,适用于多位 总线管脚。 点击上图中的Edit,编辑器会让我们对首或尾带有数字的字符串的多种输入方式(A1; 1A; 1A1)进行选择,一但选定,编辑器即可对同时具有数字和字母的管脚输入进行矢量或标量界定。 管脚名首尾均不带数字的字符串如A; A1A则自动被识别为标量管脚。 按照元件手册决定管脚名称及逻辑方向,选择是否为低电平有效,点击ADD即可加入新的管脚。 (注:不论是标量或矢量管脚,均可采用集体输入,如在Pin Names栏可输入A1-A8, 1C-16C)

移动硬盘文件无法删除的解决方法

无法删除移动硬盘文件 文件名、目录名或卷标语法不正确的解决方法 以前电脑曾经出现过每次打开文件夹都会跳出一个窗口 显示文件名、目录名或卷标语法不正确的信息 网上找了很多资料都没有很好的解决办法 因为原因都是跟我不一样的 很多都是因为文件系统格式转换引起的 而我这个错误出现的是莫名其妙 后来看到一个帖子说系统可能存在着"以设备名命名的文件夹拒绝服务漏洞" 什么意思呢? windows系统有一个特点,就是在windows下无法以设备名来命名文件或文件夹,这些设备名有:aux,com1,com2,prn,con,nul。 但win2000(win xp)有个漏洞,可以让这一不可能成为可能。 如果你的操作系统是win2000或win xp,那么运行cmd.exe,用"md c:\con\\"命令可以建立一个和设备名con相同的目录。 而当你试图去删除这个目录的时候,就会出现刚才那个"文件名、目录名或卷标语法不正确"的窗口 虽然这个和偶电脑的症状不是很一致 不过还是提醒了我 把所有文件都显示后,在桌面上看到了一个隐藏的文件夹也叫桌面=_=,抱着怀疑的态度把这个文件夹给删了 果然系统恢复正常了! 当然引起这个症状的原因可能有很多,我的那种方法不一定能解决问题.但是如果遇到这种情况的话,可以试一下,看看有没有什么特殊的文件夹:),比如一些和系统的设备名称相同的或者像我电脑出现的那种叫桌面的文件夹什么的 有的话删掉试试看.当然不要彻底删除,放到回收站就行了,免得你丢了什么重要资料来找偶>_<. 好了,偶要说的就这么多了,遇到问题还是要靠多想多找 这里替baidu做个广告,有问题,baidu一下 无法删除??: 文件名,目录名或卷标语法不正确 一、常规解决办法: 1.注消或重启电脑,然后再试着删除。

单片机原理及应用考试题

《单片机原理及应用》试题库 一、填空题 1、MCS-51有个中断源,有个中断优先级,优先级由软 件填写特殊功能寄存器 加以选择。 2、MOV PSW,#10H是将MCS-51的工作寄存器置为 第 区。 3、用串口扩并口时,串行接口工作方式应选为方式 。 4、PC复位后为 。 5、PSW中RS1RS0=10时,R2的地址为 。 6、MCS-51中,T0中断服务程序入口地址为 。 7、80C51中断有 个优先级。 8、80C51中断嵌套最多 级。 9、MCS-51单片机访问片外存贮器时,利用 信号锁存来 自 口的低8位地址信号。 10、12根地址线可选 个存储单元,32KB存储单元需 要 根地址线。 11、三态缓冲寄存器输出端的“三态”是指 态、 态 和 态。 12、74LS138是具有3个输入的译码器芯片,其输出作为片选信号时,最多可以选中 块芯片。 13、A/D转换器的作用是将 量转为 量, D/A转换器的作用是将 量转为 量。 14、单片机系统复位后,PSW=00H,因此片内RAM寄存区的当前寄存器是第 组,8个寄存器的地址为 ~ 。 15、假定SP=60H,ACC=30H,B=70H,执行下列指令: PUSH ACC PUSH B 后,SP的内容为 ,61H单元的内容为 ,62H单元的内容为 。 16、假定SP=62H,(61H)=30H,(62H)=70H,执行下列指令: POP DPH POP DPL 后,DPTR的内容为 ,SP的内容为 。 17、单片机的数据通信方式有二种,即 方式和 方式,其中 方式传输距离较远,成本较低。 18、异步串行通信有 、 和 共三种传送

CAD原理图库部分

启动 Protel 99SE,用自己的名字建立一个设计数据库文件,在其中新建元件库子文件schlib1.lib,在该文档中创建下列新元件: (图中元件管脚长度为30mil(三格),每小格长度为10mil) 1、OPTOISO1图形如下: 2、TRANS5图形如下: 3、名为74139A 4.名为SCR3。 23 1

5.名为LF353A ; 3 2 1 8 4 6、名为bridge5,图中元件管脚长度为 20mil ; 01 7、名为bridge4,图中元件管脚 长度为20mil ,每小格长度为10mil ; 8、命名74LS000,图中元件管脚长度为30mil ,每小格长度为10mil ; 附图二:原理图元件74LS000 1 34 2 9.命名74LS138A ,图中元件管脚长度为30mil ,每小格长度为10mil ;

10. 元件 74LS138A 11. 原理图元件PLUS 12、原理图元件XTALB 13、元件命名为SCHOTTKY,图中每小格长度为10mil; 14、元件命名为CAP,图中每小格长度为10mil;

15、元件命名为PNP,图中每小格长度为10mil; 16、原理图元件VS A 17、在schlib1.lib库文件中建立样图所示的带有子件的新元件,元件命名为74ALS000,其中图中对应的为四个子件样图,其中第7、14脚接地和电源,网络名称为GND和VCC。

18、在schlib1.lib 库文件中建立样图3所示的的新元件,元件命名为P89LPC930。 19、schlibl.1ib 库文件中建立样图2所示的带有子件的新元件,元件命名为SN74F27D ,其中第7、14脚接地和电源,网络名称为GND 和VCC 。 20、在schlibl.1ib 库文件中建立样图3所示的新元件,元件命名为PICl6C61-04/P 。 20、在schlibl.1ib 库文件中建立样图2所示的带有子件的新元件,元件命名为CA258,其中第4、8脚接地和电源,网络名称为GND 和VCC 。 231U?A 74ALS000564 U?B 74ALS0008910U?C 74ALS0001112 13U?D 74ALS000

文件夹无法删除怎么办

1.结束进程后删除 2.重重启删除 3.进入安全模式删除 4.用超级兔子删除 5.用cmd命令强行删除 6.进DOS绝对行 一、常规解决办法: 1,注消或重启电脑,然后再试着删除。 2,进入“安全模式删除”。 3,在纯DOS命令行下使用DEL,DELTREE和RD命令将其删除。 4,如果是文件夹中有比较多的子目录或文件而导致无法删除,可先删除该文件夹中的子目录和文件,再删除文件夹。 5,在任务管理器中结束Explorer.exe进程,然后在命令提示符窗口删除文件。6,如果你有安装ACDSee,FlashFXP,Nero,Total这几个软件,可以尝试在这几个软件中删除文件夹。 二、高级解决方案: 1,磁盘错误 运行磁盘扫描,并扫描文件所在分区,扫描前确定已选上修复文件和坏扇区,全面扫描所有选项,扫描后再删除文件。 2,预读机制: 某些媒体播放中断或正在预览时会造成无法删除。在“运行”框中输入:REGSVR32 /U SHMEDIA.DLL,注销掉预读功能。或删除注册表中下面这个键值: [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\\InProcServer32]。3,防火墙: 由于反病毒软件在查毒时会占用正在检查的文件,从而导致执行删除时提示文件正在使用,这时可试着暂时关闭它的即时监控程序,或许可以解决。 4,OFFice、WPS系列软件: OFFice的非法关闭也会造成文件无法删除或改名。重新运行该程序,然后正常关闭,再删除文件。 5,借助WinRAR: 右击要删除的文件夹,选择“添加到压缩文件”。在弹出的对话框中选中“压缩后删除源文件,”随便写个压缩包名,点确定。 6,权限问题: 如果是2000和xp系统,请先确定是否有权限删除这个文件或文件夹。 7,可执行文件的删除: 如果可执行文件的映像或程序所调用的DLL动态链接库文件还在内存中未释放,删除时就会提示文件正在使用,解决方法是删除系统的页面文件,Win98中是Win386.SWP,Win2000/XP是pagefile.sys。注意要在DOS下删除。 8,文件粉碎法: 使用文件粉碎机,如File Pulverizer,可以彻底删除一些顽固文件。

单片机原理及应用试卷和答案(三套试卷和答案)

试卷一 一、填空题(20分,每小题2分) 1、-19D的二进制的补码表示为11101101B。 2、89C51含4KB掩膜ROM,128B的RAM,在物理上有4个独立的存储器空间。 3、通过堆栈操作实现子程序调用,首先要把PC 的内容入栈,以进行断点保护。调 用返回时再进行出栈操作,把保护的断点弹回 PC。 4、74LS138是具有3个输入的译码器芯片,其输出作为片选信号时,最多可以选中8 块芯片。 5、PSW中RS1 RS0=10H时,R2的地址为12H。 6、假定DPTR的内容为8100H,累加器A的内容为40H,执行下列指令: MOVC A,@A+DPTR 后,送入A的是程序存储器8140H单元的内容。 7、设SP=60H,片内RAM的(30H)=24H,(31H)=10H,在下列程序段注释中填执 行结果。 PUSH 30H ;SP=61H,(SP)=24H PUSH 31H ;SP=62H,(SP)=10H POP DPL ;SP=61H,DPL=10H POP DPH ;SP=60H,DPH=24H MOV A,#00H MOVX @DPTR,A 最后执行结果是执行结果将0送外部数据存储器的2410H单元。 8、在中断系统中,T0和T1两引脚扩展成外部中断源时,计数初值应当是(TH)=(TL)= 0FFH。 9、12根地址线可寻址4KB存储单元。 二、选择题(10分,每小题1分) 1、MCS-51响应中断时,下面哪一个条件不是必须的(C) (A)当前指令执行完毕(B)中断是开放的 (C)没有同级或高级中断服务(D)必须有RETI 2、执行PUSH ACC指令,MCS-51完成的操作是(A) (A)SP+1→SP,(ACC)→(SP);(B)(ACC)→(SP),SP-1→SP (C)SP-1→SP,(ACC)→(SP);(D)(ACC)→(SP),SP+1→SP 3、89C51是(C) (A)CPU (B)微处理器 (C)单片微机(D)控制器 4、关于MCS-51的堆栈操作,正确的说法是(C) (A)先入栈,再修改栈指针(B)先修改栈指针,再出栈 (C)先修改栈指针,再入栈(D)以上都不对

在Protel DXP中建造自己的原理图库

在Protel DXP中建造自己的原理图库 Protel DXP是Altium公司的桌面板级电路设计系统,它集原理图设计输入、PCB设计绘制、模拟电路仿真、数字电路仿真、VHDL混合输入、FPGA设计、信号完整性分析等诸多功能于一体,是非常优秀的EDA软件.Protel DXP提供了丰富的元器件库,这些元器件库主要是集成库和PCB库.Protel DXP没有单独的原理图库,原理图符号存在于集成库中.即使这样,在使用的过程中,有时也经常遇到需要的元器件原理图符号在Protel DXP自带的元器件库中找不到.这时就需要使用者自己绘制原理图符号或者下载所需的库文件.可是如果不进行存档,下次使用时又得重新绘制或者重新下载,麻烦不说,还要浪费很多时间.因此,把自己绘制的和从网上搜集到的原理图符号集中起来,建造一个属于自己的元器件原理图库文件就显得尤为必要.再有,把自己经常需要用到的Protel DXP原理图符号统一放在一个自己建造的Protel DXP原理图库文件中,既便于使用时查找,又便于平时对原理图库文件的管理.下面简单介绍一下如何在ProtelDXP建造一个属于自己的原理图库文件. 1 从现有的库文件中拷贝原理图符号 首先,启动Protel DXP在菜单中点击File→New→Schematic Library,新建一个原理图库文件.接着,保存文件,给它起一个有特色又能反应原理图库特点的名字,如“MySchLib”.然后,再打开一个含有想要添加元器件符号的Protel DXP自带的库文件,假如添加一个电阻元件符号,已知在"Miscellaneous Devices IntLib"集成库文件中含有电阻元件符号,那么就打开该集成库文件.由于是集成库文件,打开该文件时系统会给出“你想要释放这个集成库吗?”的信息.按“Yes”按钮,系统就会把原理图库文件“Miscellaneous Devices.SchLib”,从“Miscellaneous Devices.IntLib”集成库文件中抽取出来,添加到“Projects”面板中.接着,双击“Projects'’面板中“Miscellaneous Devices.SchLib”打开该文件,点击“SCH Library”面板标签,在该面板的“Component”中找到想要添加到自己新建的原理图库文件中去的元件名称.假如以添加电阻元件符号为例,找到“RES2”电阻元件,单击选中它.最后,拷贝该元件到自己新建的原理图库文件中,用Protel DXP的菜单命令:Tools→ Copy Component命令.执行该命令以后系统会出现对话框:在该对话框中单击鼠标,选中要拷贝的目的原理图库文件名,这里是“Myschlib.SchLib”,按“OK”按钮.这样就把电阻元件的原理图符号复制到了我们自己的库文件中. 2 从现有的原理图文件中提取原理图符号 如果你有现成的原理图文件,想把其中你需要的元器件原理图符号添加到自己的库文件中,可又找不到含有该原理图符号的库文件,而且又不想自己重新绘制.这种情况下,可以使用Protel DXP提供的一个由原理图生成原理图库文件的命令.此命令可以把当前打开的原理图文件中用到的所有原理图符号抽取出来,生成一个与当前打开的原理图文件同名的一个原理图库文件.这样一来,只要Protel DXP能打开的原理图文件,你就可以利用这个命令,把现有原理图中所需要的原理图符号抽取出来,用本文第一部分从现有的库中拷贝原理图符号的方法,添加到自己的原理图库文件中去.一般扩展名为“.SCHDOC”、“.SCH”、“.DSN”等的文件,Protel DXP可以直接打开.而且对于扩展名为“.DSN”的文件,用Protel DXP打开后就已经自动生成了原理图库文件,并且直接在Projects浮动面板中列出.由原理图生

单片机原理及应用在线考试(附答案)

一、单项选择题 1. 下面哪一种传送方式适用于处理外部事件( ) (A) 无条件传递进 (B) D MA (D) 查询 2. 在MCS-51 单片机中,需要软件实现中断撤销的是:( ) (A) 电平触发的外部中断 (B) 脉冲触发的外部中断 (D) 串行中断

3. 十进制数126其对应的十六进制可表示为()。 (B) 8E (C) 8F (D) F E 4. 在LED 显示中,为了输出位控和段控信号,应使用的指令是:( ) (B) M OV (C) M OVX (D) X CH

5. 在单片机中,通常将一些中间计算结果放在()中 (B) 程序存储器 (C) 数据存储器 (D) 控制器 6. MCS-51单片机的堆栈区应建立在()。 (A) 片内数据存储区 (C) 片内数据存储区的高128字节单元 (D) 程序存储区 7. CPU主要的组成部部分为( )

(A) 加法器、寄存器 (C) 运算器、寄存器 (D) 运算器、指令译码器 8. 串行口的移位寄存器方式为( ) (B) 方式1 (C) 方式2 (D) 方式3 9. 如在系统中只扩展两片Intel2732(4K×8),除应使用P0口的8条口线外,至少还应使 用P2口的口线( )

(B) 7条 (C) 8条 (D) 6条 10. INTEL 8051CPU是()位的单片机 (A) 16 (C) 4 (D) 准16 11. 20根地址线的寻址范围是( )

(A) 512KB (B) 640KB (D) 4096KB 12. 下列指令中错误的是( ) (B) J NC LOOP (C) M OV A,B (D) S UBB A,R0 13. 当需要从MCS-51单片机程序存储器取数据时,采用的指令为()。

如何强制删除文件

删除文件 怎样删除顽固文件(文件夹) 对于顽固的文件,可以新建一个文本文档,把以下内容复制进去: @echo off DEL /F /A /Q \\?\%1 RD /S /Q \\?\%1 echo 清除完成! echo. & pause 然后关闭点击保存,然后把文件的后缀名改为.bat(关键点)然后就可以把想要删除的文件拖入这个文件当中,最后再删除这个文件即可(此方法适用于一些无法读源文件的文件) [编辑本段] 如何删除顽固的文件(文件夹) 删除顽固文件的常规方法 方法1:重新启动Windows操作系统后,再按常规方式删除文件。 方法2:在DOS(或命令提示符)界面中用Del、Deltree之类的命令删除。 方法3:利用非Windows资源管理器的第三方工具删除,例如具有浏览文件夹功能的TotalCommander、acdsee、FlashFXP、nero等软件。 方法4:如果你安装了两个以上的操作系统,那么就可以在当前系统中删除其它操作系统的文件。 方法5:在启动时按F8键选择进入安全模式执行删除操作。 [编辑本段] 最好用的删除方法 很多杀软都有粉碎文件的功能,比如360,卡卡等。以360为例,打开36 0,在高级工具中,选择“文件粉碎机”,添加你要删除的文件,【记得要打上√】执行“粉碎选中文件”即可。 网上介绍了很多方法,我试了很多,只有这个我觉得是最好用的。 试试,最起码不需要再按照其他的软件了。 删除“其它程序正在使用”的文件 问题表现:

WindowsXP系统中,准备删除一个大容量的AVI格式文件,但系统却总是提示无法执行删除操作,有别的程序在使用,即使刚开机进入Windows系统时也是如此。 问题解决: 方法1:打开记事本,点击菜单栏“文件”→“另存为”,命名文件和你想删除的那个文件名一致(包括扩展名),而后进行替换,会发现容量变为0KB了。此时,执行删除命令即可。 方法2:在那个AVI文件同目录中新建一个文件夹,然后重新启动。现在,不要选那个AVI文件,先选择刚才新建的文件夹,然后再同时按Ctrl键+那个AVI文件,执行删除操作。 方法3:把AVI文件的扩展名改为其它任意无效的文件类型,再执行删除操作。 方法4:有一个一劳永逸的方法就是禁用WindowsXP的媒体预览功能,点击“开始”→“运行”,输入:“CMD”后回车。然后在“命令提示符”窗口下输入:regsvr32/ush media.dll 回车确认操作后将卸载视频文件的预览功能。以后在需要恢复视频文件预览功能时,在“命令提示符”中输入:regsvr32shmedia.dll命令即可。 方法5:启动曾播放过那个AVI文件的媒体播放器,打开另一个文件。此后,再尝试删除即可。 方法6:可用winrar程序删除,用鼠标右键单击那个AVI文件,在弹出菜单中选择“添加到压缩文件”,而后在弹出窗口的“常规”标签页中选择“压缩后删除源文件”复选框。确认操作后,执行压缩操作。最后再删除该压缩文件。 方法7:调出“Wind ows任务管理器”,在其中选择结束Explorer进程,但此时不要关闭该窗口。这时候,会出现像死机一样的状况。我们切换到“应用程序”标签页,点击“新任务”按钮,输入Explorer.exe并确认操作。此后,桌面又恢复正常了,再执行删除操作即可。 巧妙删除“非空文件夹”或“坏文件” 问题表现: 在WindowsXP系统下(NTFS分区格式),无论是在资源管理器还是用第三方工具都删除不了指定文件,例如用TotalCommander删除,先提示文件夹非空,确认后没任何反应。即使用DOS盘启动,加载ntfsfordospro可读写版本,也删除不了,提示说是“坏的文件名”,但是可以看到该文件夹。 问题解决: 这种情况下的文件无法删除很有可能是由于在NTFS格式下长文件名造成的。我们可以使用8.3格式缩小长度或更改路径中部分目录名以减少路径的长度。例如可以暂时把路径中某些目录改名字,或在命令行模式下使用8.3格式。例如,“LinuxFaq”

单片机原理及应用考试试卷及答案

一.填空题: 1.8051系列单片机字长是 8 位,有 40 根引脚。当系统扩展外部存储器或扩展I/O口时, P0 口作地址低8位和数据传送总线, P2 口作地址总线高8位输出, P3 口的相应引脚会输出控制信号。 2.当EA为低电平(接地)时,CPU只执行外部程序存储器或ROM 中的程序。 3.数据指针DPTR有 16 位,程序计数器PC有 16 位。 4.在MCS-51单片机中,一个机器周期包括 12 个时钟周期。 5.C51编译器支持三种存储模式,其中SMALL模式默认的存储类型为 data ,LARGE模式默认的存储类型为 xdata 。 6.欲使P1口的低4位输出0,高4位不变,应执行一条 ANL P1,#0F0H 命令。 7.8051单片机复位后,PC = 0000H 。 8. 74LS138是具有3个输入的译码器芯片,用其输出作片选信号,最多可在 8 块芯片中选中其中任一块。 9.单片机位寻址区的单元地址是从 20H 单元到 2FH 单元,若某位地址是12H,它所在单元的地址应该是 22H 10.MOV A,30H 指令对于源操作数的寻址方式是直接寻址。 11.在MCS-51单片机中,寄存器间接寻址用到的寄存器只能是通用寄存器R0、R1和 DPTR 。 12..程序状态字PSW中的RS1和RS0的作用是选择工作寄存器组

13.8051单片机,当CPU响应某中断请求时,将会自动转向相应规定地址(即中断入口地址)去执行,外部中断0入口地址为: 0003 H,T1入口地址为 0018 H。 14.变量的指针就是变量的地址。对于变量a,如果它所对应的内存单元地址为2000H,它的指针是 2000H 。 15.特殊功能寄存器中,单元地址()的特殊功能寄存器,可以位寻址。 16.interrupt m 是C51函数中非常重要的一个修饰符,这是因为中断函数必须通过它进行修饰。 17.Using n用于指定本函数内部使用的寄存器组,n的取值为 0~3 。18.消除按键盘抖动通常有两种方法:硬件消抖和软件消抖。 二、选择题 1、访问外部数据存储器时,不起作用的信号是( C )。 (A)RD(B)WR(C)PSEN(D)ALE 2、若开机复位后,CPU使用的是寄存器第一组,地址范围是( D )。 A、00H-10H B、00H-07H C、10H-1FH D、08H-0FH 3.MCS-51单片机的位寻址区位于内部RAM的( D )单元。 A. 00H—7FH B. 20H—7FH C. 00H—1FH D. 20H—2FH 4.访问片外数据存储器的寻址方式是( C )。 A、立即寻址 B、寄存器寻址 C、寄存器间接寻址 D、直接寻址

原理图元件库

1.在查找元件时,为了增加找到原理图元件的机会,在输入的元件名称中,最 好使用通配符 * 。 2.在字符串查找过程中,系统要寻找所有第一个字母为A的字符串的元件,应 该输入 A* 。 3.在查找元件时,可执行菜单命令工具/查找元件或点击元件库文件面 板上的【查找】按钮。 4.新建原理图元件必须在原理图库文件编辑器中进行。 5.制作一个原理图元器件首先要创建元件库。 6.在原理图库文件编辑环境下,“SCH Library”面板的功能是浏览元件库的 元件。 7.在自己建的原理图元件库文件中,要绘制一个新的元件符号,应执行 Tools/New Component(工具/新元件)菜单命令或单击“SCH Library” 面板上的 Add(追加)按钮。 8.启动元件库编辑器有两种方法,一种方法是打开已有元件库,另一种方 法是创建一个新的元件库。 9.原理图元件库编辑器工作区的中心有一个十字坐标轴,将工作区划分为4 个象限,一般在第四象限绘制原理图元件。 10.原理图元件库编辑器工作区的中心位置坐标为(0,0)。 11.通过原理图元件库编辑器的制作工具来绘制和修改一个元件图 形。 12.在原理图元件编辑环境中,“SCH Library”面板上包括“元件”区、“别 名”区、“引脚”区和“模型”区。 13.“Libraries(库文件)”面板上提供了元件库(Libraries)、查找

(Search

)和放置(Place) 三个工具按钮。 14.原理图元件库编辑管理器中除了主工具栏,还提供了绘制图形工具栏 和 IEEE 工具栏。 15.元件库编辑器里可以产生元件报表、元件库报表和元件规则检查 表。 16.在绘制直线时,可利用空格键切换直线的转角。 17.在绘制椭圆弧时第一次单击鼠标左键确定的是椭圆弧的圆心位置。 18.原理图元件由两部分组成:外形和引脚。 19.制作元器件时,为了画图形实体的外形,捕获网格的值可以按照需要 改动,但是在放置引脚之前,一定要改回 10 。 20.元件名称是为外形和引脚功能相同的元件取的一个通用名称。 21.当元器件绘制完成后,在原理图元件库编辑管理器中单击“元件”区的 “编辑”按钮可设置元件属性。 22.制作元器件符号时,要更改第一个元件名称必须选工具菜单中的重 新命名元件进行修改;要增加一个制作元件直接按【追加】按钮再修改名称。 23.在放置VCC和GND引脚时,在【电气特性】选项中应选择“Power”。 24.若放置与非门74LS00如图01所示功能单元,则在属性对话框中, Designator输入 U1 ;Part为 4 。 图01

如何在原理图中自建原理图库

Altium Designer6.9是Altium公 的桌面板级电路设计系统,它集原理图设计输入、PCB设计 制、模拟电路仿真、数 电路仿真、VHDL混合输入、FPGA设计、信 完整性分析等诸多 能于一体,是非常优秀的EDA软件.Altium Designer6.9提供了丰富的元器件 , 些元器件 要是集 和PCB .Altium Designer6.9没有单独的原理图 ,原理图符 在于集 中.即使 样,在使用的过程中,有时也经常遇到需要的元器件原理图符 在Altium Designer6.9自带的元器件 中找 到. 时就需要使用者自 制原理图符 或者 载所需的 文件.可是如果 进行 档, 次使用时又得 新 制或者 新 载,麻烦 说, 要浪费很多时间.因 ,把自 制的和从网 搜集到的原理图符 集中起来,建造一个属于自 的元器件原理图 文件就显得尤 必要.再有,把自 经常需要用到的Altium Designer6.9原理图符 统一放在一个自 建造的Altium Designer6.9原理图 文件中,既便于使用时查找,又便于平时对原理图 文件的管理. 面简单介绍一 如何在ProtelDXP建造一个属于自 的原理图 文件. 1 从现有的 文件中拷贝原理图符 首先,启动Altium Designer6.9在菜单中点 File→New→Schematic Library,新建一个原理图 文件.接着,保 文件, 它起一个有特色又能 原理图 特点的 ,如听MySchLib吭.然 ,再打开一个 有想要添 元器件符 的Altium Designer6.9自带的 文件,假如添 一个电阻元件符 , 知在"Miscellaneous Devices IntLib"集 文件中 有电阻元件符 ,那 就打开该集 文件.由于是集 文件,打开该文件时系统会 听你想要释放 个集 吗?吭的信息.按听Yes吭按钮,系统就会把原理图 文件听Miscellaneous Devices.SchLib吭,从听Miscellaneous Devices.IntLib吭集 文件中抽取 来,添 到听Projects吭面板中.接着, 听Projects'含面板中听Miscellaneous Devices.SchLib吭打开该文件,点 听SCH Library吭面板标签,在该面板的听Component吭中找到想要添 到自 新建的原理图 文件中去的元件 称.假如 添 电阻元件符 例,找到听RES2吭电阻元件,单 选中它.最 ,拷贝该元件到自 新建的原理图 文件中,用Altium Designer6.9的菜单命 Tools→Copy Component命 .执行该命 系统会 现对话框 在该对话框中单 鼠标,选中要拷贝的目的原理图 文件 , 是听Myschlib.SchLib吭,按听OK吭按钮. 样就把电阻元件的原理图符 复制到了 们自 的 文件中. 2 从现有的原理图文件中提取原理图符 如果你有现 的原理图文件,想把 中你需要的元器件原理图符 添 到自 的 文件中,可又找 到 有该原理图符 的 文件,而且又 想自 新 制. 种情况 ,可 使用Altium Designer6.9提供的一个由原理图生 原理图 文件的命 . 命 可 把当前打开的原理图文件中用到的所有原理图符 抽取 来,生 一个 当前打开的原理图文件 的一个原理图 文件. 样一来,只要Altium Designer6.9能打开的原理图文件,你就可 利用 个命 ,把现有原理图中所需要的原理图符 抽取 来,用本文第一部分从现有的 中拷贝原理图符 的方法,添 到自 的原理图 文件中去.一般扩展 听.SCHDOC吭、听.SCH吭、听.DSN吭等的文件,Altium Designer6.9可 直接打开.而且对于扩展 听.DSN吭的文件,用Altium Designer6.9打开 就 经自动生 了原理图 文件,并且直接在Projects 浮动面板中列 .由原理图生 原理图 文件的 体操作是 首先,打开原理图文件 然 ,使用菜单命 Design→Make Project Library,即可生 一个扩展 听.SCHLIB吭的和打开原理图 的原理图 文件. 3 自 制原理图符 可 直接打开自 的 文件,如 述中的听Myschlib.SchLib吭,然 通过菜单命 Tools →New Component,在 现的对话框中,输入想要建立元件符 的 ,再用图形工 进行

相关主题
文本预览
相关文档 最新文档