金沙国际官网_金沙国际平台登录

因为这个金沙国际官网_金沙国际平台登录网站与很多的大型澳门赌场都有合作,金沙国际官网_金沙国际平台登录尽职尽责,高效执行,保持好奇心,不断学习,追求卓越,点击进入金沙国际官网_金沙国际平台登录马上体验吧,所以现在也正式地开始了营业。

您的位置:金沙国际官网 > 金沙国际平台登录 > 用CRT查找内存泄漏,控制文件描述符

用CRT查找内存泄漏,控制文件描述符

发布时间:2019-11-02 09:14编辑:金沙国际平台登录浏览(172)

      装好kali 2.0后直接运行msfconsole

    原文地址:

    引用原文地址

    msf> db_status
    postgres selected, no connection
    

    linux下安装Oracle 一般都会修改/etc/security/limits.conf这个文件,但是这里面的具体含义未必每个人都会,刚开始我也不是很清除,只知道要修改,每次安装按照文档配置就可以了。今天看到一篇文章的介绍,特记录一下,加深一下理解。

      百度到的解决方法多是针对BT和kali 1.0的,在kali 2.0中并不可行。

    linux limits.conf 配置 limits.conf 文件实际是 Linux PAM(插入式认证模块,Pluggable Authentication Modules)中 pam_limits.so 的配置文件,而且只针对于单个会话。

     

      正确的方法如下,回到shell中执行:

    limits.conf的格式如下:

    1. 在program中严格按下面顺序include

    # service postgres enable
    # service postgres start
    # msfdb init    (关键步骤)
    Creating database user 'msf'
    Enter password for new role: 
    Enter it again: 
    Creating databases 'msf' and 'msf_test'
    Creating configuration file in /usr/share/metasploit-framework/config/database.yml
    Creating initial database schema
    

    username|@groupname type resource limit

      1 #define _CRTDBG_MAP_ALLOC
      2 #include <stdlib.h>
      3 #include <crtdbg.h>
    

      Bingo!

    username|@groupname:设置需要被限制的用户名,组名前面加@和用户名区别。也可以用通配符*来做所有用户的限制。

     

    type:有 soft,hard 和 -,soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值。soft 的限制不能比har 限制高。用 - 就表明同时设置了 soft 和 hard 的值。

    2. 必须是Debug版的build

    resource:

    Q : LiteServer遍Debug可能会遇到一些问题

    core - 限制内核文件的大小

    A : 可以用来验证Memcheck是否有误报。

    date - 最大数据大小

        可以在对应的地址处下断点(会频繁断在malloc上,需要根据size下条件断点)

    fsize - 最大文件大小

    Q : code在Release和Debug版下可能会不一样,最后可能会出现一个有memory leak一个没有

    memlock - 最大锁定内存地址空间

     

    nofile - 打开文件的最大数目

    3. "#define _CRTDBG_MAP_ALLOC"这个宏不能省略,否则memory leak的dump会缺少一些细节(如leak的code位置信息)

    rss - 最大持久设置大小

     

    stack - 最大栈大小

    4. 在app exit前,可以调用这个function打印memory leak report

    cpu - 以分钟为单位的最多 CPU 时间

    _CrtDumpMemoryLeaks();

    noproc - 进程的最大数目

    Q : 如果是全局或静态obj,在exit前其还未释放,此时report不会造成误报吗?

    as - 地址空间限制

    A :不会

    maxlogins - 此用户允许登录的最大数目

     

    要使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中。查看 /etc/pam.d/login 文件中有:

    5. 如果app有多个exits,你是不需要call _CrtDumpMemoryLeaks()在每个exit位置的。在app开始的位置call下面这个_CrtSetDbgFlag(),其会自动在每个exit的位置自动call _CrtDumpMemoryLeaks()

    session required /lib/security/pam_limits.so

    _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

    按下面说的,可以用ulimit -n 32768设置最大描述符,不过只对当前会话有用,而且要root,这个不好办

     

    或者修改/etc/security/limits.conf,但要重启

    6. 默认情况下,memory leak的report会在VS Studio Debug窗的Output窗口中,可以用_CrtSetReportMode()将其重定向到其他位置。

    另外,没查到linux究竟最大描述符有没有限制,其他几个限制要不要改

     

    7. Report格式

    如何限制和监视用户

    Detected memory leaks!
    
    Dumping objects ->
    
    c:usersusernamedocumentsprojectsleaktestleaktest.cpp(20) : {18}               //{18} : memory分配序号 
    
    normal block at 0x00780E80, 64 bytes long.                                         //64 bytes : block的大小(并不是分配时指定的大小,因为分配的heap由于会添加堆头堆尾等额外信息,会比分配时指定的size要大) 
    
    Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
    
    Object dump complete.
    
     
    

    PAM 大多数的LINUX都内建了PAM支持。PAM的一个功能是系统环境设置,例如设置某个用户允许使用的系统内存大小等。在Red Hat和Caldera这

    Q : 发现即使按照第一条中的定义,也不会输出memory leak的行信息。

    两个发行版本的 /etc/security/ 目录下包含了许多可配置文件。最有趣的当属 /etc/security/limits.conf 文件,它允许你定义用户或用户

    A : 这个crtdbg对new处理不好,其block的地址只会new调用macro的地址,可用如下宏DBG_NEW来替代new,以打印出对应的行信息

    组规则,规则是“软(soft)”或“硬(hard)”,规则的内容(如CPU、内存、最大文件大小等)。例如:

    #ifdef _DEBUG
    
        #define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
    
        // Replace _NORMAL_BLOCK with _CLIENT_BLOCK if you want the 
    
        // allocations to be of _CLIENT_BLOCK type 
    
    #else
    
        #define DBG_NEW new
    
    #endif
    

    *    hard    core    0

     

    bob    soft    nproc    100

    Q : 需要替换所有的源码,而且第三方库怎么办?

    bob    hard    nproc    150

    Q : 没有栈回溯信息,多层调用怎么查找源头信息?

    第一行规则禁止所有人产生core文件,第二行规则(软)定义用户bob的最大进程数为100, 第三行规则(硬)定义用户bob的最大进程数为150

    A :  Debug,在app入口断下后,在watch窗口输入"_crtBreakAlloc"(如果"Runtime Library"是"/MD",则还需要添加"{,,ucrtbased.dll}_crtBreakAlloc"),这个值应该是"-1",修改成detect到的memory leak的分配序号(如7中的{18}),当分配该大小的memory时就会断下来(注意,重跑后的条件要和第一次获取分配序号的一致)。

    。可以超出软规则的限制(警告),但不 能超过硬规则的限制。你可以想像得到,这些规则定义到所有用户的登录SHELL和FTP等服务 时是很

        另外,在code中也可以直接指定:

    有帮助的。

    _crtBreakAlloc = 18;
    
        or :
    
    _CrtSetBreakAlloc(18);
    

    Bash

     

    Bash内建了一个限制器"ulimit"。注意任何硬限制都不能设置得太高,因此如果你在/etc/profile或用户的 .bash_profile (用户不能编辑或

    8. Test

    删除这些文件)中定义了限制规则,你就能对用户的Bash shell实施限制。这对于缺少PAM支持的LINUX旧发行版本是很有用的。你还必须确保

    1> code

    用户不能改变他们的登录shell。限制的设置与PAM相似。例如:

    #include <memory>
    
    std ::tr1 ::shared_ptr <int >   sp_nTest;
    
    void  Test ()
    {
          sp_nTest. reset( new int( 0x88));
    
          //memory leak
          int*  pnTest = new int( 0xCC);
    
          void* pMalloc = malloc( sizeof( int));
    }
    

    ulimit –Sc 0

     

    本文由金沙国际官网发布于金沙国际平台登录,转载请注明出处:用CRT查找内存泄漏,控制文件描述符

    关键词: