栈溢出问题分析
近日,程序总是莫名其妙的coredump,而且还是在变量定义的时候(如 int a=1),百思不得其解。在这种情况下,只有几种情况可能出现:内存踩踏、栈溢出。
在经过长时间的分析确认,肯定不是内存踩踏。剩下的就是栈溢出了。Linux下一般单个程序栈大小为10M,可用ulimit -s查阅。一般情况下,10M的大小足够用,怎会出现栈溢出。再次对代码进行了详细的分析,发现有一处临时变量的结构竟然有2M之巨。此处确实难以理解,为何采用如此大的结构体。可能是考虑到动态分配内存用不好容易导致内存泄漏,因此采用临时变量。另外该函数又被递归调用两次,因此该函数就耗用接近5M的栈空间。将该结构体改为指针后,该问题即解决。
解决该问题后,过了一段时间又出现了该问题,耗费较长时间后,最终确定又是栈溢出导致的。
查阅一番资料发现有一库可以检测栈溢出问题,现分享给大家,它就是libsigsegv。使用方法如下:
1.下载libsigsegv库,编译并安装。
12345tar -xvzf libsigsegv-2.11.tar.gzcd libsigsegv-2.11./configuremak ...
Mobaxterm工具
1 登录1.1 远程登录1.1.1 内建命令行模式
点击
图标,在弹出的窗口中选择SSH连接,然后填入Remote host IP及用户名。
点击确认后输入密码即可
1.1.2 Gnome模式(类似VNC)
点击图标,在弹出的窗口中选择SSH连接,然后填入Remote host IP及用户名。
2) 点击Advanced SSH settings,设置Remote environment为3) 点击确认后输入密码即可
1.2 串口登录
点击图标,在弹出的窗口中选择Serial连接,然后选择port和speed。
点击确认后即可
1.3 其他MobaXterm还支持其他协议登录
FTP
TFTP
2 查看文件、上传下载文件当远程登录后,我们在左侧会出现文件列表,我们可以直接从windows上传文件,下载文件。
3 多窗口同时执行
登录多个待同时执行的 ...
Linux笔记
第 1 章 Linux管理1.1 Linux基本指令1.1.1 addr2lineaddr2line –e pgw 0Xfffff
另外:dmesg |grep pgw
注意:编译pgw需添加-g选项才可以找到所在行
1.1.2 alias重命名: alias killim=”kill $(ps –A | awk ‘/im_test/{print $1}’)”
1.1.3 ar ar命令可以用来创建、修改库,也可以从库中提出单个模块。库是一单独的文件,里面包含了按照特定的结构组织起来的其它的一些文件(称做此库文件的member)。原始文件的内容、模式、时间戳、属主、组等属性都保留在库文件中。
下面是ar命令的格式:
ar [-]{dmpqrtx}[abcfilNoPsSuvV] [membername] [count] archive files…
例如我们可以用ar rv libtest.a hello.o hello1.o来生成一个库,库名字是test,链接时可以用-ltest链接。该库中存放了两个模块hello.o和hello1.o。选项前可以有‘ ...
深入解析Linux 常用命令--sshpass
sshpass
用于ssh远程登录
2015/7/11
深入解析Linux 常用命令--top
1.概述当我们在Linux环境下运行我们的程序时,我们经常会使用top命令来查看程序的运行状态,CPU、内存使用情况,类似我们在Windows下的任务管理器,可以查看内存的使用情况,剩余情况等。
2.各项说明在终端中直接输入top即可查看当前资源使用情况信息。
1234567891011121314151617181920212223242526272829[root@smart linux]# toptop - 22:52:37 up 2:55, 4 users, load average: 0.01, 0.03, 0.00Tasks: 190 total, 1 running, 189 sleeping, 0 stopped, 0 zombieCpu(s): 1.6%us, 0.3%sy, 0.0%ni, 98.0%id, 0.0%wa, 0.1%hi, 0.0%si, 0.0%stMem: 1939652k total, 462412k used, 1477240k free, 46596k buffersSwap: 209714 ...
深入解析Linux 常用命令--ps
ps用于显示当前正在运行的进程。
ps - report a snapshot of the current processes.
常用参数:
ps -ef|grep x
ps -aux|grep x 列出详细信息
深入解析Linux 常用命令--route
1.概述route用于查看路由表、增加路由、删除路由、修改路由表等操作。
2.路由类型a.主机路由:表示指向单个IP地址或主机名的路由
b.网络路由:表示指向某个网路的路由
c.默认路由:表示不能再路由表中找到的目标主机或网路的路由
3.命令a.显示数字地址(不解析主机名)route -n,该命令经常使用,由于直接输入route主机会去接析主机名,有时候会耗用较长时间。
1234567891011121314[root@smart Desktop]# routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface192.168.1.0 * 255.255.255.0 U 1 0 0 eth0192.168.42.0 * 255.255.255.0 U 1 0 0 eth1192.168.122.0 ...
深入解析Linux 常用命令--lsof
1.概述lsof用于显示打开的文件。list open files。
2.各参数含义a.-c列出指定进程所打开的文件
12345678[root@smart Desktop]# lsof -c XorgCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEXorg 2846 root cwd DIR 253,0 4096 653625 /var/gdmXorg 2846 root rtd DIR 253,0 4096 2 /Xorg 2846 root txt REG 253,0 2295880 956717 /usr/bin/XorgXorg 2846 root mem REG 253,0 122232 787409 /lib/libgcc_s-4.4.7-20120601.so.1Xorg 2846 root mem REG ...
深入解析Linux 常用命令--cut
1.概述cut用于截取部分字符或字符串等
2.各参数含义a.-b 选择部分字节
cut -b 1 选择第一个字节
cut -b 1- 选择第一个字节及其后的字节
cut -b 3,5,6-
1234567891011[root@smart temp]# cat test.txt |cut -b 1htit[root@smart temp]# cat test.txt |cut -b 1-hellothis is test [root@smart temp]#
b.-c 选择部分字符
12345[root@smart temp]# cat test.txt |cut -c 1-hellothis is test
c. -d 分割,常与-f使用
123456#以空格为分割,取出第一个[root@smart temp]# cat test.txt |cut -d' ' -f 1 hellothisistest
d. -f 区域
-i interval ,ping包间隔
深入解析Linux 常用命令--du
1.概述du常用于查看磁盘剩余空间大小。
2.不带参数默认情况下,df显示磁盘空间使用情况
123456[root@smart linux]# dfFilesystem 1K-blocks Used Available Use% Mounted on/dev/mapper/vg_smart-lv_root 18069936 5379972 11772052 32% /tmpfs 969824 224 969600 1% /dev/shm/dev/sda1 495844 37653 432591 9% /boot[root@smart linux]#
3.以人类可读方式df -h
12345[root@smart linux]# df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/vg_smart-lv_ ...
基于LTE系统的GRE隧道配置方法
今日由于项目需求,需要搭建一个承载于LTE系统的数据隔离测试网,该方案采用GRE隧道方案,通过不同目的IP地址走不同隧道来实现数据隔离。
0.前言 此处GRE并非是Graduate Record Examination(美国研究生入学考试),此处为通信行业名词,Generic Routing Encapsulation,即通用路由封装。它可以对某些网络层协议的数据报进行封装,使这些被封装的数据报能够在IPv4网络中进行传输。
此处有较多的专业术语,先列举出来,如下:
LTE: Long Time Envolved,长期演进计划,即当前的4G系统
EPC:Envolved Packet Core,演进的分组核心网
CPE: Customer Premise Equipment ,一种无线接入终端设备
SGi接口:EPC中PGW与外部网络接口
GW:gateway,网关
1.GRE网络拓扑各设备IP地址如下图所示。
2.配置步骤2.1 博特CPE配置开启GRE隧道配置进入“配置/虚拟专网/GRE隧道设置”,配置如下:
配置隧道名称为g0。
隧道 ...
深入解析Linux 常用命令--cd
1.概述cd常用于切换目录,改变目录(change directory)
2.切换目录cd [Directory] , [Directory] 可以 为任意存在的目录。
12345678[root@smart Desktop]# pwd/root/Desktop[root@smart Desktop]# cd /[root@smart /]# pwd/[root@smart /]# cd /home/[root@smart home]# pwd/home
3.切换到上一次目录cd -
123456[root@smart /]# cd /opt/rh/[root@smart rh]# pwd/opt/rh[root@smart rh]# cd /home[root@smart home]# cd -/opt/rh
4.返回上级目录cd .. 切换到上级目录
cd ../.. 切换到上级目录的上级目录
12345[root@smart rh]# pwd/opt/rh[root@smart rh]# cd ..[root@sma ...
深入解析Linux 常用命令--du
1.概述du常用于查看占用空间大小。
2.不带参数默认情况下,du只显示文件夹大小。
1234567891011121314151617181920[root@smart Desktop]# ls -paa cd.txt.bak2 ls.test test.md wireshark.desktopalias.txt du.txt ls.txt test.md~cat.txt k.txt ls.txt.bak test.txtcd.txt linux/ test.log test.txt2cd.txt.bak ls (copy).test~ test.log.bak test.txt3[root@smart Desktop]# du1340 ./linux/txt4 ./linux/h/abcde8 ./linux/h4 ./linux/B/A8 ./linux/B4 ./linux/.dir4 ./linux/ss8 ./ ...
深入解析Linux 常用命令--mv
1.概述mv常用于重命名文件或文件夹。
2.各选项解释1)-f -f选项表示:不管文件是否存在均不出现提示。
12345[root@smart linux]# mv a bmv: overwrite `b'? y[root@smart linux]# touch a [root@smart linux]# mv -f a b
2)–backup/-b该选项用于在存在已有文件的情况下,备份文件
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849[root@smart linux]# mv --backup b b.cmv: overwrite `b.c'? y[root@smart linux]# lltotal 40drwxr-xr-x. 2 root root 4096 Nov 8 21:52 Adrwxr-xr-x. 2 root root 4096 Nov 3 19:52 abcdedrwxr-xr-x. 3 roo ...
深入解析Linux 常用命令--rm
1.概述rm也是我们经常用到的一个Linux命令,常用于文件和文件夹的删除,rm取自于remove。官方解释为:“Remove files or directories”,即移除文件和目录。
2.各选项解释1)-f -f选项表示:不管文件是否存在均不出现提示。
12[root@smart linux]# rm -f a.t[root@smart linux]# rm -f b.t
2)-r/-R-r/-R表示:递归删除文件或目录
1234567891011121314[root@smart linux]# rm -r arm: remove regular file `a'? y[root@smart linux]# rm -r grm: descend into directory `g'? yrm: remove directory `g/abcde'? yrm: remove directory `g'? y[root@smart linux]# rm -R erm: descend into directory ...