Linux程序运行跟踪trace

一、源程序

1.源码

#include <stdio.h>
#include <string.h>

int main()
{
  int i;
  printf("TK------>>>sizeof i is %d\n",sizeof i);
  char *p = NULL;
  strcpy(p,"tankai");
  printf("p is %s\n",p);
  return 0;
}

2.编译

gcc -g -o 1 1.c

3.运行

./1

TK------>>>sizeof i is 4
段错误
二、运行跟踪

1.strace

strace ./1

execve("./1", ["./1"], [/* 45 vars */]) = 0
brk(0)                                  = 0x94b000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f5f5e285000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("tls/x86_64/libc.so.6", O_RDONLY)  = -1 ENOENT (No such file or directory)
open("tls/libc.so.6", O_RDONLY)         = -1 ENOENT (No such file or directory)
open("x86_64/libc.so.6", O_RDONLY)      = -1 ENOENT (No such file or directory)
open("libc.so.6", O_RDONLY)             = -1 ENOENT (No such file or directory)
open("/home/lianxi/share/static/tls/x86_64/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/home/lianxi/share/static/tls/x86_64", 0x7fff7bbb1770) = -1 ENOENT (No such file or directory)
open("/home/lianxi/share/static/tls/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/home/lianxi/share/static/tls", 0x7fff7bbb1770) = -1 ENOENT (No such file or directory)
open("/home/lianxi/share/static/x86_64/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/home/lianxi/share/static/x86_64", 0x7fff7bbb1770) = -1 ENOENT (No such file or directory)
open("/home/lianxi/share/static/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/home/lianxi/share/static", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/usr/lib/libpython2.6.so.1.0/tls/x86_64/libc.so.6", O_RDONLY) = -1 ENOTDIR (Not a directory)
stat("/usr/lib/libpython2.6.so.1.0/tls/x86_64", 0x7fff7bbb1770) = -1 ENOTDIR (Not a directory)
open("/usr/lib/libpython2.6.so.1.0/tls/libc.so.6", O_RDONLY) = -1 ENOTDIR (Not a directory)
stat("/usr/lib/libpython2.6.so.1.0/tls", 0x7fff7bbb1770) = -1 ENOTDIR (Not a directory)
open("/usr/lib/libpython2.6.so.1.0/x86_64/libc.so.6", O_RDONLY) = -1 ENOTDIR (Not a directory)
stat("/usr/lib/libpython2.6.so.1.0/x86_64", 0x7fff7bbb1770) = -1 ENOTDIR (Not a directory)
open("/usr/lib/libpython2.6.so.1.0/libc.so.6", O_RDONLY) = -1 ENOTDIR (Not a directory)
stat("/usr/lib/libpython2.6.so.1.0", {st_mode=S_IFREG|0555, st_size=5255963, ...}) = 0
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=148114, ...}) = 0
mmap(NULL, 148114, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f5f5e260000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \24\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1694008, ...}) = 0
mmap(NULL, 3810152, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f5f5dcc4000
mprotect(0x7f5f5de5d000, 2093056, PROT_NONE) = 0
mmap(0x7f5f5e05c000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x198000) = 0x7f5f5e05c000
mmap(0x7f5f5e061000, 21352, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f5f5e061000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f5f5e25f000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f5f5e25d000
arch_prctl(ARCH_SET_FS, 0x7f5f5e25d720) = 0
mprotect(0x7f5f5e05c000, 16384, PROT_READ) = 0
mprotect(0x600000, 4096, PROT_READ)     = 0
mprotect(0x7f5f5e287000, 4096, PROT_READ) = 0
munmap(0x7f5f5e260000, 148114)          = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f5f5e284000
write(1, "TK------>>>sizeof i is 4\n", 25TK------>>>sizeof i is 4
) = 25
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
段错误
2.ltrace

ltrace ./1

__libc_start_main(0x400544, 1, 0x7fff5acc0c88, 0x4005b0, 0x400640 <unfinished ...>
printf("TK------>>>sizeof i is %d\n", 4TK------>>>sizeof i is 4
)                                                    = 25
memcpy(NULL, "tankai", 7 <unfinished ...>
--- SIGSEGV (Segmentation fault) ---
+++ killed by SIGSEGV +++
3.gdb

gdb 1

list

b 5

r

n

(gdb) list
1	#include <stdio.h>
2	#include <string.h>
3	
4	int main()
5	{
6	  int i;
7	  printf("TK------>>>sizeof i is %d\n",sizeof i);
8	  char *p = NULL;
9	  strcpy(p,"tankai");
10	  printf("p is %s\n",p);
(gdb) b 5
Breakpoint 1 at 0x40054c: file 1.c, line 5.
(gdb) r
Starting program: /home/lianxi/extern/ok/1 

Breakpoint 1, main () at 1.c:7
7	  printf("TK------>>>sizeof i is %d\n",sizeof i);
(gdb) n
TK------>>>sizeof i is 4
8	  char *p = NULL;
(gdb) n
9	  strcpy(p,"tankai");
(gdb) n

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7b6dec6 in ?? () from /lib/x86_64-linux-gnu/libc.so.6

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值