zoukankan      html  css  js  c++  java
  • Release+非MFC不能使用VERIFY如何产生中断

    网上看到有些人是自己封装了一些中断函数,比如调用__asm{INT 21H};等。
    突然想到,可以直接用C++语言本身提供的try..catch语句啊。FOOL -.-

    写了一个测试类:

    #pragma once
    
    #include <windows.h>
    #include <iostream>
    using namespace std;
    
    class CTestClass
    {
    public:
        CTestClass(UINT64 qwPosBegin, UINT64 qwPosEnd)
        {
            try
            {
                INT64 qwSize = (INT64)(qwPosEnd - qwPosBegin);
                if(qwSize < 0)
                    throw qwSize;
    
                m_qwPosBegin = qwPosBegin;
                m_qwPosEnd = qwPosEnd;
                m_qwSize = m_qwPosEnd - m_qwPosBegin;
            }
            catch(INT64 &qwSize)
            {
                const int BUF_LEN = 100;
                WCHAR szBuff[BUF_LEN] = {0};
                swprintf(szBuff, BUF_LEN, L"Segment length is negative! Value: %I64d", qwSize);
                ::MessageBoxW(NULL, szBuff, L"Error", MB_OK|MB_ICONERROR);
    //delete this; } }
    ~CTestClass() { cout<<"This is Destruct Method"<<endl; m_qwPosBegin = 0; m_qwPosEnd = 0; m_qwSize = 0; OutputInfo(); } void OutputInfo() { cout<<"Pos Begin: "<<m_qwPosBegin<<endl; cout<<"Pos End: "<<m_qwPosEnd<<endl; cout<<"Segment Len: "<<m_qwSize<<" "<<endl; } private: UINT64 m_qwPosBegin;//using UING64 instead of INT64 to contain as more data as possible UINT64 m_qwPosEnd; UINT64 m_qwSize; };

    调用代码:

    void main()
    {
    #define SAFE_DELETE_OBJECT(obj) if(obj) { delete obj; obj = NULL;}
    
        CTestClass* obj1 = new CTestClass(10, 100);
        if(obj1)
            obj1->OutputInfo();
    
        
        CTestClass* obj2 = new CTestClass(100, 10);
        if(obj2)
            obj2->OutputInfo();
    
        SAFE_DELETE_OBJECT(obj1);
        SAFE_DELETE_OBJECT(obj2);
    
        system("pause");
    }

    测试输出结果:

    Pos Begin:      10
    Pos End:        100
    Segment Len:    90

    Pos Begin:      13451671603782742029
    Pos End:        13451671603782742029
    Segment Len:    13451671603782742029

    This is Destruct Method
    Pos Begin:      0
    Pos End:        0
    Segment Len:    0

    This is Destruct Method
    Pos Begin:      0
    Pos End:        0
    Segment Len:    0

    请按任意键继续. . .

    一点解释:throw之后就会跳出整个try块,因此可能出问题的代码要写在最前面--所谓“要写异常安全的函数”  呵呵 有歧义 这里的"异常"是“Exception” n. ,而非“Extraordinary” adj. 的意思 -.-

  • 相关阅读:
    Centos 6.8安装配置KVM
    使用明小子进行网页渗透测试-XYCMS企业建站系统2.3(鑫跃教育)
    VSFTP2.3.4(笑脸漏洞)渗透测试
    MS08_067smb漏洞利用渗透测试
    css基本概念与css核心语法介绍
    HTML块级、行级元素,特殊字符,嵌套规则
    网页DIV+CSS布局与ifame传统布局对比
    html基本标签表单实现交互原理,单选框,复选框,下拉框介绍
    HTML基础标签图片文本超链接列表表格介绍
    html网页基本结构
  • 原文地址:https://www.cnblogs.com/tupx/p/3485306.html
Copyright © 2011-2022 走看看