揭示零碎 API 的神秘

Linux 零碎架构

  • 利用程序运行之后失去用户过程

模式切换的实质(零碎调用的实质)

  • 零碎模式切换依赖于 CPU 提供的工作形式
  • 一般来说,大部分 CPU 至多具备两种工作形式

    • 高特权级 (Ring 0) : 能够拜访任意的数据,包含外围设备,比方网卡、硬盘等(内核模式)
    • 低特权级 (Ring 3) : 只能受限的拜访内存,并且不容许拜访外围设备,可被打断(用户模式)
  • 零碎模式切换通过执行非凡的 CPU 指令发动 (int 0x80,触发中断)
  • 应用程序(过程)无奈间接切换 CPU 的工作形式
  • 零碎调用是应用程序(过程)申请模式切换的惟一形式

零碎调用的真面目

char *s = "D.T.Software\n;"int l = 13;asm volatile (    "movl $s, %%eax\n"  // 指定编号为 4 的零碎调用(sys_write)    "movl $1, %%ebx\n"  // 指定 sys_write 的输入指标, 1 为规范输入    "movl %0, %%ecx\n"  // 指定输入字符串地址    "movl %1, %%edx\n"  // 指定输入字符串长度    "int $0x80     \n"  // 执行零碎调用    :                   // 疏忽输入参数    : "r"(s), "r"(l)    : "eax", "ebx", "ecx", "edx");  // 保留存放去,不用于关联变量
void print(const char *s, int l){    asm volatile (      "movl $s, %%eax\n"  // sys_write      "movl $1, %%ebx\n"       "movl %0, %%ecx\n"       "movl %1, %%edx\n"      "int $0x80     \n"  // 80H Service      :            : "r"(s), "r"(l)    // parameter      : "eax", "ebx", "ecx", "edx");  // 保留存放去,不用于关联变量}

零碎调用和零碎 API 实现示例

#define SysCall(type, cmd, param1, param2)  asm volatile (                  "movl $"#type", %%eax\n"        \                  "movl $"#cmd",  %%ebx\n"        \                   "movl %0,       %%ecx\n"        \                  "movl %1,       %%edx\n"        \                  "int $0x80           \n"        \                  :                               \                  : "r"(param1), "r"(param2)      \                  : "eax", "ebx", "ecx", "edx"    \                )            
void RegApp(const char *name, void(*tmain)(), byte pri){    if (name && tmain) {        AppInof info = {0};                info.name = name;        info.tmain = tmain;        info.priority = pri;                SysCall(0, 2, &info, 0);    }}

编程试验:零碎调用的实质

间接应用零碎调用 program.c
第 1 处不同,没有援用头文件第 2 处不同,没有 main 函数第 3 处不同,函数外面嵌入了汇编代码
void print(const char *s, int l);void exit(int code);void program(){    print("Hello World!\n", 13);    exit(0);}void print(const char *s, int l){    asm volatile (        "movl $4, %%eax\n"        "movl $1, %%ebx\n"        "movl %0, %%ecx\n"        "movl %1, %%edx\n"        "int $0x80     \n"        :        : "r"(s), "r"(l)        : "eax", "ebx", "ecx", "edx"    );}void exit(int code) {    asm volatile (        "movl $1, %%eax\n"        "movl %0, %%ebx\n"        "int $0x80     \n"        :        : "r"(code)        : "eax", "ebx"    );    }
编译:gcc -m32 -e program -fno-builtin -nostartfiles  program.c -o program.out-m32 : 指定应用 32 位编译形式-e program : 指定 program 函数为入口-fno-builtin -nostartfiles : 不须要 _start 函数运行:Hello World!
借助第三方库 main.c
#include <stdio.h>int main(){    printf("Hello World!\n");    return 0;}
编译:gcc main.c -o main.out运行:Hello World!

值得思考的问题

  • 如何判断一个应用程序(过程)触发了零碎调用?

雷同性能的代码实现

python
print('Hello World!')
perl
print "Hello World!\n"
C++
#include "iostream"using namespace std;int main(){    cout << "Hello World!" << endl;    return 0;}
C#
namespace Test {    class Program {        static void Main(string[] args)        {            Console.Write("Hello World\n");        }    }}

strace - 零碎调用探测器

  • strace 用户监控过程与内核的交付(监控零碎调用)
  • starce 用于追踪过程外部状态(定位运行时问题)
  • starce 按序输入过程运行过程零碎调用名称,参数和返回值

strace 程序性能剖析

tiansong@tiansong:~/Desktop$ strace -tt -T -o program.log ./program.out Hello World!
program.log
20:49:43.455558 execve("./program.out", ["./program.out"], 0x7ffd4866f4f0 /* 41 vars */) = 0 <0.000543>20:49:43.456490 brk(NULL)               = 0x57eb4000 <0.000090>20:49:43.456758 arch_prctl(0x3001 /* ARCH_??? */, 0xffe88698) = -1 EINVAL (Invalid argument) <0.000087>20:49:43.457239 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) <0.000242>20:49:43.457786 mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf7f95000 <0.000226>20:49:43.458639 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) <0.000726>20:49:43.459965 set_thread_area({entry_number=-1, base_addr=0xf7f959c0, limit=0x0fffff, seg_32bit=1, contents=0, read_exec_only=0, limit_in_pages=1, seg_not_present=0, useable=1}) = 0 (entry_number=12) <0.000489>20:49:43.460899 mprotect(0x565c7000, 4096, PROT_READ) = 0 <0.000247>20:49:43.461308 write(1, "Hello World!\n", 13) = 13 <0.000162>20:49:43.461744 exit(0)                 = ?20:49:43.462040 +++ exited with 0 +++
man execveman brk
查看依赖
tiansong@tiansong:~/Desktop$ ldd program.out         statically linked
tiansong@tiansong:~/Desktop$ strace -c ./program.out strace: [ Process PID=3691 runs in 32 bit mode. ]Hello World!% time     seconds  usecs/call     calls    errors syscall------ ----------- ----------- --------- --------- ----------------  0.00    0.000000           0         1           execve------ ----------- ----------- --------- --------- ----------------100.00    0.000000                     1           totalSystem call usage summary for 32 bit mode:% time     seconds  usecs/call     calls    errors syscall------ ----------- ----------- --------- --------- ----------------  0.00    0.000000           0         1           write  0.00    0.000000           0         2         2 access  0.00    0.000000           0         1           brk  0.00    0.000000           0         1           mprotect  0.00    0.000000           0         1           mmap2  0.00    0.000000           0         1           set_thread_area  0.00    0.000000           0         1         1 arch_prctl------ ----------- ----------- --------- --------- ----------------100.00    0.000008                     8         3 total

tiansong@tiansong:~/Desktop$ strace -tt -T ./a.out 20:49:16.540739 execve("./a.out", ["./a.out"], 0x7ffdf1b95370 /* 41 vars */) = 0 <0.000394>20:49:16.541439 brk(NULL)               = 0x55a4e7477000 <0.000090>20:49:16.541730 arch_prctl(0x3001 /* ARCH_??? */, 0x7ffe0f8e6a60) = -1 EINVAL (Invalid argument) <0.000088>20:49:16.542141 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) <0.000150>20:49:16.542615 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 <0.000146>20:49:16.542949 fstat(3, {st_mode=S_IFREG|0644, st_size=73887, ...}) = 0 <0.000117>20:49:16.543361 mmap(NULL, 73887, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f6df5276000 <0.000187>20:49:16.543696 close(3)                = 0 <0.000108>20:49:16.544083 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 <0.000534>20:49:16.544859 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300A\2\0\0\0\0\0"..., 832) = 832 <0.000131>20:49:16.545221 pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784 <0.000169>20:49:16.545577 pread64(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32, 848) = 32 <0.000133>20:49:16.546027 pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0\30x\346\264ur\f|Q\226\236i\253-'o"..., 68, 880) = 68 <0.000106>20:49:16.546356 fstat(3, {st_mode=S_IFREG|0755, st_size=2029592, ...}) = 0 <0.000182>20:49:16.546723 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f6df5274000 <0.000096>20:49:16.547047 pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784 <0.000091>20:49:16.547426 pread64(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32, 848) = 32 <0.000375>20:49:16.548194 pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0\30x\346\264ur\f|Q\226\236i\253-'o"..., 68, 880) = 68 <0.000175>20:49:16.548696 mmap(NULL, 2037344, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f6df5082000 <0.000283>20:49:16.549183 mmap(0x7f6df50a4000, 1540096, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x22000) = 0x7f6df50a4000 <0.000117>20:49:16.549507 mmap(0x7f6df521c000, 319488, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19a000) = 0x7f6df521c000 <0.000177>20:49:16.549875 mmap(0x7f6df526a000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e7000) = 0x7f6df526a000 <0.000301>20:49:16.550483 mmap(0x7f6df5270000, 13920, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f6df5270000 <0.000295>20:49:16.551340 close(3)                = 0 <0.000251>20:49:16.551837 arch_prctl(ARCH_SET_FS, 0x7f6df5275540) = 0 <0.000148>20:49:16.552355 mprotect(0x7f6df526a000, 16384, PROT_READ) = 0 <0.000143>20:49:16.552720 mprotect(0x55a4e6f29000, 4096, PROT_READ) = 0 <0.000197>20:49:16.553099 mprotect(0x7f6df52b6000, 4096, PROT_READ) = 0 <0.000423>20:49:16.553795 munmap(0x7f6df5276000, 73887) = 0 <0.000281>20:49:16.554455 fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0x3), ...}) = 0 <0.000791>20:49:16.555759 brk(NULL)               = 0x55a4e7477000 <0.000404>20:49:16.556416 brk(0x55a4e7498000)     = 0x55a4e7498000 <0.000268>20:49:16.557149 write(1, "Hello World!\n", 13Hello World!) = 13 <0.000127>20:49:16.557496 exit_group(0)           = ?20:49:16.557904 +++ exited with 0 +++
查看依赖
tiansong@tiansong:~/Desktop$ ldd a.out        linux-vdso.so.1 (0x00007ffc13f0f000)        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f95f22f0000)        /lib64/ld-linux-x86-64.so.2 (0x00007f95f24fc000)
tiansong@tiansong:~/Desktop$ strace -c ./a.out Hello World!% time     seconds  usecs/call     calls    errors syscall------ ----------- ----------- --------- --------- ----------------  0.00    0.000000           0         1           read  0.00    0.000000           0         1           write  0.00    0.000000           0         2           close  0.00    0.000000           0         3           fstat  0.00    0.000000           0         7           mmap  0.00    0.000000           0         3           mprotect  0.00    0.000000           0         1           munmap  0.00    0.000000           0         3           brk  0.00    0.000000           0         6           pread64  0.00    0.000000           0         1         1 access  0.00    0.000000           0         1           execve  0.00    0.000000           0         2         1 arch_prctl  0.00    0.000000           0         2           openat------ ----------- ----------- --------- --------- ----------------100.00    0.000012                    33         2 total

strace - 用法详解

• -c -- count time, calls, and errors for each syscall and report summary• -f -- follow forks• -ff -- with output into separate files• -F -- attempt to follow vforks• -i -- print instruction pointer at time of syscall• -q -- suppress messages about attaching, detaching, etc.• -r -- print relative timestamp• -t -- absolute timestamp,• -tt -- with usecs• -T -- print time spent in each syscall,• -v -- verbose mode: print unabbreviated argv, stat, termio[s], etc. args• -x -- print non-ascii strings in hex,• -xx -- print all strings in hex• -o file -- send trace output to FILE instead of stderr• -O overhead -- set overhead for tracing syscalls to OVERHEAD usecs• -p pid -- trace process with process id PID, may be repeated• -D -- run tracer process as a detached grandchild, not as parent• -s strsize -- limit length of print strings to STRSIZE chars (default 32)• -S sortby -- sort syscall counts by: time, calls, name, nothing (default time)
  • -e expr : 指定一个表达式,用来管制如何跟踪

     -e trace=set 跟踪指定的零碎调用    如: -e trace=open,close,rean,write 示意只跟踪这四个零碎调用 -e trace=file 跟踪无关文件操作的零碎调用 -e trace=process 跟踪无关过程管制的零碎调用 -e trace=network 跟踪与网络无关的所有零碎调用 -e strace=signal 跟踪所有与零碎信号无关的零碎调用 -e trace=ipc 跟踪所有与过程通信无关的零碎调用 -e raw=set 将指定的零碎调用的参数以十六进制显示 -e signal=set 指定跟踪的零碎信号   如: signal=!SIGIO(或者signal=!IO),示意不跟踪 SIGIO 信号 -e read=set 输入从指定文件中读出的数据   如: -e read=3,5 -e write=set 输入写入到指定文件中的数据

编程试验:strace 程序逆向剖析

在只有可执行程序 fcopy.out 的前提下,探索其实现
通过 readwrite 的交替,大略可判断为文件的复制
tiansong@tiansong:~/Desktop$ strace ./fcopy.out new_a.out a.out execve("./fcopy.out", ["./fcopy.out", "new_a.out", "a.out"], 0x7fff7dbfd8f0 /* 41 vars */) = 0brk(NULL)                               = 0x55b198e42000arch_prctl(0x3001 /* ARCH_??? */, 0x7ffc282006b0) = -1 EINVAL (Invalid argument)access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3fstat(3, {st_mode=S_IFREG|0644, st_size=73887, ...}) = 0mmap(NULL, 73887, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fc31c5f6000close(3)                                = 0openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300A\2\0\0\0\0\0"..., 832) = 832pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784pread64(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32, 848) = 32pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0\30x\346\264ur\f|Q\226\236i\253-'o"..., 68, 880) = 68fstat(3, {st_mode=S_IFREG|0755, st_size=2029592, ...}) = 0mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fc31c5f4000pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784pread64(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32, 848) = 32pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0\30x\346\264ur\f|Q\226\236i\253-'o"..., 68, 880) = 68mmap(NULL, 2037344, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fc31c402000mmap(0x7fc31c424000, 1540096, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x22000) = 0x7fc31c424000mmap(0x7fc31c59c000, 319488, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19a000) = 0x7fc31c59c000mmap(0x7fc31c5ea000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e7000) = 0x7fc31c5ea000mmap(0x7fc31c5f0000, 13920, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fc31c5f0000close(3)                                = 0arch_prctl(ARCH_SET_FS, 0x7fc31c5f5540) = 0mprotect(0x7fc31c5ea000, 16384, PROT_READ) = 0mprotect(0x55b198828000, 4096, PROT_READ) = 0mprotect(0x7fc31c636000, 4096, PROT_READ) = 0munmap(0x7fc31c5f6000, 73887)           = 0openat(AT_FDCWD, "new_a.out", O_WRONLY|O_CREAT, 0600) = 3openat(AT_FDCWD, "a.out", O_RDONLY)     = 4read(4, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`\20\0\0\0\0\0\0"..., 512) = 512write(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`\20\0\0\0\0\0\0"..., 512) = 512read(4, "\4\0\0\0\4\0\0\0X\3\0\0\0\0\0\0X\3\0\0\0\0\0\0X\3\0\0\0\0\0\0"..., 512) = 512write(3, "\4\0\0\0\4\0\0\0X\3\0\0\0\0\0\0X\3\0\0\0\0\0\0X\3\0\0\0\0\0\0"..., 512) = 512read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\0\0\0\22\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\0\0\0\22\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512read(4, "\363\17\36\372H\203\354\10H\213\5\331/\0\0H\205\300t\2\377\320H\203\304\10\303\0\0\0\0\0"..., 512) = 512write(3, "\363\17\36\372H\203\354\10H\213\5\331/\0\0H\205\300t\2\377\320H\203\304\10\303\0\0\0\0\0"..., 512) = 512read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512read(4, "\1\0\2\0Hello World!\0\0\0\0\1\33\3;@\0\0\0\7\0\0\0"..., 512) = 512write(3, "\1\0\2\0Hello World!\0\0\0\0\1\33\3;@\0\0\0\7\0\0\0"..., 512) = 512read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512read(4, "\270=\0\0\0\0\0\0\33\0\0\0\0\0\0\0\10\0\0\0\0\0\0\0\32\0\0\0\0\0\0\0"..., 512) = 512write(3, "\270=\0\0\0\0\0\0\33\0\0\0\0\0\0\0\10\0\0\0\0\0\0\0\32\0\0\0\0\0\0\0"..., 512) = 512read(4, "\0\0\0\0\0\0\0\0\10@\0\0\0\0\0\0GCC: (Ubuntu 9.4"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\10@\0\0\0\0\0\0GCC: (Ubuntu 9.4"..., 512) = 512read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\3\0\23\0\24 \0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\3\0\23\0\24 \0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512read(4, "\255\0\0\0\0\0\25\0\300=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\276\0\0\0\1\0\27\0"..., 512) = 512write(3, "\255\0\0\0\0\0\25\0\300=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\276\0\0\0\1\0\27\0"..., 512) = 512read(4, "I\21\0\0\0\0\0\0\33\0\0\0\0\0\0\0\300\1\0\0\21\2\31\0\20@\0\0\0\0\0\0"..., 512) = 512write(3, "I\21\0\0\0\0\0\0\33\0\0\0\0\0\0\0\300\1\0\0\21\2\31\0\20@\0\0\0\0\0\0"..., 512) = 512read(4, "u_init\0__bss_start\0main\0__TMC_EN"..., 512) = 512write(3, "u_init\0__bss_start\0main\0__TMC_EN"..., 512) = 512read(4, "\2\0\0\0\0\0\0\08\3\0\0\0\0\0\08\3\0\0\0\0\0\0 \0\0\0\0\0\0\0"..., 512) = 512write(3, "\2\0\0\0\0\0\0\08\3\0\0\0\0\0\08\3\0\0\0\0\0\0 \0\0\0\0\0\0\0"..., 512) = 512read(4, "\2\0\0\0\0\0\0\0 \5\0\0\0\0\0\0 \5\0\0\0\0\0\0\300\0\0\0\0\0\0\0"..., 512) = 512write(3, "\2\0\0\0\0\0\0\0 \5\0\0\0\0\0\0 \5\0\0\0\0\0\0\300\0\0\0\0\0\0\0"..., 512) = 512read(4, "\2\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0\21\0\0\0\0\0\0\0"..., 512) = 512write(3, "\2\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0\21\0\0\0\0\0\0\0"..., 512) = 512read(4, "\3\0\0\0\0\0\0\0\20@\0\0\0\0\0\0\0200\0\0\0\0\0\0\10\0\0\0\0\0\0\0"..., 512) = 312write(3, "\3\0\0\0\0\0\0\0\20@\0\0\0\0\0\0\0200\0\0\0\0\0\0\10\0\0\0\0\0\0\0"..., 312) = 312read(4, "", 512)                        = 0close(3)                                = 0close(4)                                = 0fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0x3), ...}) = 0brk(NULL)                               = 0x55b198e42000brk(0x55b198e63000)                     = 0x55b198e63000write(1, "copy completed\n", 15copy completed)        = 15exit_group(0)                           = ?+++ exited with 0 +++
fcopy.c
#include <stdio.h>#include <string.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int file_copy(const char* dst, const char* src){    int dfd = open(dst, O_WRONLY|O_CREAT, 0600);    int sfd = open(src, O_RDONLY);    int ret = 0;        if( dfd == -1 )    {        ret = -1;    }    else if( sfd == -1 )    {        ret = -2;    }    else if( (dfd != -1) && (sfd != -1) )    {        char buf[512] = {0};        int len = 0;        while( (len = read(sfd, buf, sizeof(buf))) > 0 )        {            write(dfd, buf, len);        }        close(dfd);        close(sfd);    }        return ret;}int main(char argc, char* argv[]){    if( argc > 2 )    {        if( file_copy(argv[1], argv[2]) == 0)         {            printf("copy completed\n");        }        else        {            printf("copy failed\n");        }       }    else    {        printf("parameter error\n");    }    return 0;}

编程试验:应用程序谬误定位

tiansong@tiansong:~/Desktop$ ./fcopy.out /new_folder/new_a.out a.out copy failed  // 应用程序报错
tiansong@tiansong:~/Desktop$ strace ./fcopy.out /new_folder/new_a.out a.out execve("./fcopy.out", ["./fcopy.out", "/new_folder/new_a.out", "a.out"], 0x7ffef202d8c0 /* 41 vars */) = 0brk(NULL)                               = 0x55da5b131000arch_prctl(0x3001 /* ARCH_??? */, 0x7ffff7aaec10) = -1 EINVAL (Invalid argument)access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)  // 谬误定位openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3fstat(3, {st_mode=S_IFREG|0644, st_size=73887, ...}) = 0mmap(NULL, 73887, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f0b8eac7000close(3)                                = 0openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300A\2\0\0\0\0\0"..., 832) = 832pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784pread64(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32, 848) = 32pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0\30x\346\264ur\f|Q\226\236i\253-'o"..., 68, 880) = 68fstat(3, {st_mode=S_IFREG|0755, st_size=2029592, ...}) = 0mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0b8eac5000pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784pread64(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32, 848) = 32pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0\30x\346\264ur\f|Q\226\236i\253-'o"..., 68, 880) = 68mmap(NULL, 2037344, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f0b8e8d3000mmap(0x7f0b8e8f5000, 1540096, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x22000) = 0x7f0b8e8f5000mmap(0x7f0b8ea6d000, 319488, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19a000) = 0x7f0b8ea6d000mmap(0x7f0b8eabb000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e7000) = 0x7f0b8eabb000mmap(0x7f0b8eac1000, 13920, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f0b8eac1000close(3)                                = 0arch_prctl(ARCH_SET_FS, 0x7f0b8eac6540) = 0mprotect(0x7f0b8eabb000, 16384, PROT_READ) = 0mprotect(0x55da5abe0000, 4096, PROT_READ) = 0mprotect(0x7f0b8eb07000, 4096, PROT_READ) = 0munmap(0x7f0b8eac7000, 73887)           = 0openat(AT_FDCWD, "/new_folder/new_a.out", O_WRONLY|O_CREAT, 0600) = -1 ENOENT (No such file or directory)openat(AT_FDCWD, "a.out", O_RDONLY)     = 3fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0x3), ...}) = 0brk(NULL)                               = 0x55da5b131000brk(0x55da5b152000)                     = 0x55da5b152000write(1, "copy failed\n", 12copy failed)           = 12exit_group(0)                           = ?+++ exited with 0 +++

编程试验:strace 程序数据分析

查看程序执行过程中所波及的数据
tiansong@tiansong:~/Desktop$ strace -xx -s  512 ./fcopy.out  /new_a.out a.out execve("\x2e\x2f\x66\x63\x6f\x70\x79\x2e\x6f\x75\x74", ["\x2e\x2f\x66\x63\x6f\x70\x79\x2e\x6f\x75\x74", "\x2f\x6e\x65\x77\x5f\x61\x2e\x6f\x75\x74", "\x61\x2e\x6f\x75\x74"], 0x7fff63fd54e8 /* 41 vars */) = 0brk(NULL)                               = 0x5649cb7b0000arch_prctl(0x3001 /* ARCH_??? */, 0x7ffdd8ed6540) = -1 EINVAL (Invalid argument)access("\x2f\x65\x74\x63\x2f\x6c\x64\x2e\x73\x6f\x2e\x70\x72\x65\x6c\x6f\x61\x64", R_OK) = -1 ENOENT (No such file or directory)openat(AT_FDCWD, "\x2f\x65\x74\x63\x2f\x6c\x64\x2e\x73\x6f\x2e\x63\x61\x63\x68\x65", O_RDONLY|O_CLOEXEC) = 3fstat(3, {st_mode=S_IFREG|0644, st_size=73887, ...}) = 0mmap(NULL, 73887, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fbd28ca5000close(3)                                = 0openat(AT_FDCWD, "\x2f\x6c\x69\x62\x2f\x78\x38\x36\x5f\x36\x34\x2d\x6c\x69\x6e\x75\x78\x2d\x67\x6e\x75\x2f\x6c\x69\x62\x63\x2e\x73\x6f\x2e\x36", O_RDONLY|O_CLOEXEC) = 3read(3, "\x7f\x45\x4c\x46\x02\x01\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x3e\x00\x01\x00\x00\x00\xc0\x41\x02\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x18\xe7\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x38\x00\x0e\x00\x40\x00\x44\x00\x43\x00\x06\x00\x00\x00\x04\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x10\x03\x00\x00\x00\x00\x00\x00\x10\x03\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\xa0\xe6\x1b\x00\x00\x00\x00\x00\xa0\xe6\x1b\x00\x00\x00\x00\x00\xa0\xe6\x1b\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x14\x02\x00\x00\x00\x00\x00\xe8\x14\x02\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x00\x20\x02\x00\x00\x00\x00\x00\x00\x20\x02\x00\x00\x00\x00\x00\x00\x20\x02\x00\x00\x00\x00\x00\x24\x76\x17\x00\x00\x00\x00\x00\x24\x76\x17\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\xa0\x19\x00\x00\x00\x00\x00\x00\xa0\x19\x00\x00\x00\x00\x00\x00\xa0\x19\x00\x00\x00\x00\x00\xc4\xd2\x04\x00\x00\x00\x00\x00\xc4\xd2\x04\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x88\x77\x1e\x00\x00\x00\x00\x00\x88\x87\x1e\x00\x00\x00\x00\x00\x88\x87\x1e\x00\x00\x00\x00\x00\x18\x50\x00\x00\x00\x00\x00\x00\xd8\x8e\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x80\xab\x1e\x00\x00\x00\x00\x00\x80\xbb\x1e\x00\x00\x00\x00\x00\x80\xbb\x1e\x00\x00\x00\x00\x00\xe0\x01\x00\x00\x00\x00\x00\x00\xe0\x01\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x50\x03\x00\x00\x00\x00\x00\x00\x50\x03\x00\x00\x00\x00\x00\x00\x50\x03\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00"..., 832) = 832pread64(3, "\x06\x00\x00\x00\x04\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x10\x03\x00\x00\x00\x00\x00\x00\x10\x03\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\xa0\xe6\x1b\x00\x00\x00\x00\x00\xa0\xe6\x1b\x00\x00\x00\x00\x00\xa0\xe6\x1b\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x14\x02\x00\x00\x00\x00\x00\xe8\x14\x02\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x00\x20\x02\x00\x00\x00\x00\x00\x00\x20\x02\x00\x00\x00\x00\x00\x00\x20\x02\x00\x00\x00\x00\x00\x24\x76\x17\x00\x00\x00\x00\x00\x24\x76\x17\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\xa0\x19\x00\x00\x00\x00\x00\x00\xa0\x19\x00\x00\x00\x00\x00\x00\xa0\x19\x00\x00\x00\x00\x00\xc4\xd2\x04\x00\x00\x00\x00\x00\xc4\xd2\x04\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x88\x77\x1e\x00\x00\x00\x00\x00\x88\x87\x1e\x00\x00\x00\x00\x00\x88\x87\x1e\x00\x00\x00\x00\x00\x18\x50\x00\x00\x00\x00\x00\x00\xd8\x8e\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x80\xab\x1e\x00\x00\x00\x00\x00\x80\xbb\x1e\x00\x00\x00\x00\x00\x80\xbb\x1e\x00\x00\x00\x00\x00\xe0\x01\x00\x00\x00\x00\x00\x00\xe0\x01\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x50\x03\x00\x00\x00\x00\x00\x00\x50\x03\x00\x00\x00\x00\x00\x00\x50\x03\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x70\x03\x00\x00\x00\x00\x00\x00\x70\x03\x00\x00\x00\x00\x00\x00\x70\x03\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x04\x00\x00\x00"..., 784, 64) = 784pread64(3, "\x04\x00\x00\x00\x10\x00\x00\x00\x05\x00\x00\x00\x47\x4e\x55\x00\x02\x00\x00\xc0\x04\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00", 32, 848) = 32pread64(3, "\x04\x00\x00\x00\x14\x00\x00\x00\x03\x00\x00\x00\x47\x4e\x55\x00\x18\x78\xe6\xb4\x75\x72\x0c\x7c\x51\x96\x9e\x69\xab\x2d\x27\x6f\xae\x6d\x1d\xee\x04\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x47\x4e\x55\x00\x00\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00", 68, 880) = 68fstat(3, {st_mode=S_IFREG|0755, st_size=2029592, ...}) = 0mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbd28ca3000pread64(3, "\x06\x00\x00\x00\x04\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x10\x03\x00\x00\x00\x00\x00\x00\x10\x03\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\xa0\xe6\x1b\x00\x00\x00\x00\x00\xa0\xe6\x1b\x00\x00\x00\x00\x00\xa0\xe6\x1b\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x14\x02\x00\x00\x00\x00\x00\xe8\x14\x02\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x00\x20\x02\x00\x00\x00\x00\x00\x00\x20\x02\x00\x00\x00\x00\x00\x00\x20\x02\x00\x00\x00\x00\x00\x24\x76\x17\x00\x00\x00\x00\x00\x24\x76\x17\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\xa0\x19\x00\x00\x00\x00\x00\x00\xa0\x19\x00\x00\x00\x00\x00\x00\xa0\x19\x00\x00\x00\x00\x00\xc4\xd2\x04\x00\x00\x00\x00\x00\xc4\xd2\x04\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x88\x77\x1e\x00\x00\x00\x00\x00\x88\x87\x1e\x00\x00\x00\x00\x00\x88\x87\x1e\x00\x00\x00\x00\x00\x18\x50\x00\x00\x00\x00\x00\x00\xd8\x8e\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x80\xab\x1e\x00\x00\x00\x00\x00\x80\xbb\x1e\x00\x00\x00\x00\x00\x80\xbb\x1e\x00\x00\x00\x00\x00\xe0\x01\x00\x00\x00\x00\x00\x00\xe0\x01\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x50\x03\x00\x00\x00\x00\x00\x00\x50\x03\x00\x00\x00\x00\x00\x00\x50\x03\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x70\x03\x00\x00\x00\x00\x00\x00\x70\x03\x00\x00\x00\x00\x00\x00\x70\x03\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x04\x00\x00\x00"..., 784, 64) = 784pread64(3, "\x04\x00\x00\x00\x10\x00\x00\x00\x05\x00\x00\x00\x47\x4e\x55\x00\x02\x00\x00\xc0\x04\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00", 32, 848) = 32pread64(3, "\x04\x00\x00\x00\x14\x00\x00\x00\x03\x00\x00\x00\x47\x4e\x55\x00\x18\x78\xe6\xb4\x75\x72\x0c\x7c\x51\x96\x9e\x69\xab\x2d\x27\x6f\xae\x6d\x1d\xee\x04\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x47\x4e\x55\x00\x00\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00", 68, 880) = 68mmap(NULL, 2037344, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fbd28ab1000mmap(0x7fbd28ad3000, 1540096, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x22000) = 0x7fbd28ad3000mmap(0x7fbd28c4b000, 319488, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19a000) = 0x7fbd28c4b000mmap(0x7fbd28c99000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e7000) = 0x7fbd28c99000mmap(0x7fbd28c9f000, 13920, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fbd28c9f000close(3)                                = 0arch_prctl(ARCH_SET_FS, 0x7fbd28ca4540) = 0mprotect(0x7fbd28c99000, 16384, PROT_READ) = 0mprotect(0x5649c9a24000, 4096, PROT_READ) = 0mprotect(0x7fbd28ce5000, 4096, PROT_READ) = 0munmap(0x7fbd28ca5000, 73887)           = 0openat(AT_FDCWD, "\x2f\x6e\x65\x77\x5f\x61\x2e\x6f\x75\x74", O_WRONLY|O_CREAT, 0600) = -1 EACCES (Permission denied)openat(AT_FDCWD, "\x61\x2e\x6f\x75\x74", O_RDONLY) = 3fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0x3), ...}) = 0brk(NULL)                               = 0x5649cb7b0000brk(0x5649cb7d1000)                     = 0x5649cb7d1000write(1, "\x63\x6f\x70\x79\x20\x66\x61\x69\x6c\x65\x64\x0a", 12copy failed) = 12exit_group(0)                           = ?+++ exited with 0 +++
tiansong@tiansong:~/Desktop$ strace -e read=3 ./fcopy.out  /new_a.out a.out execve("./fcopy.out", ["./fcopy.out", "/new_a.out", "a.out"], 0x7fff6dde78e0 /* 41 vars */) = 0brk(NULL)                               = 0x55eda4dca000arch_prctl(0x3001 /* ARCH_??? */, 0x7ffd1320ade0) = -1 EINVAL (Invalid argument)access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3fstat(3, {st_mode=S_IFREG|0644, st_size=73887, ...}) = 0mmap(NULL, 73887, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f1ede05a000close(3)                                = 0openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300A\2\0\0\0\0\0"..., 832) = 832 | 00000  7f 45 4c 46 02 01 01 03  00 00 00 00 00 00 00 00  .ELF............ | | 00010  03 00 3e 00 01 00 00 00  c0 41 02 00 00 00 00 00  ..>......A...... | | 00020  40 00 00 00 00 00 00 00  18 e7 1e 00 00 00 00 00  @............... | | 00030  00 00 00 00 40 00 38 00  0e 00 40 00 44 00 43 00  ....@.8...@.D.C. | | 00040  06 00 00 00 04 00 00 00  40 00 00 00 00 00 00 00  ........@....... | | 00050  40 00 00 00 00 00 00 00  40 00 00 00 00 00 00 00  @.......@....... | | 00060  10 03 00 00 00 00 00 00  10 03 00 00 00 00 00 00  ................ | | 00070  08 00 00 00 00 00 00 00  03 00 00 00 04 00 00 00  ................ | | 00080  a0 e6 1b 00 00 00 00 00  a0 e6 1b 00 00 00 00 00  ................ | | 00090  a0 e6 1b 00 00 00 00 00  1c 00 00 00 00 00 00 00  ................ | | 000a0  1c 00 00 00 00 00 00 00  10 00 00 00 00 00 00 00  ................ | | 000b0  01 00 00 00 04 00 00 00  00 00 00 00 00 00 00 00  ................ | | 000c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................ | | 000d0  e8 14 02 00 00 00 00 00  e8 14 02 00 00 00 00 00  ................ | | 000e0  00 10 00 00 00 00 00 00  01 00 00 00 05 00 00 00  ................ | | 000f0  00 20 02 00 00 00 00 00  00 20 02 00 00 00 00 00  . ....... ...... | | 00100  00 20 02 00 00 00 00 00  24 76 17 00 00 00 00 00  . ......$v...... | | 00110  24 76 17 00 00 00 00 00  00 10 00 00 00 00 00 00  $v.............. | | 00120  01 00 00 00 04 00 00 00  00 a0 19 00 00 00 00 00  ................ | | 00130  00 a0 19 00 00 00 00 00  00 a0 19 00 00 00 00 00  ................ | | 00140  c4 d2 04 00 00 00 00 00  c4 d2 04 00 00 00 00 00  ................ | | 00150  00 10 00 00 00 00 00 00  01 00 00 00 06 00 00 00  ................ | | 00160  88 77 1e 00 00 00 00 00  88 87 1e 00 00 00 00 00  .w.............. | | 00170  88 87 1e 00 00 00 00 00  18 50 00 00 00 00 00 00  .........P...... | | 00180  d8 8e 00 00 00 00 00 00  00 10 00 00 00 00 00 00  ................ | | 00190  02 00 00 00 06 00 00 00  80 ab 1e 00 00 00 00 00  ................ | | 001a0  80 bb 1e 00 00 00 00 00  80 bb 1e 00 00 00 00 00  ................ | | 001b0  e0 01 00 00 00 00 00 00  e0 01 00 00 00 00 00 00  ................ | | 001c0  08 00 00 00 00 00 00 00  04 00 00 00 04 00 00 00  ................ | | 001d0  50 03 00 00 00 00 00 00  50 03 00 00 00 00 00 00  P.......P....... | | 001e0  50 03 00 00 00 00 00 00  20 00 00 00 00 00 00 00  P....... ....... | | 001f0  20 00 00 00 00 00 00 00  08 00 00 00 00 00 00 00   ............... | | 00200  04 00 00 00 04 00 00 00  70 03 00 00 00 00 00 00  ........p....... | | 00210  70 03 00 00 00 00 00 00  70 03 00 00 00 00 00 00  p.......p....... | | 00220  44 00 00 00 00 00 00 00  44 00 00 00 00 00 00 00  D.......D....... | | 00230  04 00 00 00 00 00 00 00  07 00 00 00 04 00 00 00  ................ | | 00240  88 77 1e 00 00 00 00 00  88 87 1e 00 00 00 00 00  .w.............. | | 00250  88 87 1e 00 00 00 00 00  10 00 00 00 00 00 00 00  ................ | | 00260  90 00 00 00 00 00 00 00  08 00 00 00 00 00 00 00  ................ | | 00270  53 e5 74 64 04 00 00 00  50 03 00 00 00 00 00 00  S.td....P....... | | 00280  50 03 00 00 00 00 00 00  50 03 00 00 00 00 00 00  P.......P....... | | 00290  20 00 00 00 00 00 00 00  20 00 00 00 00 00 00 00   ....... ....... | | 002a0  08 00 00 00 00 00 00 00  50 e5 74 64 04 00 00 00  ........P.td.... | | 002b0  bc e6 1b 00 00 00 00 00  bc e6 1b 00 00 00 00 00  ................ | | 002c0  bc e6 1b 00 00 00 00 00  d4 5e 00 00 00 00 00 00  .........^...... | | 002d0  d4 5e 00 00 00 00 00 00  04 00 00 00 00 00 00 00  .^.............. | | 002e0  51 e5 74 64 06 00 00 00  00 00 00 00 00 00 00 00  Q.td............ | | 002f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................ | | 00300  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................ | | 00310  10 00 00 00 00 00 00 00  52 e5 74 64 04 00 00 00  ........R.td.... | | 00320  88 77 1e 00 00 00 00 00  88 87 1e 00 00 00 00 00  .w.............. | | 00330  88 87 1e 00 00 00 00 00  78 38 00 00 00 00 00 00  ........x8...... |pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784 | 00000  06 00 00 00 04 00 00 00  40 00 00 00 00 00 00 00  ........@....... | | 00010  40 00 00 00 00 00 00 00  40 00 00 00 00 00 00 00  @.......@....... | | 00020  10 03 00 00 00 00 00 00  10 03 00 00 00 00 00 00  ................ | | 00030  08 00 00 00 00 00 00 00  03 00 00 00 04 00 00 00  ................ | | 00040  a0 e6 1b 00 00 00 00 00  a0 e6 1b 00 00 00 00 00  ................ | | 00050  a0 e6 1b 00 00 00 00 00  1c 00 00 00 00 00 00 00  ................ | | 00060  1c 00 00 00 00 00 00 00  10 00 00 00 00 00 00 00  ................ | | 00070  01 00 00 00 04 00 00 00  00 00 00 00 00 00 00 00  ................ | | 00080  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................ | | 00090  e8 14 02 00 00 00 00 00  e8 14 02 00 00 00 00 00  ................ | | 000a0  00 10 00 00 00 00 00 00  01 00 00 00 05 00 00 00  ................ | | 000b0  00 20 02 00 00 00 00 00  00 20 02 00 00 00 00 00  . ....... ...... | | 000c0  00 20 02 00 00 00 00 00  24 76 17 00 00 00 00 00  . ......$v...... | | 000d0  24 76 17 00 00 00 00 00  00 10 00 00 00 00 00 00  $v.............. | | 000e0  01 00 00 00 04 00 00 00  00 a0 19 00 00 00 00 00  ................ | | 000f0  00 a0 19 00 00 00 00 00  00 a0 19 00 00 00 00 00  ................ | | 00100  c4 d2 04 00 00 00 00 00  c4 d2 04 00 00 00 00 00  ................ | | 00110  00 10 00 00 00 00 00 00  01 00 00 00 06 00 00 00  ................ | | 00120  88 77 1e 00 00 00 00 00  88 87 1e 00 00 00 00 00  .w.............. | | 00130  88 87 1e 00 00 00 00 00  18 50 00 00 00 00 00 00  .........P...... | | 00140  d8 8e 00 00 00 00 00 00  00 10 00 00 00 00 00 00  ................ | | 00150  02 00 00 00 06 00 00 00  80 ab 1e 00 00 00 00 00  ................ | | 00160  80 bb 1e 00 00 00 00 00  80 bb 1e 00 00 00 00 00  ................ | | 00170  e0 01 00 00 00 00 00 00  e0 01 00 00 00 00 00 00  ................ | | 00180  08 00 00 00 00 00 00 00  04 00 00 00 04 00 00 00  ................ | | 00190  50 03 00 00 00 00 00 00  50 03 00 00 00 00 00 00  P.......P....... | | 001a0  50 03 00 00 00 00 00 00  20 00 00 00 00 00 00 00  P....... ....... | | 001b0  20 00 00 00 00 00 00 00  08 00 00 00 00 00 00 00   ............... | | 001c0  04 00 00 00 04 00 00 00  70 03 00 00 00 00 00 00  ........p....... | | 001d0  70 03 00 00 00 00 00 00  70 03 00 00 00 00 00 00  p.......p....... | | 001e0  44 00 00 00 00 00 00 00  44 00 00 00 00 00 00 00  D.......D....... | | 001f0  04 00 00 00 00 00 00 00  07 00 00 00 04 00 00 00  ................ | | 00200  88 77 1e 00 00 00 00 00  88 87 1e 00 00 00 00 00  .w.............. | | 00210  88 87 1e 00 00 00 00 00  10 00 00 00 00 00 00 00  ................ | | 00220  90 00 00 00 00 00 00 00  08 00 00 00 00 00 00 00  ................ | | 00230  53 e5 74 64 04 00 00 00  50 03 00 00 00 00 00 00  S.td....P....... | | 00240  50 03 00 00 00 00 00 00  50 03 00 00 00 00 00 00  P.......P....... | | 00250  20 00 00 00 00 00 00 00  20 00 00 00 00 00 00 00   ....... ....... | | 00260  08 00 00 00 00 00 00 00  50 e5 74 64 04 00 00 00  ........P.td.... | | 00270  bc e6 1b 00 00 00 00 00  bc e6 1b 00 00 00 00 00  ................ | | 00280  bc e6 1b 00 00 00 00 00  d4 5e 00 00 00 00 00 00  .........^...... | | 00290  d4 5e 00 00 00 00 00 00  04 00 00 00 00 00 00 00  .^.............. | | 002a0  51 e5 74 64 06 00 00 00  00 00 00 00 00 00 00 00  Q.td............ | | 002b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................ | | 002c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................ | | 002d0  10 00 00 00 00 00 00 00  52 e5 74 64 04 00 00 00  ........R.td.... | | 002e0  88 77 1e 00 00 00 00 00  88 87 1e 00 00 00 00 00  .w.............. | | 002f0  88 87 1e 00 00 00 00 00  78 38 00 00 00 00 00 00  ........x8...... | | 00300  78 38 00 00 00 00 00 00  01 00 00 00 00 00 00 00  x8.............. |pread64(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32, 848) = 32 | 00000  04 00 00 00 10 00 00 00  05 00 00 00 47 4e 55 00  ............GNU. | | 00010  02 00 00 c0 04 00 00 00  03 00 00 00 00 00 00 00  ................ |pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0\30x\346\264ur\f|Q\226\236i\253-'o"..., 68, 880) = 68 | 00000  04 00 00 00 14 00 00 00  03 00 00 00 47 4e 55 00  ............GNU. | | 00010  18 78 e6 b4 75 72 0c 7c  51 96 9e 69 ab 2d 27 6f  .x..ur.|Q..i.-'o | | 00020  ae 6d 1d ee 04 00 00 00  10 00 00 00 01 00 00 00  .m.............. | | 00030  47 4e 55 00 00 00 00 00  03 00 00 00 02 00 00 00  GNU............. | | 00040  00 00 00 00                                       ....             |fstat(3, {st_mode=S_IFREG|0755, st_size=2029592, ...}) = 0mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f1ede058000pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784 | 00000  06 00 00 00 04 00 00 00  40 00 00 00 00 00 00 00  ........@....... | | 00010  40 00 00 00 00 00 00 00  40 00 00 00 00 00 00 00  @.......@....... | | 00020  10 03 00 00 00 00 00 00  10 03 00 00 00 00 00 00  ................ | | 00030  08 00 00 00 00 00 00 00  03 00 00 00 04 00 00 00  ................ | | 00040  a0 e6 1b 00 00 00 00 00  a0 e6 1b 00 00 00 00 00  ................ | | 00050  a0 e6 1b 00 00 00 00 00  1c 00 00 00 00 00 00 00  ................ | | 00060  1c 00 00 00 00 00 00 00  10 00 00 00 00 00 00 00  ................ | | 00070  01 00 00 00 04 00 00 00  00 00 00 00 00 00 00 00  ................ | | 00080  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................ | | 00090  e8 14 02 00 00 00 00 00  e8 14 02 00 00 00 00 00  ................ | | 000a0  00 10 00 00 00 00 00 00  01 00 00 00 05 00 00 00  ................ | | 000b0  00 20 02 00 00 00 00 00  00 20 02 00 00 00 00 00  . ....... ...... | | 000c0  00 20 02 00 00 00 00 00  24 76 17 00 00 00 00 00  . ......$v...... | | 000d0  24 76 17 00 00 00 00 00  00 10 00 00 00 00 00 00  $v.............. | | 000e0  01 00 00 00 04 00 00 00  00 a0 19 00 00 00 00 00  ................ | | 000f0  00 a0 19 00 00 00 00 00  00 a0 19 00 00 00 00 00  ................ | | 00100  c4 d2 04 00 00 00 00 00  c4 d2 04 00 00 00 00 00  ................ | | 00110  00 10 00 00 00 00 00 00  01 00 00 00 06 00 00 00  ................ | | 00120  88 77 1e 00 00 00 00 00  88 87 1e 00 00 00 00 00  .w.............. | | 00130  88 87 1e 00 00 00 00 00  18 50 00 00 00 00 00 00  .........P...... | | 00140  d8 8e 00 00 00 00 00 00  00 10 00 00 00 00 00 00  ................ | | 00150  02 00 00 00 06 00 00 00  80 ab 1e 00 00 00 00 00  ................ | | 00160  80 bb 1e 00 00 00 00 00  80 bb 1e 00 00 00 00 00  ................ | | 00170  e0 01 00 00 00 00 00 00  e0 01 00 00 00 00 00 00  ................ | | 00180  08 00 00 00 00 00 00 00  04 00 00 00 04 00 00 00  ................ | | 00190  50 03 00 00 00 00 00 00  50 03 00 00 00 00 00 00  P.......P....... | | 001a0  50 03 00 00 00 00 00 00  20 00 00 00 00 00 00 00  P....... ....... | | 001b0  20 00 00 00 00 00 00 00  08 00 00 00 00 00 00 00   ............... | | 001c0  04 00 00 00 04 00 00 00  70 03 00 00 00 00 00 00  ........p....... | | 001d0  70 03 00 00 00 00 00 00  70 03 00 00 00 00 00 00  p.......p....... | | 001e0  44 00 00 00 00 00 00 00  44 00 00 00 00 00 00 00  D.......D....... | | 001f0  04 00 00 00 00 00 00 00  07 00 00 00 04 00 00 00  ................ | | 00200  88 77 1e 00 00 00 00 00  88 87 1e 00 00 00 00 00  .w.............. | | 00210  88 87 1e 00 00 00 00 00  10 00 00 00 00 00 00 00  ................ | | 00220  90 00 00 00 00 00 00 00  08 00 00 00 00 00 00 00  ................ | | 00230  53 e5 74 64 04 00 00 00  50 03 00 00 00 00 00 00  S.td....P....... | | 00240  50 03 00 00 00 00 00 00  50 03 00 00 00 00 00 00  P.......P....... | | 00250  20 00 00 00 00 00 00 00  20 00 00 00 00 00 00 00   ....... ....... | | 00260  08 00 00 00 00 00 00 00  50 e5 74 64 04 00 00 00  ........P.td.... | | 00270  bc e6 1b 00 00 00 00 00  bc e6 1b 00 00 00 00 00  ................ | | 00280  bc e6 1b 00 00 00 00 00  d4 5e 00 00 00 00 00 00  .........^...... | | 00290  d4 5e 00 00 00 00 00 00  04 00 00 00 00 00 00 00  .^.............. | | 002a0  51 e5 74 64 06 00 00 00  00 00 00 00 00 00 00 00  Q.td............ | | 002b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................ | | 002c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................ | | 002d0  10 00 00 00 00 00 00 00  52 e5 74 64 04 00 00 00  ........R.td.... | | 002e0  88 77 1e 00 00 00 00 00  88 87 1e 00 00 00 00 00  .w.............. | | 002f0  88 87 1e 00 00 00 00 00  78 38 00 00 00 00 00 00  ........x8...... | | 00300  78 38 00 00 00 00 00 00  01 00 00 00 00 00 00 00  x8.............. |pread64(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32, 848) = 32 | 00000  04 00 00 00 10 00 00 00  05 00 00 00 47 4e 55 00  ............GNU. | | 00010  02 00 00 c0 04 00 00 00  03 00 00 00 00 00 00 00  ................ |pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0\30x\346\264ur\f|Q\226\236i\253-'o"..., 68, 880) = 68 | 00000  04 00 00 00 14 00 00 00  03 00 00 00 47 4e 55 00  ............GNU. | | 00010  18 78 e6 b4 75 72 0c 7c  51 96 9e 69 ab 2d 27 6f  .x..ur.|Q..i.-'o | | 00020  ae 6d 1d ee 04 00 00 00  10 00 00 00 01 00 00 00  .m.............. | | 00030  47 4e 55 00 00 00 00 00  03 00 00 00 02 00 00 00  GNU............. | | 00040  00 00 00 00                                       ....             |mmap(NULL, 2037344, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f1edde66000mmap(0x7f1edde88000, 1540096, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x22000) = 0x7f1edde88000mmap(0x7f1ede000000, 319488, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19a000) = 0x7f1ede000000mmap(0x7f1ede04e000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e7000) = 0x7f1ede04e000mmap(0x7f1ede054000, 13920, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f1ede054000close(3)                                = 0arch_prctl(ARCH_SET_FS, 0x7f1ede059540) = 0mprotect(0x7f1ede04e000, 16384, PROT_READ) = 0mprotect(0x55eda4c16000, 4096, PROT_READ) = 0mprotect(0x7f1ede09a000, 4096, PROT_READ) = 0munmap(0x7f1ede05a000, 73887)           = 0openat(AT_FDCWD, "/new_a.out", O_WRONLY|O_CREAT, 0600) = -1 EACCES (Permission denied)openat(AT_FDCWD, "a.out", O_RDONLY)     = 3fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0x3), ...}) = 0brk(NULL)                               = 0x55eda4dca000brk(0x55eda4deb000)                     = 0x55eda4deb000write(1, "copy failed\n", 12copy failed)           = 12exit_group(0)                           = ?+++ exited with 0 +++
tiansong@tiansong:~/Desktop$ strace -e read=3 -e trace=file,read,close ./fcopy.out  /new_a.out a.out execve("./fcopy.out", ["./fcopy.out", "/new_a.out", "a.out"], 0x7fff0de15440 /* 41 vars */) = 0access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3close(3)                                = 0openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300A\2\0\0\0\0\0"..., 832) = 832 | 00000  7f 45 4c 46 02 01 01 03  00 00 00 00 00 00 00 00  .ELF............ | | 00010  03 00 3e 00 01 00 00 00  c0 41 02 00 00 00 00 00  ..>......A...... | | 00020  40 00 00 00 00 00 00 00  18 e7 1e 00 00 00 00 00  @............... | | 00030  00 00 00 00 40 00 38 00  0e 00 40 00 44 00 43 00  ....@.8...@.D.C. | | 00040  06 00 00 00 04 00 00 00  40 00 00 00 00 00 00 00  ........@....... | | 00050  40 00 00 00 00 00 00 00  40 00 00 00 00 00 00 00  @.......@....... | | 00060  10 03 00 00 00 00 00 00  10 03 00 00 00 00 00 00  ................ | | 00070  08 00 00 00 00 00 00 00  03 00 00 00 04 00 00 00  ................ | | 00080  a0 e6 1b 00 00 00 00 00  a0 e6 1b 00 00 00 00 00  ................ | | 00090  a0 e6 1b 00 00 00 00 00  1c 00 00 00 00 00 00 00  ................ | | 000a0  1c 00 00 00 00 00 00 00  10 00 00 00 00 00 00 00  ................ | | 000b0  01 00 00 00 04 00 00 00  00 00 00 00 00 00 00 00  ................ | | 000c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................ | | 000d0  e8 14 02 00 00 00 00 00  e8 14 02 00 00 00 00 00  ................ | | 000e0  00 10 00 00 00 00 00 00  01 00 00 00 05 00 00 00  ................ | | 000f0  00 20 02 00 00 00 00 00  00 20 02 00 00 00 00 00  . ....... ...... | | 00100  00 20 02 00 00 00 00 00  24 76 17 00 00 00 00 00  . ......$v...... | | 00110  24 76 17 00 00 00 00 00  00 10 00 00 00 00 00 00  $v.............. | | 00120  01 00 00 00 04 00 00 00  00 a0 19 00 00 00 00 00  ................ | | 00130  00 a0 19 00 00 00 00 00  00 a0 19 00 00 00 00 00  ................ | | 00140  c4 d2 04 00 00 00 00 00  c4 d2 04 00 00 00 00 00  ................ | | 00150  00 10 00 00 00 00 00 00  01 00 00 00 06 00 00 00  ................ | | 00160  88 77 1e 00 00 00 00 00  88 87 1e 00 00 00 00 00  .w.............. | | 00170  88 87 1e 00 00 00 00 00  18 50 00 00 00 00 00 00  .........P...... | | 00180  d8 8e 00 00 00 00 00 00  00 10 00 00 00 00 00 00  ................ | | 00190  02 00 00 00 06 00 00 00  80 ab 1e 00 00 00 00 00  ................ | | 001a0  80 bb 1e 00 00 00 00 00  80 bb 1e 00 00 00 00 00  ................ | | 001b0  e0 01 00 00 00 00 00 00  e0 01 00 00 00 00 00 00  ................ | | 001c0  08 00 00 00 00 00 00 00  04 00 00 00 04 00 00 00  ................ | | 001d0  50 03 00 00 00 00 00 00  50 03 00 00 00 00 00 00  P.......P....... | | 001e0  50 03 00 00 00 00 00 00  20 00 00 00 00 00 00 00  P....... ....... | | 001f0  20 00 00 00 00 00 00 00  08 00 00 00 00 00 00 00   ............... | | 00200  04 00 00 00 04 00 00 00  70 03 00 00 00 00 00 00  ........p....... | | 00210  70 03 00 00 00 00 00 00  70 03 00 00 00 00 00 00  p.......p....... | | 00220  44 00 00 00 00 00 00 00  44 00 00 00 00 00 00 00  D.......D....... | | 00230  04 00 00 00 00 00 00 00  07 00 00 00 04 00 00 00  ................ | | 00240  88 77 1e 00 00 00 00 00  88 87 1e 00 00 00 00 00  .w.............. | | 00250  88 87 1e 00 00 00 00 00  10 00 00 00 00 00 00 00  ................ | | 00260  90 00 00 00 00 00 00 00  08 00 00 00 00 00 00 00  ................ | | 00270  53 e5 74 64 04 00 00 00  50 03 00 00 00 00 00 00  S.td....P....... | | 00280  50 03 00 00 00 00 00 00  50 03 00 00 00 00 00 00  P.......P....... | | 00290  20 00 00 00 00 00 00 00  20 00 00 00 00 00 00 00   ....... ....... | | 002a0  08 00 00 00 00 00 00 00  50 e5 74 64 04 00 00 00  ........P.td.... | | 002b0  bc e6 1b 00 00 00 00 00  bc e6 1b 00 00 00 00 00  ................ | | 002c0  bc e6 1b 00 00 00 00 00  d4 5e 00 00 00 00 00 00  .........^...... | | 002d0  d4 5e 00 00 00 00 00 00  04 00 00 00 00 00 00 00  .^.............. | | 002e0  51 e5 74 64 06 00 00 00  00 00 00 00 00 00 00 00  Q.td............ | | 002f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................ | | 00300  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................ | | 00310  10 00 00 00 00 00 00 00  52 e5 74 64 04 00 00 00  ........R.td.... | | 00320  88 77 1e 00 00 00 00 00  88 87 1e 00 00 00 00 00  .w.............. | | 00330  88 87 1e 00 00 00 00 00  78 38 00 00 00 00 00 00  ........x8...... |close(3)                                = 0openat(AT_FDCWD, "/new_a.out", O_WRONLY|O_CREAT, 0600) = -1 EACCES (Permission denied)openat(AT_FDCWD, "a.out", O_RDONLY)     = 3copy failed+++ exited with 0 +++
tiansong@tiansong:~/Desktop$ strace -e trace=write ./fcopy.out ./new_a.out a.out write(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`\20\0\0\0\0\0\0"..., 512) = 512write(3, "\4\0\0\0\4\0\0\0X\3\0\0\0\0\0\0X\3\0\0\0\0\0\0X\3\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\0\0\0\22\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\363\17\36\372H\203\354\10H\213\5\331/\0\0H\205\300t\2\377\320H\203\304\10\303\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\1\0\2\0Hello World!\0\0\0\0\1\33\3;@\0\0\0\7\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\270=\0\0\0\0\0\0\33\0\0\0\0\0\0\0\10\0\0\0\0\0\0\0\32\0\0\0\0\0\0\0"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\10@\0\0\0\0\0\0GCC: (Ubuntu 9.4"..., 512) = 512write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\3\0\23\0\24 \0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512write(3, "\255\0\0\0\0\0\25\0\300=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\276\0\0\0\1\0\27\0"..., 512) = 512write(3, "I\21\0\0\0\0\0\0\33\0\0\0\0\0\0\0\300\1\0\0\21\2\31\0\20@\0\0\0\0\0\0"..., 512) = 512write(3, "u_init\0__bss_start\0main\0__TMC_EN"..., 512) = 512write(3, "\2\0\0\0\0\0\0\08\3\0\0\0\0\0\08\3\0\0\0\0\0\0 \0\0\0\0\0\0\0"..., 512) = 512write(3, "\2\0\0\0\0\0\0\0 \5\0\0\0\0\0\0 \5\0\0\0\0\0\0\300\0\0\0\0\0\0\0"..., 512) = 512write(3, "\2\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0\21\0\0\0\0\0\0\0"..., 512) = 512write(3, "\3\0\0\0\0\0\0\0\20@\0\0\0\0\0\0\0200\0\0\0\0\0\0\10\0\0\0\0\0\0\0"..., 312) = 312write(1, "copy completed\n", 15copy completed)        = 15+++ exited with 0 +++