在GitHub上看到了一个利用SilentProcessExit机制dump内存的项目,于是学习了一下,于是今天来聊一聊利用SilentProcessExit机制dump内存,首先我们知道,在程序崩溃时或者系统崩溃时会产生崩溃后的文件...而这种调试技术,可以派生 werfault.exe进程,可以用来运行任意程序或者也可以用来转存任意进程的内存文件或弹出窗口。若派生新进程的话其进程树如下: ?...而利用这种机制,我们便可以用它来转储任意进程的内存,比如对我们比较有用的lsass进程。在这之前我们来看看如果想要做这些操作需要如何实现。...另外就是第二个注册表,这个主要是设置dump内存的一些细节问题,比如dump的位置、崩溃后操作的类型,这类选择的是LOCAL_DUMP,即0x2也就是为导致终止的进程和终止的进程创建一个转储文件,而需要注意的是...而该方法的字符串问题,可以用我之前写的C++库来实现。 ? 而该方法也支持权限维持,就不展开来说了。
dump文件传输到本地进行分析, 常常需要大量的等待时间。 使用IBM的eclipse的MAT工具可以直接在服务器上进行快速DUMP分析。...运行环境要求 linux操作系统 JDK8 以上 下载MAT的linux版本 Eclipse的MAT工具下载链接 MAT支持各种操作系统,找到Linux版本下载下来 #运行uname -m 看一下linux..._64.zip 解压配置MAT基本参数 unzip MemoryAnalyzer-1.8.0.20180604-linux.gtk.x86_64.zip ## 修改MAT的内存大小, 注意这个大小要根据你...dump文件大小来的,如果dump文件是5GB那么 这里最好配>5GB 否则会报MAT内存不足的异常 ## 修改MemoryAnalyzer.ini 的 -Xmx6024m vi MemoryAnalyzer.ini...jmap dump整个堆 jmap -dump:format=b,file=jmap.info PID MAT分析 dump .
通常,Linux 中如果内存越界会收到 SIGSEGV 信号,然后就会进行 Core Dump 相关操作。...在我们大部分人的认知中,潜意识地认为 Core Dump 是针对 Linux 内存快照。...其实,从本质上来讲,Core Dump 文件不仅仅包含内存信息,譬如,还有些关键的程序运行状态也会同时 Dump 下来,例如,寄存器信息(包括程序指针、栈指针等)、内存管理信息、相关处理器信息以及操作系统状态及相关信息...在基于 Linux 系统,应用程序发生异常时,会产生 Core Dump 文件记录,这些异常或多或少甚至几乎都与“内存”脱不了干系,总结起来主要涉及以下: 1、堆栈溢出问题 通常来讲,...-c unlimited #开启生成 core 文件,文件大小无限制 通常,在大多数环境下,在 Core 生成开启的情况下,Linux 的应用程序在异常崩溃时一定会产生 Core Dump 文件,
简介 众所周知,在fork时,属于进程private的内存页将会进行COW机制。所谓COW,就是一个资源如果需要值拷贝,在读时不创建出副本,仅当写时再创建。...这个流程分为两部分: Fork 设置父子进程的所有内存页的标志为write protected, 而在mmap中被标识为shared的内存则会通过wp_page_reuse标记为wriable 因为谁先写不知道...(此时原本的一个物理页会对应两个物理页,copy1次) Linux中,也的确很节省地使用了这样的方式。...COW 首先和常识相同,write这些页会触发page fault: handle_pte _fault linux使用handle_pte_fault函数处理: 如果vma是writable但是却触发了
但是生产上分析dump文件的话,还是linux工具比较方便,因为生产上的dump文件一般都至少是GB级别的,这么大的文件拷贝到本机要耗费很长时间,特别是遇到生产事故的时候,时间=金钱。...那么linux有什么好的解析dump工具呢? 如何解析 java dump的文件? 这里比较推荐IBM的eclipse的MAT工具。...运行环境要求 linux操作系统 JDK8 以上 下载MAT的linux版本 Eclipse的MAT工具下载链接 MAT支持各种操作系统,找到Linux版本下载下来 # 运行uname -m 看一下linux..._64.zip 解压配置MAT基本参数 unzip MemoryAnalyzer-1.8.0.20180604-linux.gtk.x86_64.zip ## 修改MAT的内存大小, 注意这个大小要根据你...dump文件大小来的,如果dump文件是5GB那么 这里最好配>5GB 否则会报MAT内存不足的异常 ## 修改MemoryAnalyzer.ini 的 -Xmx6024m vi MemoryAnalyzer.ini
DUMP内存 这里使用的是第二种方法,DUMP内存有多种方法,可以采用VS的DEBUG工具进行内存DUMP,但是我们借助任务管理器简单创建完整的转储文件。...Task Manager->Processes->Right Click->Create dump file 通过WinHex查看转储文件,存在相应的明文数据 数据头为 “`… … 49 00...Payload with open('memory.dmp', 'rb') as f: data = f.read() head=data.find(b'M\x00A\x00I\x00N\x00I\x00C\
远程dump lsass.exe内存并解析 使用lsassy可以对远程机器进行自动化的lsass.exe内存dump和解析,利用过程如下: ? 该工具还提供了一个CrackMapExec的模块: ?...第二,我们需要看下如何dump进程的,分析代码,发现是利用两种方法: 1、 powershell.exe -NoP -C "C:\Windows\System32\rundll32.exe C:\Windows
include #include //http://androidxref.com/7.1.1_r6/xref/external/avahi/avahi-compat-howl/text-test.c#33...static void hexdump(const void* p, size_t size) { const uint8_t *c = p; assert(p); printf(“Dumping...size, p); while (size > 0) { unsigned i; for (i = 0; i < 16; i++) { if (i < size) printf(“%02x “, c[...i]); else printf(” “); } for (i = 0; i < 16; i++) { if (i < size) printf(“%c”, c[i] >= 32 && c[i] <...c[i] : ‘.’); else printf(” “); } printf(“\n”); c += 16; if (size <= 16) break; size -= 16; } } //默认8的倍数对齐
jmap -heap 1234 查看进程号为1234的Java程序的整个jvm内存状态 jmap -histo 1234 查找进程号为1234的java程序的jvm堆中对象详细占用情况 jmap -dump...jmap -histo [pid] 导出整个JVM 中内存信息 jmap -dump:format=b,file=文件名 [pid] jhat是sun 1.6及以上版本中自带的一个用于分析JVM 堆DUMP...文件的工具,基于此工具可分析JVM HEAP 中对象的内存占用情况 jhat -J-Xmx1024M [file] (此处的file指的是jmap -dump导出的内存数据文件) 执行后等待console...借助这个插件可查看对象的内存占用状况,引用关系,分析内存泄露等。...kill -3 [pid] 在Linux 上找到Java所在的进程号,然后执行以上命令,线程的相关信息就输出到console jstack jstack 是sun JDK 自带的工具,通过该工具可以看到
[root@www ~]# restore -t [-f dumpfile] [-h] <==用来查看看 dump 檔 [root@www ~]# restore -C [-f dumpfile...类似 tar -t 功能; -C :此模式可以将 dump 内的数据拿出来跟实际的文件系统做比较, 最终会列出『在 dump 档案内有记录的,且目前文件系统丌一样』癿档案; -i :迚入互模式...,可以仅还原部分档案,用在 dump 目录时的还原!...-f :后面就接你要处理的那个 dump 档案啰!...-D :与 -C 进行搭配,可以查出后面接癿挂载点不 dump 内有不同的档案!
(2)内存有多种管理方法:栈、堆、数据段、bss段、.text段等,其实这个Linux环境可以查看以ELF结尾的可执行程序,可以看到所说的这些的;一个变量的存储类属性就是描述这个变量存储在何种内存段中。...Linux下c程序的内存映像 - 代码段、只读数据段 - (1)对应着程序中的代码(函数),代码段在linux中又叫文本段(.text)。...这里详细可以看之前写的这篇文章——轻松带你解决c语言堆、栈、数据段、代码段、bss段的疑惑 - 堆 - (1)C语言中什么样变量存在堆内存中?...(2)对于linux中的每一个进程来说,它都以为整个系统中只有它自己和内核而已。它认为内存地址0xC0000000以下都是它自己的活动空间,0xC0000000以上是OS内核的活动空间。...总结 上面的介绍,只是一些概念性的介绍,要详细更加深入的理解Linux内存,可以看这篇文章:https://blog.csdn.net/f22jay/article/details/7925531
0kB了,以前服务是正常的,猜测出现内存泄露。...所以使用Linux MAT工具先将文件分析完生成html文件,只有几百K,然后下载到本地用浏览器打开分析。 dump堆 首先使用下面命令找到服务的pid: jps -l 然后dump出此服务的堆。...jmap -dump:format=b,file=hummer.dump PID format=b,表示以字节的形式。文件名为hummer.dump。...-1.9.0.20190605-linux.gtk.x86_64.zip 修改MAT的内存大小大于dump出来的文件大小 vi MemoryAnalyzer.ini MAT分析 dump ....从hummer_Leak_Suspects可以看出如下信息: 点开详情: 可以看到ArrayList占用了89.84%的内存,再具体到类的代码,进行分析。
进程崩溃时,Linux会将崩溃前进程的内存状态保存在core文件里,就像保存了案发现场的照片,可以帮助开发人员找到事故原因,修复程序。本文用简单的例子讲解如何根据core文件,定位进程崩溃的原因。...首先编写C++代码,定义一个空指针,对空指针所指向的内存区域写,发生段错误 coretest01.cpp #includeint main(){ int *p = NULL
我的环境是ubuntu 使用发行版的自带的源中安装 sudo apt install valgrind 然后运行一下 valgrind + 可执行命令 就可以 检查内存泄漏啦 ?...内存泄漏检测 主要看definitely lost:这里如果是0,说明没有会导致程序崩溃读的内存泄漏问题。 “definitely lost”:确认丢失。程序中存在内存泄露,应尽快修复。...当程序结束时如果一块动态分配的内存没有被释放且通过程序内的指针变量均无法访问这块内存则会报这个错误。 “indirectly lost”:间接丢失。当使用了含有指针成员的类或结构时可能会报这个错误。...大多数情况下应视为与"definitely lost"一样需要尽快修复,除非你的程序让一个指针指向一块动态分配的内存(但不是这块内存起始地址),然后通过运算得到这块内存起始地址,再释放它。...当程序结束时如果一块动态分配的内存没有被释放且通过程序内的指针变量均无法访问这块内存的起始地址,但可以访问其中的某一部分数据,则会报这个错误。
1 core dump 可以理解为当程序崩溃时,自动将内存信息保存到文件中。这里的 core 就是 memory,dump 就是将内存数据保存到磁盘的过程。...core dump 的一个常见原因是段错误(segmentation fault),这是由尝试访问非法内存位置引起的。这可能包括释放后使用、缓冲区溢出和写入空指针。...以 ubuntu 系统为例,Linux 提供了一个名为 ulimit 的程序来设置 core 文件大小和其他参数。...unlimited 然后使用 ulimit -c 命令,可以看到设置成功: $ ulimit -c unlimited 生成 core dump 并调试 编译代码命令: $ gcc -ggdb -.../core_dump Segmentation fault (core dumped) $ ls core core_dump core_dump.c 这时会生成一个 core 文件: # Load
在任何程序设计环境及语言中,内存管理都十分重要。 内存管理的基本概念 分析C语言内存的分布先从Linux下可执行的C程序入手。...ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux...一个正在运行着的C编译程序占用的内存分为代码区、初始化数据区、未初始化数据区、堆区和栈区5个部分。... 在C语言中,对象可以使用静态或动态的方式分配内存空间。 ...堆则是C/C++函数库提供的,它的机制是很复杂的,例如为了分配一块内存,库函数会按照一定的算法(具体的算法可以参考数据结构/操作系统)在堆内存中搜索可用的足够大小的空间,如果没有足够大小的空间(可能是由于内存碎片太多
这工具好像是调用MiniDumpWriteDump api来dump内存的,自己都可以用c++实现个 #include "stdafx.h" #include #include...,绕过windows defender dump lsass内存,但是现在应该不行了,但是国内的还是随便过的。...,直接把实现dump lsass内存的shellcode进行bash64编码放在头文件的 现在作者学精了,把自己那段提取出来的shellcode base64给删了,之前这里都还有的,只有自己去提取了...,但是dump lsass内存dump不下来,应该是被守护进程保护了,绕不过。...lsass内存,且只把相关的内容给dump下来,非常的香!!!
\n"); dbg_mem_stat(); dbg_heap_dump(""); system("pause"); return 0; } 到此你应该知道如何使用了吧
│ │ kernel 使用volatility扫描内核dump...Scan kernel dump using volatility ╭─ Options ──────────────────────────────────────────────────────...│ pslist 枚举所有进程和相应的命令行参数 │ symcrypt 扫描内核模式dump...中的SymCrypt对象 │ x509 扫描内核模式dump中的x509证书
但是,当Linux物理内存超过1G时,线性访问机制就不够用了,因为只能有1G的内存可以被映射,剩余的物理内存无法被内核管理,所以,为了解决这一问题,Linux把内核地址分为线性区和非线性区两部分,线性区规定最大为...DMA Zone通常很小,只有几十M,低端内存区与高端内存区的划分来源于Linux内核空间大小的限制。...因此,Linux 规定“内核直接映射空间” 最多映射 896M 物理内存。...1G) 2.3 Linux内核高端内存的理解 前 面我们解释了高端内存的由来。...4 页框管理 4.1 页框管理 Linux采用4KB页框大小作为标准的内存分配单元。
领取专属 10元无门槛券
手把手带您无忧上云