作业补交
作业补交
课堂测试二
编写一个程序 “week0602学号.c",用show_int(), show_float()打印一下你的4位学号,参考教材P33打印出匹配的位序列。
遇到的问题
1.返回值的类型定义错误;
如图:
解决:在主函数前加上int
课堂测试三
编写一个程序 “week0603学号.c",运行下面代码:
1 short int v = -学号后四位
2 unsigned short uv = (unsigned short) v
3 printf("v = %d, uv = %u\n ", v, uv);
- 在第三行设置断点用gdb调试,用p /x v; p /x uv 查看变量的值,提交调试结果截图,要全屏,要包含自己的学号信息
3 分析p /x v; p /x uv 与程序运行结果的不同和联系
遇到的问题:
问题:在GDB调试过程中,一开始将断点设置在第四行,运行的结果输出不是我的学号,而是0;
解决:最后发现我设置断点太早,导致运行在赋值之前,就导致了赋值结果为0;所以我将断点设置在第六行,结果为十六进制的
课堂实验三
1 通过输入gcc -S -o main.s main.c 将下面c程序”week0603学号.c“编译成汇编代码
int g(int x){
return x+3;
}
int f(int x){
int i = 学号后两位;
return g(x)+i;
}
int main(void){
return f(8)+1;
}
- 参考http://www.cnblogs.com/lxm20145215----/p/5982554.html,使用gdb跟踪汇编代码,在纸上画出f中每一条语句引起的eip(rip),ebp(rbp),esp(rsb),eax(rax)的值和栈的变化情况。提交照片,要有学号信息。
在编译过程中遇到了很多的问题,比如输入gcc - g example.c -o example -m32会显示fatal error: sys/cdefs.h: No such file or directory,查了资料以后说没有环境需要输命令下载sudo apt-get install libc6-dev-i386,
步骤
- gcc -g week06055239.c -o week06055239 -m32编译程序
- gdb week06055239进入gdb模式
- 设置断点在main函数调用f函数的位置gdb> b 10
- gdb> run运行
- gdb> disassemble反汇编
- display /i $pc
- i r
- x查看内存中的内容
- si执行下一条汇编