- 博客(22)
- 资源 (9)
- 收藏
- 关注
转载 巧用backtrace系列函数,在不具备gdb环境的Linux系统上大致定位段错误位置
1: 段错误产生的原因简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址.一旦一个程序发生了越界访问,系统就采取内存保护措施,并给那个程序发送SIGSEGV信号,程序接到那个信号后就知道segmentation fault出现了。想对”段错误”有更详细的了解可以去阅读“Linux下的段错误产生的原因及调试方法” 这篇
2012-04-26 11:53:53 520
转载 目标文件格式分析工具: ar,nm,objdump,objcopy,readelf
前言如果普通编程不需要了解这些东西,如果想精确控制你的目标文件的格式或者你想查看一下文件里的内容以便作出某种判断,那么你可以看一下下面的工具:ar,nm,objdump,objcopy。具体用法请参考man在线手册。ar基本用法 ar命令可以用来创建、修改库,也可以从库中提出单个模块。库是一单独的文件,里面包含了按照特定的结构组织起来的其它的一些文件(称做
2012-04-26 11:44:02 583
转载 Playing with ptrace, Part II
Dec 01, 2002 By Pradeep Padala inSysAdminIn Part II of his series on ptrace, Pradeep tackles the more advanced topics of setting breakpoints and injecting code into running processes.
2012-04-26 11:15:45 450
转载 Playing with ptrace, Part I
Nov 01, 2002 By Pradeep Padala inSysAdminUsing ptrace allows you to set up system call interception and modification at the user level.Have you ever wondered how system callscan b
2012-04-26 11:10:53 486
转载 ltrace的原理
ltrace的功能是能够跟踪进程的库函数调用,它是如何实现的呢? 在ltrace源代码从chinaunix.net中下载下来,做了一个粗略的分析。 ltrace其实也是基于ptrace。我们知道,ptrace能够主要是用来跟踪系统调用,那么它是如何跟踪库函数呢? 首先ltrace打开elf文件,对其进行分析。在elf文件中,出于动态连接的需要,需要在elf文件中保存函数的符
2012-04-26 10:51:38 3139
转载 strace实现原理
引子:1.在Linux系统中,进程状态除了我们所熟知的TASK_RUNNING,TASK_INTERRUPTIBLE,TASK_STOPPED等,还有一个TASK_TRACED。这表明这个进程处于什么状态?2.strace可以方便的帮助我们记录进程所执行的系统调用,它是如何跟踪到进程执行的?3.gdb是我们调试程序的利器,可以设置断点,单步跟踪程序。它的实现原理又是什么?所有这
2012-04-26 10:50:05 742
转载 [sed] linux sed 批量替换字符串
perl -pi -e 's|ABCD|Linux|g' `find ./ -type f`(perl的参数-p相当于while(http://oreilly.com/pub/h/73)等价于sed -i -e 's|ABCD|Linux|g' `find ./ -type f``多文件操作可用xargs,更直观一些。------------------------
2012-04-25 11:49:36 652
转载 系统调用和c库之间的关系
Tips: 用man查询函数时候有些并不能直接man + 函数名查到,例如:man fopen man 2 open所以可以用man+数字+函数名来试试,具体的内容可以查看 /usr/local/share/man/下面对应的目录___________________________________________________________________________
2012-04-24 17:01:32 1003
原创 gcc __attribute__关键字举例之visibility
visibility用于设置动态链接库中函数的可见性,将变量或函数设置为hidden,则该符号仅在本so中可见,在其他库中则不可见。 g++在编译时,可用参数-fvisibility指定所有符号的可见性(不加此参数时默认外部可见,参考man g++中-fvisibility部分);若需要对特定函数的可见性进行设置,需在代码中使用__attribute__设置visibility属性。
2012-04-24 16:53:22 4253
原创 gcc __attribute__关键字举例之constructor/destructor
constructor属性设置函数在所有函数之前执行,destructor设置函数在所有函数退出后执行。test.cc#include void __init(){ printf("before main\n");}void __exit(){ printf("after main\n");}void __init() __attribute__ ((co
2012-04-23 17:55:17 1104
原创 gcc __attribute__关键字举例之alias
GCC使用__attribute__关键字来描述函数,变量和数据类型的属性,用于编译器对源代码的优化。alias属性用于设置一个函数的别名。以下程序为C++版本,C版本去掉extern "C"即可test.cc#include extern "C" int __fun() { printf("in %s\n",__FUNCTION__); return 0;}
2012-04-23 17:34:26 6196 1
转载 Linux进程通信:管道要点
popen一般用于获取命令执行的输出,或者对命令进行输入(采用无名管道):FILE *popen(const char *command, const char *type);pipe用于无名管道:int pipe(int pipefd[2]);mkfifo用于有名管道:int mkfifo(const char *pathname, mode_t mode);
2012-04-20 17:14:14 575
转载 Linux下进程间通信:管道-pipe函数
摘要:在本系列序中作者概述了 linux 进程间通信的几种主要手段。其中管道和有名管道是最早的进程间通信机制之一,管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。 认清管道和有名管道的读写规则是在程序中应用它们的关键,本文在详细讨论了管道和有名管道的通信机制的基础上,用实例对其读写规则进行了程序验证,这样做有利于
2012-04-20 17:02:44 446
转载 linux 命名管道fifo实现进程间小数据通信
/* int mkfifo(const char *pathname, mode_t mode); 创建命名管道,成功返回0,失败返回-1。 程序运寻则操作的内容存在于管道文件中,一退出内容则被清空了。EEXIST:用于判断命名管道文件是否存在,存在就可以不用创建。 */#include #include #include #include #i
2012-04-20 16:49:47 735
原创 C++覆盖系统函数的方法
在编写程序时,我们有时会有覆盖系统函数的需求。比如针对glibc中fork线程不安全的bug,我们可以在程序中实现一个特定的fork,伪代码如下:pid_t fork(void){ lock(); fork();//system call unlock();}将这个程序编译为myfork.o。我们的目标是,对于所有使用fork的库,当我们同时链接myfork
2012-04-20 15:02:44 2279 1
原创 pstack实现
注意,使用pstack查看系统进程的堆栈时需要sudo。注意第一行使用的bash,不可用dash。------------------------------------#!/bin/bashif test $# -ne 1; then echo "Usage: `basename $0 .sh` " 1>&2 exit 1fiif te
2012-04-19 11:29:27 1382
转载 Linux下多线程查看工具(pstree、ps、pstack)
pstack实现参考http://blog.csdn.net/starstarstone/article/details/7476815------------------------------------------------------------------------------------------------1. pstreepstree以树结构显示进程$ p
2012-04-19 11:22:11 659
转载 bash与dash的差别
如今Debian和Ubuntu中,/bin/sh默认已经指向dash,这是一个不同于bash的shell,它主要是为了执行脚本而出现,而不是交互,它速度更快,但功能相比bash要少很多,语法严格遵守POSIX标准,下面简要列举下从bash迁移到dash一般需要注意的问题1.定义函数bash: function在bash中为关键字igi@gentoo ~ $ foo(){ echo $0;}
2012-04-19 11:16:19 702
转载 limit of inotify
本文可解决函数inotify_add_watch发生ENOSPC错误的问题。-------------------------------------------------------------------------------------------ProblemWhen dropbox or guard says like:Unable to monito
2012-04-19 10:42:38 2009
原创 查看glibc版本的方法
方法1:ldd --version方法2:写一个程序检测#include #include int main (void) { puts (gnu_get_libc_version ()); return 0; }
2012-04-19 10:35:21 1114
转载 5 simple ways to troubleshoot using Strace
其中第三条可使用下面的命令查看所有线程的状态strace -f -p 15427strace vs. ltrace:strace追踪系统函数(对应man 2);ltrace追踪库函数(对应man 3),ltrace也可同时追踪系统函数(参数-S)。---------------------------------2008-06-11 00:09 UTC 5
2012-04-18 16:24:59 796
转载 right-left rule
The "right-left" rule is a completely regular rule for deciphering Cdeclarations. It can also be useful in creating them.First, symbols. Read * as "pointer to" - always on the left side
2012-04-06 11:25:50 477
libxml2-2.7.6.tar.gz
2012-08-23
httpd-2.4.2.tar.gz
2012-08-23
php-5.4.6.tar.bz2
2012-08-23
c#版五子棋(人机对弈模式)
2007-03-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人