windows XP下的向量异常处理(Vectored Exception Handling)

【网络安全】DRIDEX木马巧用VEH混淆API调用流程 情报背景 DRIDEX是自2014年起活动至今的著名恶意银行木马家族,通常以OFFICE文档的方式进行文档钓鱼攻击。0xCERT的研究人员将其描述为精于防御规避的信息与凭据窃取恶意软件,利用众多C&C服务器令针对其的网络·封锁无能为力。DRIDEX在其历史行动中曾多次运用高级防御规避技术隐匿其恶意行为,其v4版本是第一个使用AtomBombing进程注入技术的恶意软件。 【学习资料】 而本文中将对其近期样本中利用向量化异常处理(VEH)机制混淆其API函数调用的手法进行分析研判,该手法对于动态静态分 阅读详情

原作:     Matt Pietrek


                                翻译改写: by Hume/CVC.GB
首先回顾一下(SEH)结构化异常处理,结构化异常处理用EXCEPTION_RETGISTRATION结构链起来的异常处理系统,那么当异常发生时,系统会遍历这个链,首先是链最前面的,系统会问:这个异常你处理吗?如果回答YES(通过返回EXCEPTION_CONTINUE_EXECUTION)的话,那系统就把控制权交给他,然后由其处理这个异常,返回到异常处理程序想返回的任何地方.如果通过返回EXCEPTION_CONTINUE_SEARCH回答:NO,let others do that! 系统就继续查找这个链,不厌其烦地问同样的问题和采取相同的处理原则.这个链最前面的EXCEPTION_RETGISTRATION是由fs:[0]处的一个dword指针指向的.具体细节还请参阅相关资料或我以前的<<seh In Asm研究>>.
让我们来看一下seh的缺点,就是最后安装的seh处理例程总是优先得到控制权,这有时并不是最好的解决方案,但确实是seh的工作机制,当然Final型的或称top型的(还记得吗,也就是通过
SetUnHandledExceptionFilter安装的)例外,因为他是不允许嵌套的.我们提到的是线程相关的也就是per_Thread类型的.为什么不是好的解决方案呢,让我们设想一下,假如你用两周写了一个异常完美的seh处理例程,能够完美处理所有异常,并希望异常全部由你来处理,但很不幸,比如你调用了一个外部模块,而这个模块自己安装了一个ugly的seh处理例程,他的动作是只要有异常发生就简单地终止程序...hmmm...!!!这意味着什么?你的两周工作全部付诸东流!又比如你想在你的加壳程序里面加密目标程序代码段,然后发生无效指令异常的时候用你自己安装的处理句柄来解密代码段继续执行,听起来这的确是一个好主意,但遗憾的是大多数C/C++代码都用_try{}_except{}块来保证其正确运行,而这些异常处理例程是在你壳注册的例程之后安装的,因而也就在链的前面,无效指令一执行,首先是C/C++编译器本身提供的处理例程或者程序其他的异常处理例程来处理,可能简单结束程序或者....天知道!
    在Xp下,Microsoft又提供了又一种异常处理,那就是VEH(Vectored Exception Handling),我译作向量异常处理,这个东东用如下api注册,类似于SEH,也是一个链状结构,让我们来看看他的不同之处,噫,好像差不多啊:
    WINBASEAPI PVOID WINAPI AddVectoredExceptionHandler(
    ULONG FirstHandler,
    PVECTORED_EXCEPTION_HANDLER VectoredHandler );
    FirstHandler:是一个标志,可以指定是否将你的VEH处理例程放在VEH链的最前面!=0,放在最后,其他放在最前
    VectoredHandler:这个东东是异常处理例程入口
    返回注册的VEH句柄,后面卸载的时候要用到.
    LONG NTAPI VectoredExceptionHandler(PEXCEPTION_POINTERS);
    PEXCEPTION_POINTERS是指向EXCEPTION_POINTERS的指针,和SEH中FINAL型的EXCEPTION_POINTERS的结构是一致的.
    正像你看到的,好像和Final型SEH处理差不多?不一样!区别如下:
    1)首先是AddVectoredExceptionHandler添加的异常处理句柄可以嵌套,而不是只能指定一个
    2)其次是AddVectoredExceptionHandler可以指定你的异常处理句柄是否在链的最前面,hoho,这可是我们期望的!当然如果在你后面有人调用AddVectoredExceptionHandler也作同样指定,那对不起,你只得在他后面了.
    相同之处在于:
    1)他们都是进程而不是线程相关的.
    2)若所有均不处理异常,最后系统要进行展开,不过不会调用VEH例程
    XP仍然支持SEH,那么问题来了SEH和VEH是什么关系,答案很简单,VEH优先权高于SEH,只有所有VEH全不处理某个异常的时候,异常处理权才会到达SEH.只要目标程序中没有利用VEH,你的VEH就是第一个得到控制者.嘿嘿,现在的采用SEH作为异常处理的普通C/C++程序对你不会再有干扰了!你可以用VEH来hook了,god!
    另外一个问题,如果有debuger怎么办?控制权转向又如何呢?不幸的消息来了,异常发生后首先通知的还是debugger,debugger不处理才返回控制权给VEH,[VEH不处理,返回给SEH,seh不处理,又给debugger一个机会,如果还不处理,才由系统处理.
    RemoveVectoredExceptionHandler 用来移除VEH处理句柄.是否需要看你的了,不过有一点必须注意,
    系统不会自动移除注册的VEH例程,如果指向的VEH例程所在exe或dll已经卸载,通常会导致严重错误.
    最后有一点要声明,在VEH回调处理例程中必须保护好寄存器,否则会引起莫名其妙的异常,
   下面是一个例子:
$
;============================================================
;asm ex,By Hume
;.............
.586
.model flat, stdcall
option casemap :none   ; case sensitive
include c:/hd/hd.h
include c:/hd/mac.h
;~~~~~~~~~~~~~~~~~~~protos
ASSUME  fs:nothing
;~~~~~~~~~~~~~~~~~~~~~~~~~
;;--------------
    .DATA
sztit   db "By Hume,2K2",0
    .DATA?
rd      hK32                    ;Kernel32模块地址
rd      hVec                    ;AddVectoredExceptionHandler函数地址
rd      hRemov                  ;RemoveVectoredExceptionHandler函数地址
rd      hvectorhandler1
rd      hvectorhandler2
;;-----------------------------------------
    .CODE
__Start:        
        __msg   begin Testing...
        mov     hK32,$invoke(LoadLibrary,CTEXT("KERNEL32.DLL"))
        JEAXZ   _err_1
        mov     hVec,$invoke(GetProcAddress,eax,CTEXT("AddVectoredExceptionHandler"))
        JEAXZ   _err_2
        mov     hRemov,$invoke(GetProcAddress,hK32,CTEXT("RemoveVectoredExceptionHandler"))
        JEAXZ   _err_2
                ;相当于invoke AddVectoredExceptionHandler,0,offset vEcp1
        sW32 hVec,0,offset vEcp1     ;First VEH
        mov     hvectorhandler1,eax
        sW32 hVec,0,offset vEcp2     ;Second....
        mov     hvectorhandler2,eax
        lea     eax,[esp-8]
        xchg    eax,fs:[0]
        push    offset sEh1
        push    eax
                                ;以上是安装VEH回调例程和
                                ;SEh回调例程
        pushfd
        or      dword ptr [esp],100h
        popfd
        nop                     ;Here Exception!->veh1
        nop
     @3:
        mov     esi,CTEXT("Good,Was Solved by VEH No 2")
        JMP     @F
     @1:
        INVOKE   MessageBox,0,CTEXT("Good,Was Solved by VEH No 1"),addr sztit,0
        xor     eax,eax
        mov     eax,[eax]       ;Here!->seh1      
        JMP     @1
     @2:
        INVOKE   MessageBox,0,CTEXT("Good,Was Solved by seh No 1"),addr sztit,0
        INT     3               ;VEH2
        JMP     @2
        ;--------------------------------------------
        ; 以下是简单错误处理
        ;--------------------------------------------
_err_1:
        mov     esi,CTEXT("Can't load DLL")
        jmp     @F
_err_2:      
        mov     esi,CTEXT("Can't Find function")
        @@:
_xit:
        INVOKE   MessageBox,0,esi,CTEXT("By Hume,2K2"),0
                        ;卸载所有的VEH和SEH处理例程
        pop     fs:[0]
        pop     eax        
        sW32 hRemov,hvectorhandler1
        sW32 hRemov,hvectorhandler2
    invoke ExitProcess,0
        ;=======================
        Assume  esi:ptr EXCEPTION_RECORD,edi:ptr CONTEXT
vEcp1   proc    USES esi edi ebx pExcetionPointers:DWORD
        mov     eax,pExcetionPointers
        mov     esi,[eax]               ;pEXCEPTION_RECORD
        mov     edi,[eax+4]             ;pCONTEXT
        ;call    dP
        xor     eax,eax
        test    [esi].ExceptionFlags,4+2+1    ;Unwind or serious
        JNE     @NO_HANDLE
        cmp     [esi].ExceptionCode,80000004h ;Single step
        JNE     @NO_HANDLE
        m2m     [edi].regEip,offset @1
        dec     eax             ;mov     eax,EXCEPTION_CONTINUE_EXECUTION        
@NO_HANDLE:                     ;mov     eax,EXCEPTION_CONTINUE_SEARCH              
        ret
vEcp1   Endp
        ;-----------------------------------------        
vEcp2   proc    USES esi edi ebx pExcetionPointers:DWORD
        mov     eax,pExcetionPointers
        mov     esi,[eax]               ;pEXCEPTION_RECORD
        mov     edi,[eax+4]
        ;call    dP
        xor     eax,eax
        test    [esi].ExceptionFlags,4+2+1    ;Unwind or serious
        JNE     @NO_HANDLE
        cmp     [esi].ExceptionCode,80000003h ;STATUS_BREAKPOINT
        JNE     @NO_HANDLE
        m2m     [edi].regEip,offset @3
        dec     eax              ;mov     eax,EXCEPTION_CONTINUE_EXECUTION  
@NO_HANDLE:                      ;mov     eax,EXCEPTION_CONTINUE_SEARCH        
        ret
vEcp2   Endp
        ;-----------------------------------------
sEh1    proc    USES esi edi ebx pExcept:DWORD,pFrame:DWORD,pContext:DWORD,pDispatch:DWORD
        mov     esi,pExcept
        mov     edi,pContext
        ;call    dP
        xor     eax,eax
        inc     eax
        test    [esi].ExceptionFlags,6+1         ;Unwind & Serious
        jne     @F
        cmp     [esi].ExceptionCode,0C0000005h  ;STATUS_ACCESS_VIOLATION
        jne     @F
        m2m     [edi].regEip,offset @2
        dec     eax        
@@:        
        ret
sEh1    endp
       ;Release assume
       Assume  esi:Nothing,edi:Nothing
;-----------------------------------------
        ;FOR    debug purpose,Rubbish,....you can del it!
.data
fmt     db "The Cur EIP IS: %08X   Cur Excpt NUM is: %08X",0dh,0ah
        db "The Ecpt FLAGS VALUE in HEX: %X",0dh,0ah
        db "Common REG DUMP:",0dh,0ah
        db "EAX: %08X       EBX: %08X",0dh,0ah
        db "ECX: %08X       EDX: %08X",0dh,0ah
        db "ESI: %08X       EDI: %08X",0dh,0ah
.code
                ;DUMP   THREAD CONTEXTS Need esi:pt Excpt_Record
                ;edi: pt Context
dP      proc                            
local   buf[256]:byte
        pushad
        mov     eax,(EXCEPTION_RECORD ptr [esi]).ExceptionFlags
        INVOKE   wsprintf,addr buf,offset fmt,(CONTEXT PTR [edi]).regEip,(dword ptr [esi]),eax,/
                        (CONTEXT PTR [edi]).regEax,(CONTEXT PTR [edi]).regEbx,/
                        (CONTEXT PTR [edi]).regEcx,(CONTEXT PTR [edi]).regEdx,/
                        (CONTEXT PTR [edi]).regEsi,(CONTEXT PTR [edi]).regEdi
        INVOKE   MessageBox,0,addr buf,CTEXT("VEH Detector...debug purpose...Hume"),0
        popad
        ret    
dP      endp
END __Start    
;==============================================================    
    下面附例子用到的几个宏:
    CTEXT,相信诸位见过多次了,不多说.
    sWin32:相当于push syntax call label
    rd:    数据定义DWORD
    m2m:   相当于push syn1 pop syn2
    JEAXZ  :eax=0,jmp des
    $incoke():inline coding
    详细请下载在我主页上的最新头文件
    revargs     MACRO args:VARARG
        LOCAL   target
        target     TEXTEQU <>      
    IFNB    <args>
       FOR     arg,<args>
           IFNB <arg>
           target     CATSTR <arg>,<!,>,target
           ENDIF
       ENDM          
       target     SUBSTR target,1,@SizeStr(%target)-1                
    ENDIF
    EXITM   target
        ENDM
        sWin32   Macro   label:REQ,args:VARARG      ;Which allow no protos discalaiming
        %    FOR pxx,<revargs(args)>    ;But you need to guarantee the
                   IFNB <pxx>            ;the syntax yourself
                     push pxx
                   ENDIF
                ENDM
                call  label
        ENDM
        m2m MACRO M1, M2                          ;mov is too boring!
              push M2
              pop  M1
        ENDM    
        $invoke Macro fun:REQ,args:VARARG
        IFNB <args>
           invoke fun,&args
        ELSE
       invoke   fun
        ENDIF
        EXITM <eax>
        ENDM
        rd   Macro label:REQ,count
            IFNB <count>
                    label dd &count dup(?)
            ELSE
                    label dd ?  
            ENDIF
        EndM
        JEAXZ    MACRO   Destination        ;Like JECXZ,for Convinient
                test  eax,eax
                je    Destination
        ENDM
                                                The way OF Hume,2002.7
                                                humewen@21cn.com
                                                humeasm.yeah.net
【G4基础08】GPS-2-Macro Commands宏命令 GPS-2 阅读详情

相关推荐

WRF替换静态地理数据中的土地利用数据(WRF替换下垫面数据)

   在进行自己的WRF项目模拟的时候,因为需要用中国土地利用数据替换WRF内嵌老旧的土地利用数据,故需要将土地利用进行替换。我使用的中国的土地利用数据是来自中国土地利用数据(1980-2015)。其中我以下载的lucc1980为例进行演示。 1、坐标转换    (1)下载的lucc1980数据如下图所示:    (2)在ArcMap中打开如下图所示: 打开属性表可以看到,lucc1980的坐标系为投影坐标系Krasovsky_1940_Albers,数据格式为GRID。这里需要将投影坐标系转换成地理坐

GIS 1万+

Windows 异常处理

windows 上的异常处理

最爱吹吹风 2117

单细胞拟时序分析实战:用monocle2从Seurat对象构建细胞轨迹(附完整代码)

本文提供了一套完整的单细胞拟时序分析实战教程,详细讲解了如何将Seurat对象转换为Monocle2的CellDataSet,并构建细胞命运轨迹。内容涵盖数据转换、轨迹定义基因选择、降维参数调优、可视化技巧及结果生物学验证,旨在帮助研究者解决实际分析中的常见问题,从静态细胞图谱中挖掘动态发育过程。

weixin_29251337的博客 342

Windows XP中的新型向量化异常处理

 到现在为止我已在Win32®平台上工作八年有余,在这期间里我积累了一些我所喜欢使用的Win32功能(从API层面上来说)。它们可以让我的编程生活更轻松,同时也让我更容易写出比较有用的工具。当我安装完Windows XPBeta(以前代号为“Whistler”)时,并没有指望能够看到许多新的API,结果却惊喜地发现我错了!在本月的专栏中,我就要讲述这些新增功能其中之一——向量化

8635

MobilenetV1、V2、V3系列详解

Mobilenet系列模型作为当前主流的端侧轻量级模型被广泛应用,很多算法都会使用其作为backbone提取特征,这一章对Mobilenet系列模型V1,V2,V3做一个总结。

turned的博客 1万+

搭建ipv6并发代理池

我开了个知识星球,把将本期搭建写成shell脚本已放到了里面,有需要的小伙伴可以自行去取,jd的参数,阿里bxet纯算、快手滑块,Pdd—Anti,ikuai,b站login之-极验3文字,某音ab,瑞数456vmp补环境等等,主要是某些大佬加我问成品,很多人都打着白嫖的手段去加我好友为目的,问完基本就以后没有任何的交集,这样的交好友雀氏没有任何意义。不如我直接开个星球,里面直接放我逆向的成品以及逆向的思路,这样大家各取所需,我也有点收益,意义更明确点,免得浪费大家的时间。我是pve下的ubuntu。

weixin_44697518的博客 1471

向量化异常处理

VEH : AddVectoredExceptionHandler(0,回调函数) LONG vehExceptionHandler(EXCEPTION_POINTERS* Exceptioninfo) VCH : AddVectoredContinueHandler(0,回调函数) LONG vchContinueHandler(EXCEPTION_POINTERS* Exception

mslieng1011的博客 1423

STC8H8K64U ADC采样实战:从蜂鸣器控制到电压测量(附完整代码)

本文以STC8H8K64U单片机为核心,通过两个实战案例详细讲解ADC采样的应用。首先介绍如何利用ADC采样值动态控制蜂鸣器响度,实现模拟PWM效果;其次深入探讨高精度外部电压测量的方法,包括硬件连接、两点校准技巧以及软件滤波,旨在帮助开发者从理论到实践全面掌握ADC功能。

weixin_29159441的博客 558

VEH+硬件断点实现无痕HOOK

文章目录hook的分类硬件断点hook原理设置硬件断点注册VEH代码实现VEH无痕Hook说说一路踩过的坑实际效果小结关于veh hook的对抗参考文章参考文章 hook的分类 hook方式有多种,这里做了一个系统性的总结对比,如下: 实际上第二种和第三种属于同一类型的hook,都是利用异常处理函数来处理,只是触发异常的方式不同 硬件断点hook原理 想要实现硬件断点hook,需要实现下面几个步骤 设置硬件断点 注册veh异常处理函数 编写异常处理函数,实现自己的hook代码 设置硬件断点 首先来说一

鬼手的博客 1万+

radsystems的激活(破解)和使用

上个文章讲述了radsystems的下载,但是只有30天的免费使用权,这篇文章将会讲解如何破解激活radsystems。注意:如果不想去官网下载的话,点击安装包的exe文件。不要急,打开我给你们的安装包,点击crack。如果提示done则完成(我的是激活过的)注意:这是8.7版本的。点击generate。

weixin_65144487的博客 3517

一张图讲透银行个人外汇业务逻辑和实操

个人外汇业务主要分为结售汇和外币兑换两类,前者满足日常跨境需求,后者因投机属性多数银行已暂停。业务核心是利用汇率波动实现货币兑换,满足支付或投资需求。交易涉及客户分类、主流币种、多种渠道和汇率计算规则,需区分直接/间接标价法判断汇率走势。银行通过"货币兑换"科目核算损益,采用期末折算确认盈亏。监管要求包括5万美元年度额度、合法渠道、真实性原则及大额申报等。随着跨境金融数字化发展,掌握基础逻辑和合规要求是安全参与外汇业务的关键。

银行信息系统应用架构详解 288

New Vectored Exception Handling in Windows XP

Matt Pietrek Download the code for this article: Hood0109.exe (67KB)

xiaoqiangvs007的专栏 1632

本地 AI 自由!OpenClaw+Ollama 双系统部署教程(Windows/Linux),零成本离线跑大模型

本文详细介绍了如何在Windows和Linux双系统中部署OpenClaw AI助手,并通过Ollama对接本地大模型实现完全离线使用。教程包含环境准备、OpenClaw安装配置、Ollama本地模型部署、系统对接等完整流程,特别强调隐私安全和零Token消耗的优势。针对不同操作系统提供具体命令,并给出常见问题解决方案,即使是新手也能快速搭建专属本地AI助手。最终实现的方案无需联网、无使用成本,且能保障数据隐私安全。

2501_93651177的博客 7230

VEN异常处理的HOOK方式winds平台(1)

*作者 **| 榴莲**编辑 **| RacelWindows操作系统中存在多种异常处理,我们现在需要的是其中的VEH(VectoredExceptionHandler)异常处理,也就是向量化异常处理。我们之所以可以使用VEH异常来进行HOOK的主要原因,在于两点。其一,VEH异常处理的优先级是高于SEH异常处理的,也就是说可以先手拿到异常,确保不会被其他异常处理流程将异常截获而导致HOOK失败。

wangluoanquan111的博客 484

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

VEH和VCH科普

本文转自梦织未来(www.mengwuji.net) 地址:http://www.mengwuji.net/forum.php?mod=viewthread&tid=1371 作者:mengwuji 很久没发帖子了,痛苦的失眠,就顺便来讲讲VEH这玩意儿。 一般,再好的程序员,也不能说自己写出的代码是没bug的、执行后不会产生异常。所以呢,好的程序员总会在可能认为会出现异常问题的那段代码加

mqzzqian的专栏 5301

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Windows核心编程笔记(十九) SEH结构化异常处理_未处理异常及向量化异常

UnhandledExceptionFilter函数详解  BaseProcessStart伪代码(Kernel32内部) void BaseProcessStart(PVOID lpfnEntryPoint) //参数为线程函数的入口地址 { DWORD retValue; DWORD currentESP; DWORD exceptionCode;

春暖花开 3863

VC中的异常处理

在读《软件调试》的十一章时,感受到异常处理在VC中是十分重要的。以前自己写代码或者是看身边的人写的代码都很少用到异常处理,但最近在工作中会接触到老外牛人写的代码,几乎在每个关键的代码块都提供了异常处理,虽然在这些异常处理代码中只是简单的将异常的相关信息写入Event Viewer,但这已经对我们找到bug和了解系统运行情况提供了很大的帮助。于是乎我把学习这一章的心得总结出来,供大家分享。 ...

wodamazi 281

Windows异常处理

异常机制,就是为了让计算机能够更好的处理程序运行期间产生的错误,从编程的角度来看,能够将错误的处理与程序的逻辑分隔开。使得我们可以集中精力开发关键功能,而把程序可能出现的异常统一管理。 Windows提供了异常处理的机制,使得你有机会挽救自己即将崩溃的程序,大体上来说它提供了以下处理异常的机制: SEH-结构化异常处理 VEH-向量化异常处理 VCH-向量化异常处...

liaozhilong88的博客 944

逆向基础-Windows异常

Windows异常机制

AppWhite_Star的博客 1251

VEH,VCH,UEF Windows向量化异常处理机制详解

最近在搞的SR,因为涉及到Windows下的异常处理机制

MyCserSoft的专栏 6791

WIN10使用VEH+硬件断点实现不修改代码完成破解

为什么要使用硬件断点? 有些程序会启动一个线程,实时检测代码节是否被修改,这样可以防止作弊者使用OD调试程序时下CC断点,这种技术叫全代码检测或CRC检测。为了绕过这种检测,大佬们想出了很多办法: 干掉CRC线程 干掉CRC函数的判断 绕过CRC检测的位置,到更底层去修改 硬件HOOK 其他HOOK,欺骗CRC检测函数(虚表HOOK) 干掉退出函数(ExitProcess) 本文介绍的是硬件断点(硬件HOOK)。 硬件断点原理 当执行到某个指令,DR0寄存器中存储了这条指令的地址,就会触发异常。如果使用

hambaga的博客 5021

游戏逆向-2.2VEH+软件/硬件断点实现hook

这里设置4个硬件断点后,还可以通过int 3实现软件断点,软件断点的优点在于只破坏一个字节,同时理论上可以下无限多个hook,而硬件断点只限制在四个,当然除了int 3等,还可以通过设置Page_NoAccess达到异常hook,文章中就不再讲述另外的异常hook,如读者有兴趣了解更多可以自行补充,另外上一章的inline hook和软件断点将会留在2.3章实战中演示具体操作。

qq_41709308的博客 5089

java的异常笔记

抛异常的一些规范: 1、catch里面一定要至少写一些标记,便于异常排查 2、catch中抛出和记录最好只写一种(throw 和 log) 3、抛出自定义异常时,除了字符的信息外,要带着具体的异常栈(也就是e,便于错误排查) 4、关闭资源不要放在try块中,可以放到finally块中,JDK7之后可以将要监控的代码放入try后的括号中,jdk会自动关闭资源 5、抛的异常尽可能写的具体 6、自定义异常加一些注释 7、多个catch块要优先把更具体的异常放在最上面,因为捕获到一个异常后后面就不执行了 8、不要捕

Liar_27的博客 758

c++调试异常的另类神技

1.当c++代码写多的时候,莫名其妙的崩溃,或者报异常。还找不到原因,那下面就用用下面的方法来找错误。 在c++项目的入口点加入 AddVectoredExceptionHandler(NULL, VectoredHandler); 然后写一个方法: LONG CALLBACKVectoredHandler(PEXCEPTION_POINTERS pExceptionInfo) { ...

biyusr的专栏 699
上一篇: SEH IN ASM 研究(3)
下一篇: 数据恢复(1)
Matrix_Designer
博客等级 码龄16年 58粉丝 296原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值