C语言实现Linux命令——od

实现要求:

- 第二周测试1-vi
  1. 每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号
  2. 用Vi输入图中代码,并用gcc编译通过
  3. 在Vi中使用K查找printf的帮助文档
  4. 提交vi编辑过程截图,要全屏,包含自己的学号信息

c语言 运行JAVA_全屏

依次输入每个文件内容

使用命令gcc *.c一直编译成功

c语言 运行JAVA_文件名_02

第二周测试2-gcc测试
  1. 用gcc 进行预处理,编译,汇编,链接vi输入的代码
  2. 生成的可执行文件中要有自己的学号

3.提交预处理,编译,汇编,链接,运行过程截图,要全屏,包含自己的学号信息

  • 一般格式为:gcc [选项] 要编译的文件 [选项] 目标文件gcc -E hello.c -o hello.i
  • gcc将代码翻译成汇编语言,使用选项-S只进行编译而不进行汇编,结果生成汇编代码。gcc -S hello.i -o hello.s
  • 将.s文件转成目标文件,使用选项-c可以看到汇编代码转换为二进制目标代码。gcc -c hello.s -o hello.o

默认搜索链接到libc.so.6函数库当中,调用库文件中已经实现的函数。
运行:./hello

c语言 运行JAVA_c/c++_03

第二周测试3-gdb测试
  1. 用gcc -g编译vi输入的代码
  2. 在main函数中设置一个行断点
  3. 在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点
  4. 提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

设置断点

函数:b 文件名.c:函数名

行:b 行数

条件:b 行数 if 表达式(例如:b 9 if == 12)

临时:tb [文件名:]行号或函数名 <条件表达式>

课堂实践过程:

gcc -g *.c -o main
gdb main
b main
b 6 if i==2662
info break
r
q

c语言 运行JAVA_文件名_04

第二周测试4-静态库的测试
  1. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
  2. 提交静态库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

静态链接库的生成:gcc -c 文件名.c ar rcsv libxxx.a xxx.o;

静态库的使用:gcc -o 文件名 文件名.c -L. -lxxx

课堂实践过程:

ar cr math.a add.o sub.o mul.o div.o

gcc main.c ./math.a -o main

c语言 运行JAVA_全屏_05

第二周测试5-共享库
  1. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
  2. 提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

共享库的生成:gcc -fPIC -c xxx.c gcc -shared -o libxxx.so xxx.o;

共享库的使用:gcc -o main main.c -L. -lxxx

课堂实践过程:

生成:

gcc -fPIC -c add.c sub.c mul.c div.c

gcc -shared -o libmymath.so add.o sub.o mul.o div.o

使用:

gcc -o main main.c -L. -lmymath

c语言 运行JAVA_文件名_06

第二周测试6-Makefile

1 写出编译上面vi编辑代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以.

2 提交Make过程截图,要全屏,包含自己的学号信息

testmymath:MYOD.o change.o ascii.o

gcc MYOD.o change.o ascii.o -o testmymath

MYOD.o:MYOD.c head.h

gcc -c MYOD.c

change.o:change.o head.h

gcc -c change.o

ascii.o:ascii.c head.h

gcc -c ascii.c

c语言 运行JAVA_c/c++_07

myod

实现od -tc -tx1 XXX命令,

-tc表示输出ASCII字符,

-tx1表示以十六进制输出,
每组输出一字节。

c语言 运行JAVA_c语言 运行JAVA_08

动态库

c语言 运行JAVA_c/c++_09

Makefile

c语言 运行JAVA_c/c++_10