调试
文章平均质量分 76
unix21
这个作者很懒,什么都没留下…
展开
-
GDB查看栈信息
栈:是程序存放数据内存区域之一,特点是LIFO(后进先出)。PUSH:入栈POP:出战使用场景:1.保存动态分配的自动变量使用栈2.函数调用时,用栈传递函数参数,半寸返回地址,返回值代码sum.c#include #include #include #define MAX (1UL << 20)原创 2012-12-29 12:53:44 · 27336 阅读 · 2 评论 -
Linux环境下的堆栈--调试C程序
完整的调试过程,跟踪堆栈变化,32位下。注意64位和此不同。 a.c代码:#include int main() { AFunc(5,6); return 0;} int BFunc(int i,int j){ int m = 1; int n = 2; m = i; n = j; return m;原创 2013-01-13 15:07:36 · 2504 阅读 · 0 评论 -
GDB调试--以汇编语言为例
#rpm -qa |grep gdb下载:安装#tar -zxvf #./configure#make使用GDB以汇编语言调试为例汇编语言实现CPUID指令CPUIDcpuid是Intel Pentinum以上级CPU内置的一个指令(486级以下的CPU不支持),他用于识别某一类型的CPU,它能返回CPU级别,型号,CPU步进以及CPU字原创 2012-12-29 11:40:36 · 5218 阅读 · 0 评论 -
使用strace和ltrace跟踪程序调用
ltrace能够跟踪进程的库函数调用,它会显现出哪个库函数被调用,而strace则是跟踪程序的每个系统调用.1.系统调用的输出对比程序代码:#include main(){ char str[]= "Abcde"; printf("\n string = %s length = %d \n",str,str_length(str));}int str_length原创 2013-11-23 21:00:37 · 3143 阅读 · 1 评论 -
从寄存器看I386和x64位中函数调用中参数传递
x86_64基本使用寄存器存储函数参数,寄存器不够才入栈;而i386将所有参数保存在栈上,通过gcc的扩展功能__attribute__((regparm()))即可实现部分参数的寄存器传递。代码#include #include int v1 = 1;float v2 = 0.01;#ifdef FAST__attribute__((regparm(3))原创 2012-12-29 13:03:32 · 8902 阅读 · 0 评论 -
使用NetBeans IDE开发C程序
建立一个malloc和free的队列,用一个malloc就加入队列(加入行号和函数名),用一个free就放出一个malloc,最后这个队列如果不是空,就说明内存有泄露,反之就可以偷着乐了。原创 2013-09-28 10:02:34 · 4164 阅读 · 1 评论 -
仿照redis写的nginx开机画面
1、获取文件的flags,即open函数的第二个参数:flags = fcntl(fd,F_GETFL,0);2、设置文件的flags:fcntl(fd,F_SETFL,flags);3、增加文件的某个flags,比如文件是阻塞的,想设置成非阻塞:flags = fcntl(fd,F_GETFL,0);flags |= O_NONBLOCK;fcntl(fd,F_SET原创 2013-03-29 17:48:37 · 1157 阅读 · 0 评论 -
GDB使用总结
一:列文件1. List (gdb) list line1,line2 二:执行程序 要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符()和外壳通配符(*、?、[、])在内。 如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。 利用set args 命令就可以修改发送给程序原创 2013-07-30 15:48:38 · 3248 阅读 · 0 评论 -
linux下使用NetBeans调试libevent库
1.安装libevent参考:http://blog.csdn.net/unix21/article/details/8679269libevent安装在usr/local/libevent下2.安装netBeanshttp://www.netbeans.org3.配置netBeans1)打开项目的属性选项,选择包含目录,把/usr//local/lib原创 2013-03-17 17:18:55 · 1661 阅读 · 0 评论 -
gcc使用总结
查看glibc版本#rpm -qa | grep glibcglibc-2.12-1.80.el6_3.6.x86_64glibc-headers-2.12-1.80.el6_3.6.x86_64glibc-devel-2.12-1.80.el6_3.6.x86_64glibc-common-2.12-1.80.el6_3.6.x86_64 或者#ldd --vers原创 2012-12-29 12:45:50 · 2515 阅读 · 0 评论 -
valgrind Massif
nginx源码学习是一个痛苦又快乐的过程,下面列出了一些nginx的学习资源。 首先要做的当然是下载一份nginx源码,可以从nginx官方网站下载一份最新的。看了nginx源码,发现这是一份完全没有注释,完全没有配置文档的代码。 现在你最希望要的是一份注释版的nginx源码,可以从下面的链接中下载一份:https://github.com/jianfengye/nginx原创 2013-07-15 12:01:00 · 10013 阅读 · 2 评论 -
GDB 格式化结构体输出
GDB 命令行参数启动 GDB:l gdb executablel gdb -e executable -c core-filel gdb executable -pid process-id (使用命令 'ps -auxw' 可以查看进程的 pid)选项 含义 –help-h 列出命令行参数。 –exec=file-e file原创 2013-08-15 22:53:46 · 23518 阅读 · 2 评论 -
cgdb安装与使用
官网:http://cgdb.github.io/安装# wget http://cgdb.me/files/cgdb-0.6.7.tar.gz# tar -zvxf cgdb-0.6.7.tar.gz# cd cgdb-0.6.7# ./configure --prefix=/usr/local# make && make install 使用1:cgd原创 2013-08-15 17:11:54 · 7807 阅读 · 0 评论 -
linux环境insight安装与使用
# wget ftp://sourceware.org/pub/insight/releases/insight-6.8-1a.tar.bz2# tar xvf insight-6.8-1a.tar.bz2# cd ./# ./configure --prefix=/usr/local/insight# make注意第一次make会报错:eval.c: 在函数‘eval原创 2013-08-06 12:29:40 · 2320 阅读 · 0 评论 -
GDB attach到进程
要调试守护进程等已经启动的进程或是调试陷于死循环的进程可以使用attach命令格式 attach pidC语言代码#include int main(void) { int marks[10]; int i; for(i=0;i<12;i++) { scanf("%d",&mar原创 2012-12-29 12:49:21 · 5550 阅读 · 0 评论 -
使用cat /proc/进程id/maps 查看进程内存映射
proc//maps查看进程的虚拟地址空间是如何使用的。该文件有6列,分别为:地址:库在进程里地址范围权限:虚拟内存的权限,r=读,w=写,x=,s=共享,p=私有;偏移量:库在进程里地址范围设备:映像文件的主设备号和次设备号;节点:映像文件的节点号;路径: 映像文件的路径每项都与一个vm_area_struct结构成员对应C语言代码#include原创 2012-12-29 11:49:20 · 20436 阅读 · 2 评论 -
objdump与readelf
objdump和readelf都可以用来查看二进制文件的一些内部信息. 区别在于objdump借助BFD而更加通用一些, 可以应付不同文件格式, readelf则并不借助BFD, 而是直接读取ELF格式文件的信息, 按readelf手册页上所说, 得到的信息也略细致一些. 几个功能对比. 1. 反汇编代码查看源代码被翻译成的汇编代码, 大概有3种方法, 1) 通过编译器原创 2013-01-04 22:36:16 · 1516 阅读 · 0 评论 -
objdump查看目标文件构成
objdumpobjdump是用查看目标文件或者可执行的目标文件的构成的GCC工具反汇编#objdump -d cpuid2对于其中的反汇编代码左边是机器指令的字节,右边是反汇编结果。显然,所有的符号都被替换成地址了, 注意没有加$的数表示内存地址,而不表示立即数。objdump -x obj 以某种分类信息的形式把目标文件的数据组织(被分为几大原创 2013-01-04 21:43:47 · 3114 阅读 · 0 评论 -
readelf和ldd分析elf文件
1. elf 文件格式linux系统中,gcc编译器编译出的object文件、可执行文件都属于elf文件。elf文件由三个部分组成:elf header、program headers|section headers、sections|program segments。如果是executable文件,则section部分是不需要的;如果是loadable文件,则program se原创 2013-01-04 21:52:39 · 6657 阅读 · 0 评论 -
.data和.text段合并
a.c#include extern int share;int main(void) { int a=100;swap(&a,&share);} b.cint share=1;void swap(int *a,int *b){*a^=*b^=*a^=*b;}编译#gcc -c a.c b.c 链接#ld原创 2013-01-05 22:55:39 · 973 阅读 · 0 评论 -
Win32 环境下的堆栈
原文已经找不到,作者应该是:http://blog.csdn.net/slimak 但是没有找到此文,其中丢了2幅图简介在Win32环境下利用调试器调试应用程序的时候经常要和堆栈(Stack)打交道,尤其是在需要手工遍历堆栈(Manually Walking Stack)的时候我们需要对堆栈的工作过程有一个比较清晰的了解.接下来的这些文字将通过一个例子程序详细的讲解堆栈的工作过程.原创 2013-01-12 11:19:26 · 2431 阅读 · 0 评论 -
汇编包含C代码
反汇编的时候带上C代码便于观察 比较三元表达式和if else的差异a1.c#include int main(void) { int a=1;int b=2;int c=0;a = (b>c)?1:0;return 0;}a2.c#include int main(void) { int a=1;原创 2013-01-15 18:42:13 · 800 阅读 · 0 评论 -
二进制实用程序(objdump, readelf,ar, nm等)
GNU 二进制实用程序Binutils (GNU binary utilities)包括:objdump、readelf、addr2line、strip、ar、nm、ldd、ngprof、gcov等。一。 objdump - 显示二进制文件信息objdump可以根据目标文件来生成可读性比较好的汇编文件。常用的命令如下:gcc -g3 test.c -o test.o objdump原创 2013-07-14 20:53:52 · 2091 阅读 · 0 评论 -
Linux环境ddd安装与使用
ddd是一个优秀的调试器,安装ddd破费周折必须安装x开发环境1.下载http://ftp.gnu.org/gnu/ddd/,下载最新的ddd-3.3.12.tar.gz#wget http://ftp.gnu.org/gnu/ddd/ddd-3.3.12.tar.gz#tar zxvf ddd-3.3.12.tar.gz#cd ddd-3.3.12/2原创 2012-12-29 11:48:33 · 8646 阅读 · 1 评论 -
Linux环境Nginx安装与调试以及PHP安装
linux版本:64位CentOS 6.8Nginx版本:nginx1.17.7php版本:php5.6.40说明:本博不定时更新为新版本1.编译安装Nginx官网:http://wiki.nginx.org/Install下载:http://nginx.org/en/download.html安装GCC安装nginx需要gcc,如果因为需要安装grpc...原创 2013-01-26 17:22:43 · 16322 阅读 · 0 评论