刚学完汇编语言,就想试着去反汇编一个程序,后来就分析了RtlZeroMemory这个函数的工作原理了,并没有去仔细考究,只是分析了下流程,有分析不当或者遗漏的地方请慷慨指教

RtlZeroMemory作用是用0来填充一块内存区域

有两个参数,第一个参数指向一块准备用0来填充的内存区域的开始地址;第二个参数是准备用0来填充的内存区域的大小



下面开始调试分析这个函数的工作流程,


首先在代码中调用这个函数

 


反汇编调用过程

 

 push内存区域的大小,push内存区域的开始地址,然后call RtlZeroMemory函数 , 典型的stdcall的调用方式

 

接着跟进这个RtlZeroMemory这个函数内部

 

77EA3C10就是函数的入口地址了

首先他将内存区域的开始地址mov到edi中 , 然后将内存区域的大小mov到ecx中 , 这两部操作就是为了进行关键操作 用0填充内存区域 的步骤

用0填充内存区域后 or ecx, edx 初步分析是检验填充操作是否成功进行完全,因为是以dword为单位进行操作的,考虑到dword非内存区域大小的倍数的话会有遗漏

所以再去以byte为单位进行填充

 

我只是说了一下流程,并没有讲解每一条指令的原因作用,也没有对算法进行讲解 ,如果有对分析看不懂得地方或者想要知道算法过程的朋友可以留言和我交流