open ulimit:
ulimit -c unlimited 不限制生成core文件大小
ulimit -c 0 关闭core文件生成开关
ulimit -c 1024 限定生成core文件的大小为1024
change naming rule:
/proc/sys/kernel/core_uses_pid 1 表示使用procid命名,0表示不使用
/proc/sys/kernel/core_pattern 可以设置格式化的 core 文件保存位置或文件名
echo “/opt/corefile/core-%e-%p-%t” > /proc/sys/kernel/core_pattern
将会控制所产生的 core 文件会存放到 /corefile 目录下,产生的文件名为 core- 命令名 -pid- 时间戳
以下是参数列表 :
%p - insert pid into filename 添加 pid
%u - insert current uid into filename 添加当前 uid
%g - insert current gid into filename 添加当前 gid
%s - insert signal that caused the coredump into the filename 添加导致产生 core 的信号
%t - insert UNIX time that the coredump occurred into filename 添加 core 文件生成时的 unix 时间
%h - insert hostname where the coredump happened into filename 添加主机名
%e - insert coredumping executable name into filename 添加命令名
http://blog.163.com/wuzhiyong_430/blog/static/48883052201392224644723/
关于ubuntu12.10下面的core文件的几个法则:
1)重启之后,/proc/sys/kernel/core_pattern中的内容会被重新置为core;
2)重启之后,运行ulimit -c之后,得到的大小是0;
3)重启之后,产生的core文件是记录不下来的,既不会产生到当前目录下面,也不会产生到/var/crash下面;
4)重启之后,仅仅运行echo "/var/crash/core-%e">/proc/sys/kernel/core_pattern之后,不产生core文件;
5)重启之后,运行echo "/var/crash/core-%e">/proc/sys/kernel/core_pattern和ulimite -c 1024之后,第一次运行crash程序,会产生core文件;删除core文件,第二次运行crash程序,会产生core文件;删除core文件,第三次运行crash程序,会产生core文件;....;此时,运行ulimite -c产生的结果是0,但是,core文件仍然会产生;...;再次允许ulimite -c 1024,不会影响core文件的产生;
6)
技巧:通过在/root/.bashrc后面添加"ulimit -c 1024",可以永久的改变ulimit -c的限制。
peach在检测针对网络程序Fuzzing的过程中,由于速度过快,会忽略部分测试用例的获取。
即:目标程序产生crash了,但是Peach并没有尽快获取得到,从而导致程序出现问题。
需要修改/peach/agent/linux.py中的部分代码:
def DetectedFault(self):
'''
Check if a fault was detected.
'''
try:
# Give crash reporter time to find the crash
time.sleep(3)#updated by wzy
time.sleep(0.25)
self.data = None
for f in os.listdir(self.logFolder):
if not f in self.startingFiles and (self.Executable == None or f.find(self.Executable) > -1):
fd = open(os.path.join(self.logFolder, f), "rb")
self.data = fd.read()
fd.close()
os.unlink(os.path.join(self.logFolder, f))
return True
return False
except:
print sys.exc_info()
return False
注意:需要注意Executable的内容的大小写。
<Monitor class="linux.LinuxApport">
<Param name="Executable" value=" XnView"/>
<Param name="PeachApport" value="/usr/share/apport/apport"/>
</Monitor>
How to use:
1. create an empty dir to save output file later
cd /var/crash/
mkdir report
2. unpack the crash file and output data to the dir you just create.
apport-unpack _var_www_html_automation_test_sipp.0.crash report
3. move to the dir and use gdb run the sipp with CoreDump, type-in ‘bt’ to show the stack information
cd report
gdb /var/www/html/automation_test/sipp CoreDump
(gdb) bt
通过/usr/share/apport/apport,是可以把相应的东西都获取得到。
wiki reference:
https://wiki.ubuntu.com/Apport/DeveloperHowTo
https://wiki.ubuntu.com/Apport