第一篇:Bomb Lab实验报告
课程实验报告
课 程 名 称:
计算机系统原理实验 实 验 名 称:
Bomb Lab 专 业 班 级: 姓
名:
学
号:
完 成 时 间:
2017.4.19
一、实验目的
熟悉汇编程序,学习gdb调试工具,熟悉并掌握函数调用过程中的栈帧结构的变化。
二、实验环境
个人PC,Linux发行版本,终端,gdb调试工具。
三、实验要求
1.本次实验为熟悉汇编程序及其调试方法的实验。
2.实验内容包含2个文件bomb(可执行文件)和bomb.c(c源文件)。3.使用gdb工具反汇编出汇编代码,结合c语言文件找到每个关卡的入口函数。
4.分析汇编代码,找到在每个phase程序段中,引导程序跳转到“explode_bomb”程序段的地方,并分析其成功跳转的条件,以此为突破口寻找应该在命令行输入何种字符通关。
5.本实验一共有7个关卡,包括6个普通关卡和1个隐藏关卡。要求至少通过6个普通关卡。
四、实验内容及操作步骤
(一)准备过程
1.解压文件夹得到“bomb”,“bomb.c”,“README-bomblab.txt”以及“实验基本内容与要求.txt”等文档。查看“实验基本内容与要求.txt”了解实验内容与要求后打开bomb.c文件,编译发现不能通过,代码不完整,所以bomb.c文件只能用来作为参考。查看bomb.c文件发现控制密码正确的6个函数分别为phase_1,phase_2,phase_3,phase_4,phase_5,phase_6,因此可以对bomb文件反汇编得到汇编文本,结合汇编文本与bomb.c文本进一步分析。
2.进入Ubuntu,将bom和bomb.c文档复制到主文件目录下,ctrl+alt+t打开终端,通过“objdump-d bomb > bomb.s”命令将可执行文件反汇编成bomb.s文件,并且可以通过“gdb-q bomb”进行调试。3.将bomb.c复制成文本后打开bomb.c查看汇编代码并进一步分析。
(二)关卡分析
1.phase_1 phase_1汇编代码及注释如下: 08048f61
: 8048f61: 55 8048f62: 89 e5 8048f64: 83 ec 18 位的栈空间
8048f67: c7 44 24 04 5c a1 04
push %ebp mov %esp,%ebp
sub $0x18,%esp #开辟一个2
4movl $0x804a15c,0x4(%esp)#将0x804a15c存到%eap+4的位置,x/s 0x804a15c 得到 “We have to stand with our North Korean allies.” 8048f6e: 08 8048f6f: 8b 45 08 8048f72: 89 04 24 处的值存到%esp 8048f75: e8 31 00 00 00
test %eax,%eax
je 8048f83
call 8048fab mov 0x8(%ebp),%eax mov %eax,(%esp)
#将%ebp+8#%eax=0则跳出函数,否则跳到爆炸函数,可以看出,调用
call 80490d1
思路与分析:
nop nop nop nop nop nop nop nop 通过call 8048fab ,call 80490d1 由上面分析可知地址0x804a15c中存着正确的字符串,我们只要输入相同的字符串就可以通过关卡。进入gdb,通过命令x/s 0x804a15c查看该字符串为:“We have to stand with our North Korean allies.” 所以phase_1的通关密码为:“We have to stand with our North Korean allies.”通过 r 命令运行程序,输入该字符串则通过第一关: 结论与心得: 通过分析汇编代码,通过字符串比较函数 2.phase_2 phase_2汇编代码及注释如下: 08048d6a : 8048d6a: 55 push %ebp 8048d6b: 89 e5 mov %esp,%ebp 8048d6d: 56 push %esi 8048d6e: 53 push %ebx 8048d6f: 83 ec 30 sub $0x30,%esp 8048d72: 8d 45 e0 lea-0x20(%ebp),%eax 8048d75: 89 44 24 04 mov %eax,0x4(%esp)一个数字的地址放到%esp+4的位置 8048d79: 8b 45 08 mov 0x8(%ebp),%eax 8048d7c: 89 04 24 mov %eax,(%esp)8048d7f: e8 87 03 00 00 call 804910b #读取六个数字 8048d84: 83 7d e0 00 cmpl $0x0,-0x20(%ebp)8048d88: 75 06 jne 8048d90 #0和-0x20(%ebp)比较,不相等就爆炸 8048d8a: 83 7d e4 01 cmpl $0x1,-0x1c(%ebp)8048d8e: 74 05 je 8048d95 #1和-0x1c(%ebp)比较,相等就跳过爆炸 8048d90: e8 3c 03 00 00 call 80490d1 #将第 8048d95: 8d 5d e8 lea-0x18(%ebp),%ebx #将第三个数字的地址传到%ebx中,即现在%ebx中存着第三个数字的地址 8048d98: 8d 75 f8 lea-0x8(%ebp),%esi #将%ebx的地址传到%esi,%esi用于待会的判断结束条件,%ebx存的地址一直循环加4,循环直到%ebx的下一个地址是%esi就结束】 8048d9b: 8b 43 fc 二个数放到%eax寄存器中 8048d9e: 03 43 f8 第二个数和第一个数的和 8048da1: 39 03 8048da3: 74 05 cmp %eax,(%ebx) add-0x8(%ebx),%eax #计算mov-0x4(%ebx),%eax #将第je 8048daa #前两个数的和与第三个数相比较,相等则跳过炸弹 8048da5: e8 27 03 00 00 8048daa: 83 c3 04 call 80490d1 8048dad: 39 f3 8048daf: 75 ea cmp %esi,%ebx jne 8048d9b #比较现在%esi和%ebx里面的值是否相等,不相等则循环,否则结束。其实两个寄存器中存的都是地址,为的是保证只输入6个数,因为当输入第7个数时,%ebx=%esi 8048db1: 83 c4 30 8048db4: 5b 8048db5: 5e 8048db6: 5d 8048db7: c3 思路与分析: 通过call 804910b add $0x30,%esp pop %ebx pop %esi pop %ebp ret #释放栈帧 存着第二个数字,依次类推。通过cmpl $0x0,-0x20(%ebp),jne 8048d90 和cmpl $0x1,-0x1c(%ebp),je 8048d95 知道第一个数字必须是0,第二个数字必须是1,否则就爆炸。命令lea-0x18(%ebp),%ebx初始化寄存器%ebx的值,将第三个数字的地址传到%ebx中.lea-0x8(%ebp),%esi将%ebx的地址传到%esi,%esi用于待会的判断结束条件,%ebx存的地址一直循环加4,循环直到%ebx的下一个地址是%esi就结束,mov-0x4(%ebx),%eax将第二个数放到%eax寄存器中,add-0x8(%ebx),%eax计算第二个数和第一个数的和,cmp %eax,(%ebx),je 8048daa 前两个数的和与第三个数相比较,相等则跳过炸弹。add $0x4,%ebx将%ebx的地址加4,现在%ebx中存着第四个数字的地址,之后%ebx一直加4,知道循环完6个数字。通过上面的分析知道,输入的前两个数字为0和1,后面的数字等于前面两个数字的和。所以,这六个数字为Fibonacci数列的前六项。为0 1 1 2 3 5。输入这6个数字可通过phase_2.结论与心得: 第二关需要弄懂栈帧结构的变化,通过add $0x4,%ebx将%ebx的地址加4,然后判断前两个数字的和与当前位置的数是否相等。结合第一个和第二个数字是0和1知道结果为0 1 1 2 3 5。 3.phase_3 phase_3汇编代码及注释如下: 08048ea1 : 8048ea1: 55 8048ea2: 89 e5 8048ea4: 83 ec 28 8048ea7: 8d 45 f0 个数的位置 push %ebp mov %esp,%ebp sub $0x28,%esp lea-0x10(%ebp),%eax #第二 8048eaa: 89 44 24 0c 8048eae: 8d 45 f4 个数的位置 8048eb1: 89 44 24 08 8048eb5: c7 44 24 04 3e a2 04 mov %eax,0xc(%esp) lea-0xc(%ebp),%eax #第一 mov %eax,0x8(%esp)movl $0x804a23e,0x4(%esp)#通过查看0x804a23e的内容,即x/s 0x804a23e,显示为“%d %d”,提示输入两个整型数 8048ebc: 08 8048ebd: 8b 45 08 8048ec0: 89 04 24 8048ec3: e8 78 f9 ff ff <__isoc99_sscanf@plt> 在%eax里 8048ec8: 83 f8 01 8048ecb: 7f 05 #至少输入2个数,否则爆炸 8048ecd: e8 ff 01 00 00 8048ed2: 83 7d f4 07 8048ed6: 77 6b call 80490d1 cmp $0x1,%eax jg 8048ed2 mov 0x8(%ebp),%eax mov %eax,(%esp)call 8048840 #isoc99标准输入变量,应该是把输入的数字个数存#第1个数大于7爆炸,所以,第一个数需要小于等于7 8048ed8: 8b 45 f4 mov-0xc(%ebp),%eax 将第一个数存到%eax中 8048edb: ff 24 85 a0 a1 04 08 jmp *0x804a1a0(,%eax,4) #p/x 跳转至0x804a1a0+4*%eax(存放第一个数)中的内容所指的行数 *0x804a1a0+4*%eax 8048ee2: b8 00 00 00 00 8048ee7: eb 53 8048ee9: b8 00 00 00 00 8048eee: 66 90 mov $0x0,%eax jmp 8048f3c mov $0x0,%eax xchg %ax,%ax 8048ef0: eb 45 8048ef2: b8 00 00 00 00 5的时候跳到这里 8048ef7: eb 39 8048ef9: b8 00 00 00 00 4的时候跳到这里 8048efe: 66 90 8048f00: eb 2b 8048f02: b8 00 00 00 00 4的时候跳到这里 8048f07: eb 1f 8048f09: b8 00 00 00 00 2的时候跳到这里 8048f0e: 66 90 8048f10: eb 11 8048f12: b8 14 03 00 00 jmp 8048f37 mov $0x0,%eax #第一个数等于 jmp 8048f32 mov $0x0,%eax #第一个数等于 xchg %ax,%ax jmp 8048f2d mov $0x0,%eax #第一个数等于 jmp 8048f28 mov $0x0,%eax #第一个数等于 xchg %ax,%ax jmp 8048f23 mov $0x314,%eax #第一个数为0的时候跳到这里(p/x *0x804a1a0)首先x=778,最后第二个数等于147 8048f17: eb 05 #跳转到 8048f1e 这一行 8048f19: b8 00 00 00 00 1的时候跳到这里 8048f1e: 2d 5a 03 00 00 8048f23: 05 ef 02 00 00 8048f28: 2d 16 02 00 00 8048f2d: 05 16 02 00 00 8048f32: 2d 16 02 00 00 8048f37: 05 16 02 00 00 8048f3c: 2d 16 02 00 00 sub $0x35a,%eax add $0x2ef,%eax sub $0x216,%eax add $0x216,%eax sub $0x216,%eax add $0x216,%eax sub $0x216,%eax #x=x-858 #x=x+751 #x=x-534 #x=x+534 #x=x-534 #x=x+534 #x=x-534 mov $0x0,%eax #第一个数等于jmp 8048f1e 8048f41: eb 0a #跳转到 8048f4d 这一行 8048f43: e8 89 01 00 00 8048f48: b8 00 00 00 00 8048f4d: 83 7d f4 05 8048f51: 7f 05 jmp 8048f4d call 80490d1 #第一个数字需要小于等于5,否则爆炸 8048f53: 3b 45 f0 8048f56: 74 05 cmp-0x10(%ebp),%eax je 8048f5d #0,147;1-641;2,217; 3,-534; 4,0; 5,-534 call 80490d1 思路与分析: 观察到指令movl $0x804a23e,0x4(%esp),通过查看0x804a23e的内容,即x/s 0x804a23e,显示为“%d %d”,提示输入两个整型数。call 8048840 <__isoc99_sscanf@plt>,调用isoc99标准输入变量,是把输入的数字个数存在%eax里返回。通过cmp $0x1,%eax和jg 8048ed2 知道至少输入2个数,否则爆炸。通过cmpl $0x7,-0xc(%ebp)和ja 8048f43 知道第一个数字小于等于7,由cmpl $0x5,-0xc(%ebp)和jg 8048f58 知道输入的数字要小于等于5,所以输入的数字范围为0-5。jmp *0x804a1a0(,%eax,4)为switch分支结构,%eax存着输入的数字的值,当输入的数组是0的时候,查看*0x804a1a0的值,得到$1 = 0x8048f12,即跳转到0x8048f12处。当输入的数字为1-5时依次类推。得到的地址分别为: cmp-0x10(%ebp),%eax和je 8048f5d 即为判断经过一系列运算后求的值是否与正确的值相等。通过分析汇编代码,我们可以知道当输入不同的x值,等到的y值如下: 当x=0时,y=788-858+751-534+534-534+534-534=147 当x=1时,y=-858+751-534+534-534+534-534=-641 当x=2时,y=751-534+534-534+534-534=217 当x=3时,x=-534+534-534+534-534=-534 当x=4时,x=534-534+534-534=0 当x=5时,x=-534+534-534=-534 所以可以输入六组数据:0 147;1-641;2 217;3-534;4 0;5-534。随便输入一组都能通过炸弹。 结论与心得: 第三关主要用到了switch分支结构,根据输如的不同数字跳转到不同位置进行不同的运算,最后得到结果。首先分析输入数字的范围,然后通过判断跳转的位置来准确计算。 4.phase_4 phase_4汇编代码及注释如下: 08048e2e : 8048e2e: 55 push %ebp 8048e2f: 89 e5 8048e31: 83 ec 28 8048e34: 8d 45 f0 个数字 8048e37: 89 44 24 0c 8048e3b: 8d 45 f4 个数字 8048e3e: 89 44 24 08 8048e42: c7 44 24 04 3e a2 04 输入x/s 0x804a23e 显示为 8048e49: 08 8048e4a: 8b 45 08 8048e4d: 89 04 24 8048e50: e8 eb f9 ff ff <__isoc99_sscanf@plt> “%d %d” mov %esp,%ebp sub $0x28,%esp #开辟栈空间 lea-0x10(%ebp),%eax #第二 mov %eax,0xc(%esp)lea-0xc(%ebp),%eax #第一 mov %eax,0x8(%esp)movl $0x804a23e,0x4(%esp)#,提示输入两个整型数字 mov 0x8(%ebp),%eax mov %eax,(%esp)call 8048840 #标准输入变量,将输入的数字个数存在%eax中 cmp $0x2,%eax jne 8048e66 8048e55: 83 f8 02 8048e58: 75 0c #要求输入2个数字,即输入的数字个数不等于2则爆炸 8048e5a: 8b 45 f4 mov-0xc(%ebp),%eax #将第一个数放到%eax中 8048e5d: 85 c0 8048e5f: 78 05 test %eax,%eax js 8048e66 #判断第一个数,如果是负数就爆炸,所以需要%eax>=0 8048e61: 83 f8 0e 8048e64: 7e 05 cmp $0xe,%eax jle 8048e6b #比较第一个数和14(0xe)的大小,如果%eax<=14,则继续执行,否则爆炸 8048e66: e8 66 02 00 00 8048e6b: c7 44 24 08 0e 00 00 call 80490d1 #将0xe存到%esp+8 8048e72: 00 8048e73: c7 44 24 04 00 00 00 0x0存到%esp+4 8048e7a: 00 8048e7b: 8b 45 f4 8048e7e: 89 04 24 数存到%esp 8048e81: e8 da fc ff ff func4函数(递归函数)8048e86: 83 f8 01 y存放在%eax寄存器中 8048e89: 75 06 #y要等于1,否则爆炸 8048e8b: 83 7d f0 01 8048e8f: 74 0c #第二个数要等于1,否则爆炸 8048e91: 8d b4 26 00 00 00 00 8048e98: e8 34 02 00 00 8048e9d: c9 8048e9e: 66 90 8048ea0: c3 call 8048b60 func4汇编代码及注释如下: 08048b60 push %ebp mov %esp,%ebp sub $0x18,%esp #建立一个栈帧 lea 0x0(%esi,%eiz,1),%esi call 80490d1 cmpl $0x1,-0x10(%ebp)je 8048e9d jne 8048e91 cmp $0x1,%eax #函数的返回值call 8048b60 #将第一个 movl $0x0,0x4(%esp) #将 8048b66: 89 5d f8 8048b69: 89 75 fc 8048b6c: 8b 55 08 #%edx->x 8048b6f: 8b 45 0c #%eax->y=0x0=0 8048b72: 8b 5d 10 #%ebx->z=0xe=14 func4(x,y,z) mov %ebx,-0x8(%ebp)mov %esi,-0x4(%ebp)mov 0x8(%ebp),%edx mov 0xc(%ebp),%eax mov 0x10(%ebp),%ebx 8048b75: 89 d9 t的过程,#t=z 8048b77: 29 c1 8048b79: 89 ce 8048b7b: c1 ee 1f 逻辑右移31位 8048b7e: 8d 0c 0e #t=(z-y)>>31+(z-y)8048b81: d1 f9 #t=[(z-y)>>31+(z-y)]>>1 8048b83: 01 c1 #t=[(z-y)>>31+(z-y)]/2+y = mov %ebx,%ecx #计算临时变量 sub %eax,%ecx #t=z-y mov %ecx,%esi #t=z-y shr $0x1f,%esi #t=(z-y)>>31,lea(%esi,%ecx,1),%ecx sar %ecx add %eax,%ecx(14>>31+14)/2+0=7 cmp %edx,%ecx #将7和x(第 8048b85: 39 d1 一个数)比较,即7-x 8048b87: 7e 17 #当7<=x就跳转到 8048ba0 jle 8048ba0 否则继续执行下一条指令 sub $0x1,%ecx #t=t-1 8048b89: 83 e9 01 if(7>x)8048b8c: 89 4c 24 08 t-1移到0x8(%esp),z=t-1 8048b90: 89 44 24 04 mov %ecx,0x8(%esp)#将 mov %eax,0x4(%esp)#y 8048b94: 89 14 24 8048b97: e8 c4 ff ff ff 8048b9c: 01 c0 结果存放到%eax中 8048b9e: eb 20 结束 8048ba0: b8 00 00 00 00 跳转到这里,此时令y=0 8048ba5: 39 d1 8048ba7: 7d 17 mov %edx,(%esp)#x call 8048b60 #y=2*y,将 jmp 8048bc0 #mov $0x0,%eax #if(x>=7)时就 cmp %edx,%ecx jge 8048bc0 8048ba9: 89 5c 24 08 8048bad: 83 c1 01 8048bb0: 89 4c 24 04 8048bb4: 89 14 24 8048bb7: e8 a4 ff ff ff 8048bbc: 8d 44 00 01 #y=z*y+1,将结果存到%eax中 8048bc0: 8b 5d f8 #if(t==x)跳转到这里 8048bc3: 8b 75 fc 8048bc6: 89 ec 8048bc8: 5d 8048bc9: c3 思路与分析: 首先分析phase_4汇编代码。movl $0x804a23e,0x4(%esp)输入x/s 0x804a23e 显示为 “%d %d”,提示输入两个整型数字。call 8048840 mov-0x4(%ebp),%esi mov %ebp,%esp pop %ebp ret mov-0x8(%ebp),%ebxmov %ebx,0x8(%esp)add $0x1,%ecx #y=t+1 mov %ecx,0x4(%esp)mov %edx,(%esp) #x y=t+1 #z call 8048b60 任然要求输入2个数字。通过mov-0xc(%ebp),%eax,test %eax,%eax,js 8048e66 知道第一个数为非负数。由cmp $0xe,%eax和jle 8048e6b 又可以知道第一个数字要小于等于14。之后分析func4函数,分别用%esp,0x4(%esp),%0x8(%esp)传递三个参数,设为x,y,z。参数y存储在寄存器%eax中并作为最终的返回值,最终结果为1,也就是n的值;参数x和z存储于寄存器%edx和%ebx中,并通堆栈指针来保存或改变(配合其他指令)。在func4中进一步缩小了第一个数字的范围。现在需要第一个数字的范围为7-14。通过分析func4汇编代码,可以得到如下的c代码: # #include } else{ } y=0;if(t==x)return y;z=t-1;func4();y=z*y; y=t+1; func4();y=2*y+1;# # # # # # } y=0;z=0xe;ret=func4();if(ret==1)printf(“m=%d,n=%dn”,x,ret)# return 0;# } 第二个数必须为1。经过分析可以有三组数。分别是: 8 1;9 1;11 1。任意输入一组数就能通过关卡。 结论与心得: 这一关中在函数里调用了另外一个函数func4,func4函数中运用到了线性递归。通过分析汇编代码可以写出相应的c代码,通过分析第一个数范围在7-14,第二个数必须为1,结合c代码可以得出结果。 5.phase_5 phase_5汇编代码及注释如下: 08048db8 : 8048db8: 55 8048db9: 89 e5 8048dbb: 56 8048dbc: 53 8048dbd: 83 ec 20 8048dc0: 8d 45 f0 8048dc3: 89 44 24 0c 个数 push %ebp mov %esp,%ebp push %esi push %ebx sub $0x20,%esp #开辟栈空间 lea-0x10(%ebp),%eax mov %eax,0xc(%esp) #第二 8048dc7: 8d 45 f4 8048dca: 89 44 24 08 个数 8048dce: c7 44 24 04 3e a2 04 输入x/s 0x804a23e 显示为 8048dd5: 08 8048dd6: 8b 45 08 8048dd9: 89 04 24 8048ddc: e8 5f fa ff ff <__isoc99_sscanf@plt> “%d %d” lea-0xc(%ebp),%eax mov %eax,0x8(%esp) #第一 movl $0x804a23e,0x4(%esp)#,提示输入两个整型数字 mov 0x8(%ebp),%eax mov %eax,(%esp)call 8048840 #将输入的数字个数返回到%eax中 cmp $0x1,%eax jg 8048deb 8048de1: 83 f8 01 8048de4: 7f 05 #若输入的数字个数大于1则跳转,否则爆炸,所以至少输入两个数字 8048de6: e8 e6 02 00 00 8048deb: 8b 45 f4 8048dee: 83 e0 0f call 80490d1 “与” 0xf,这个操作可以只保留第一个数的二进制后四位(0“与”任何数都为0) 8048df1: 89 45 f4 mov %eax,-0xc(%ebp)#经过上面的操作后再把第一个数放回原来的位置(只保留二进制表示的后四位) 8048df4: 83 f8 0f 8048df7: 74 29 cmp $0xf,%eax je 8048e22 #比较,如果第一个数和0xf(1111)相等则爆炸,说明第一个数的二进制后四位不能为“1111”,否则爆炸 8048df9: b9 00 00 00 00 用来累加%eax,初始化为0 8048dfe: ba 00 00 00 00 循环次数,初始化为0 mov $0x0,%edx #%edx=0 ; mov $0x0,%ecx #%ecx=0 ; 8048e03: bb c0 a1 04 08 mov $0x804a1c0,%ebx # p *0x804a1c0=10,这个地址为数组的首地址,求的值为第一个元素的值,求数组元素:p *0x804a1c0@16={10, 2, 14, 7, 8, 12, 15, 11, 0, 4, 1, 13, 3, 9, 6, 5} 8048e08: 83 c2 01 从这里开始 8048e0b: 8b 04 83 mov(%ebx,%eax,4),%eaxadd $0x1,%edx #%edx=1,循环#%eax=(%ebx+4*%eax)=(0x804a1c0+4*%eax);%eax用来保存求出的数组中的某个值 8048e0e: 01 c1 #%ecx=%ecx+%eax 8048e10: 83 f8 0f 8048e13: 75 f3 cmp $0xf,%eax jne 8048e08 add %eax,%ecx#如果此时%eax(此时的数组元素值)不等于15,则继续循环,否则执行下一语句 8048e15: 89 45 f4 在的元素值放回第一个数的位置??? 8048e18: 83 fa 0f 8048e1b: 75 05 cmp $0xf,%edx jne 8048e22 mov %eax,-0xc(%ebp)#将现#如果%edx不等于15,则爆炸,所以,要循环15次 8048e1d: 39 4d f0 cmp %ecx,-0x10(%ebp) #累加的结果 8048e20: 74 05 #判断第二个数的值 8048e22: e8 aa 02 00 00 8048e27: 83 c4 20 8048e2a: 5b 8048e2b: 5e 8048e2c: 5d call 80490d1 je 8048e27 8048e2d: c3 思路与分析: ret movl $0x804a23e,0x4(%esp)仍然提示输入两个整型数字,and $0xf,%eax第一个数 “与” 0xf,这个操作可以只保留第一个数的二进制后四位(0“与”任何数都为0)。mov %eax,-0xc(%ebp)经过上面的操作后再把第一个数放回原来的位置(只保留二进制表示的后四位)。cmp $0xf,%eax和je 8048e22 比较,如果第一个数和0xf(1111)相等则爆炸,说明第一个数的二进制后四位不能为“1111”,否则爆炸。mov $0x804a1c0,%ebx这个地址为数组的首地址,求的值为第一个元素的值。求数组元素:p *0x804a1c0@16={10, 2, 14, 7, 8, 12, 15, 11, 0, 4, 1, 13, 3, 9, 6, 5} 通过分析汇编代码可以推出如下c代码: # p *0x804a1c0@16={10, 2, 14, 7, 8, 12, 15, 11, 0, 4, 1, 13, 3, 9, 6, 5} # sum=0;# for(i=1;n!=15;i++){ # # # } # if(i==15)# return sum;n=a[n];sum+=n;n最后需要等于15,采用逆推的方法可以知道从开始到最后n的值分别为(因为开始循环之前取了一个n,所以总的有16个n):5,12,3,7,11,13,9,4,8,0,10,1,2,14,6,15、也就是说需要一开始传进去的值为5,循环15次后得到的元素值才为15。只要用户输入的第一位数的二进制的后四位是0101(5),则可以通过,所以第一个数有无穷多个。第二个数累加的结果为12+3+7+11+13+9+4+8+0+10+1+2+14+6+15=115。 所以两个数为 5 和 115。用户输入第一个数二进制下的后四位为0101(即第一个n=5),而之前位可以随意取值。因此有无数多的密码。如5 115;21 115等。随意输入一组即可通过关卡。 结论与心得: 这一关用到了循环链表,可以通过逆推的方法找到输入的第一个数字是什么,然后根据c代码确定累加的和。 6.phase_6 phase_6汇编代码及注释如下: 08048c89 : 8048c89: 55 8048c8a: 89 e5 8048c8c: 57 8048c8d: 56 8048c8e: 53 8048c8f: 83 ec 5c 间 8048c92: 8d 45 d0 8048c95: 89 44 24 04 8048c99: 8b 45 08 8048c9c: 89 04 24 8048c9f: e8 67 04 00 00 #输入六个数 mov $0x0,%esi #%esi=0 lea-0x30(%ebp),%eax mov %eax,0x4(%esp)mov 0x8(%ebp),%eax mov %eax,(%esp)call 804910b push %ebp mov %esp,%ebp push %edi push %esi push %ebx sub $0x5c,%esp #开辟一个栈空 8048ca4: be 00 00 00 00 8048ca9: 8d 7d d0 lea-0x30(%ebp),%edi #指明的是当前数字,将第一个数的地址传递给%edi 8048cac: 8b 04 b7 将第一个数字给%eax,开始外层循环 sub $0x1,%eax #%eax--cmp $0x5,%eax jbe 8048cbc mov(%edi,%esi,4),%eax # 8048caf: 83 e8 01 8048cb2: 83 f8 05 8048cb5: 76 05 #%eax小于等于5则跳过炸弹,说明当前数字要小于等于6,又因为是无符号的比较(jbe),所以还需要当前数字大于等于1,也就是当前数字只能取1,2,3,4,5,6 8048cb7: e8 15 04 00 00 8048cbc: 83 c6 01 #%esi=%esi+1=1 8048cbf: 83 fe 06 8048cc2: 74 22 cmp $0x6,%esi je 8048ce6 call 80490d1 lea(%edi,%esi,4),%ebx #将当前数放到%ebx中 8048cc7: 89 75 b4 将%esi放到%ebp-4c中 8048cca: 8b 44 b7 fc mov-0x4(%edi,%esi,4),%eaxmov %esi,-0x4c(%ebp)##将前一个数放到%eax中,开始内层循环 8048cce: 3b 03 8048cd0: 75 05 cmp(%ebx),%eax jne 8048cd7 #比较当前数和前一个数,如果不相等则跳转到8048cd7,否则爆炸,所以前后两个数不能相等。 8048cd2: e8 fa 03 00 00 8048cd7: 83 45 b4 01 循环条件每次加1 call 80490d1 # 8048cdb: 83 c3 04 到下一个数 8048cde: 83 7d b4 05 8048ce2: 7e e6 add $0x4,%ebx #地址加4,即 cmpl $0x5,-0x4c(%ebp)jle 8048cca #小于等于5跳转到8048cca,继续内层循环,所以esi从0到5,需要循环6次,8048ce4: eb c6 #继续外层循环,跳到8048cac #从上面两个循环可以看出,外层循环要求输入的6个数要在0~6之间,内层循环要求两个相邻的数不能相同 8048ce6: bb 00 00 00 00 跳到此处,%ebx=0 8048ceb: 8d 7d d0 一个数的地址放到%edi中 8048cee: eb 16 #跳转到8048d06 8048cf0: 8b 52 08 数组第一个元素大于1,就跳转到这里 8048cf3: 83 c0 01 8048cf6: 39 c8 8048cf8: 75 f6 #如果%eax不等于%ecx,则继续循环 8048cfa: 89 54 b5 b8 mov %edx,-0x48(%ebp,%esi,4)add $0x1,%eax #%eax=1 cmp %ecx,%eax jne 8048cf0 mov 0x8(%edx),%edx #如果 jmp 8048d06 lea-0x30(%ebp),%edi #将第mov $0x0,%ebx #%esi等于6时jmp 8048cac #如果数组第一个元素等于1,就跳转到这里, 8048cfe: 83 c3 01 8048d01: 83 fb 06 8048d04: 74 16 add $0x1,%ebx #%ebx=%ebx+1 cmp $0x6,%ebx je 8048d1c #如果%ebx=6,就跳转到8048d1c 8048d06: 89 de mov %ebx,%esi #%esi=0 8048d08: 8b 0c 9f 将数组第一个元素放到%ecx中 8048d0b: ba c4 c0 04 08 mov(%edi,%ebx,4),%ecx #mov $0x804c0c4,%edx #将地址0x804c0c4放到%edx中,p/x *0x804c0c4=0x1a7 8048d10: b8 01 00 00 00 8048d15: 83 f9 01 8048d18: 7f d6 mov $0x1,%eax #%eax=1 cmp $0x1,%ecx jg 8048cf0 #如果数组第一个元素大于1,就跳转到8048cf0 8048d1a: eb de jmp 8048cfa #如果数组第一个元素等于1,就跳转到8048cfa 8048d1c: 8b 5d b8 mov-0x48(%ebp),%ebx #重新排列链表的值 #n[0] 8048d1f: 8b 45 bc 8048d22: 89 43 08 #n[0]+8=n[1] 8048d25: 8b 55 c0 8048d28: 89 50 08 #n[1]+8=n[2] 8048d2b: 8b 45 c4 8048d2e: 89 42 08 #n[2]+8=n[3] 8048d31: 8b 55 c8 8048d34: 89 50 08 #n[3]+8=n[4] 8048d37: 8b 45 cc 8048d3a: 89 42 08 #n[4]+8=n[5] 8048d3d: c7 40 08 00 00 00 00 表的值进行检测 movl $0x0,0x8(%eax) #对链 mov-0x34(%ebp),%eax mov %eax,0x8(%edx)mov-0x38(%ebp),%edx mov %edx,0x8(%eax)mov-0x3c(%ebp),%eax mov %eax,0x8(%edx)mov-0x40(%ebp),%edx mov %edx,0x8(%eax)mov-0x44(%ebp),%eax mov %eax,0x8(%ebx)8048d44: be 00 00 00 00 8048d49: 8b 43 08 8048d4c: 8b 13 8048d4e: 3b 10 8048d50: 7d 05 mov $0x0,%esi mov 0x8(%ebx),%eax mov(%ebx),%edx cmp(%eax),%edx jge 8048d57 #第二个元素大一第一个元素就跳过炸弹,所以需要降序排列 8048d52: e8 7a 03 00 00 8048d57: 8b 5b 08 8048d5a: 83 c6 01 8048d5d: 83 fe 05 8048d60: 75 e7 call 80490d1 jne 8048d49 #数组中的每个元素都要满足降序排列 8048d62: 83 c4 5c 8048d65: 5b 8048d66: 5e 8048d67: 5f 8048d68: 5d 8048d69: c3 思路与分析: call 804910b add $0x5c,%esp #释放栈空间 pop %ebx pop %esi pop %edi pop %ebp ret mov(%edi,%esi,4),%eax #将第一个数字给%eax,开始外层循环 sub $0x1,%eax #%eax--cmp $0x5,%eax jbe 8048cbc 8048caf: 83 e8 01 8048cb2: 83 f8 05 8048cb5: 76 05 #%eax小于等于5则跳过炸弹,说明当前数字要小于等于6,又因为是无符号的比较(jbe),所以还需要当前数字大于等于1,也就是当前数字只能取1,2,3,4,5,6 8048cb7: e8 15 04 00 00 call 80490d1 add $0x1,%esi #%esi=%esi+1=1 cmp $0x6,%esi je 8048ce6 #如果此时%esi等于6,则跳转到8048ce6,否则继续执行下一条指令 8048cc4: 8d 1c b7 前数放到%ebx中 8048cc7: 89 75 b4 到%ebp-4c中 8048cca: 8b 44 b7 fc mov-0x4(%edi,%esi,4),%eax #mov %esi,-0x4c(%ebp)#将%esi放lea(%edi,%esi,4),%ebx #将当将前一个数放到%eax中,开始内层循环 8048cce: 3b 03 8048cd0: 75 05 cmp(%ebx),%eax jne 8048cd7 #比较当前数和前一个数,如果不相等则跳转到8048cd7,否则爆炸,所以前后两个数不能相等。 8048cd2: e8 fa 03 00 00 8048cd7: 83 45 b4 01 条件每次加1 8048cdb: 83 c3 04 一个数 8048cde: 83 7d b4 05 8048ce2: 7e e6 cmpl $0x5,-0x4c(%ebp) jle 8048cca #add $0x4,%ebx #地址加4,即到下call 80490d1 #循环小于等于5跳转到8048cca,继续内层循环,所以esi从0到5,需要循环6次,8048ce4: eb c6 继续外层循环,跳到8048cac 这一段代码是一个嵌套的for循环,得出的结果是输入的6个数字为1-6之间的数字且相邻两个数字不能相等。 mov $0x0,%ebx #%esi等于6时跳到此处,%ebx=0 jmp 8048cac # 8048ceb: 8d 7d d0 数的地址放到%edi中 8048cee: eb 16 跳转到8048d06 8048cf0: 8b 52 08 第一个元素大于1,就跳转到这里 8048cf3: 83 c0 01 8048cf6: 39 c8 8048cf8: 75 f6 如果%eax不等于%ecx,则继续循环 8048cfa: 89 54 b5 b8 lea-0x30(%ebp),%edi #将第一个 jmp 8048d06 #mov 0x8(%edx),%edx #如果数组 add $0x1,%eax #%eax=1 cmp %ecx,%eax jne 8048cf0 #mov %edx,-0x48(%ebp,%esi,4)#如果数组第一个元素等于1,就跳转到这里, 8048cfe: 83 c3 01 8048d01: 83 fb 06 8048d04: 74 16 如果%ebx=6,就跳转到8048d1c 8048d06: 89 de 8048d08: 8b 0c 9f 组第一个元素放到%ecx中 8048d0b: ba c4 c0 04 08 mov $0x804c0c4,%edx #将地址mov %ebx,%esi #%esi=0 mov(%edi,%ebx,4),%ecx #将数 add $0x1,%ebx #%ebx=%ebx+1 cmp $0x6,%ebx je 8048d1c #0x804c0c4放到%edx中,p/x *0x804c0c4=0x1a7 8048d10: b8 01 00 00 00 8048d15: 83 f9 01 8048d18: 7f d6 mov $0x1,%eax #%eax=1 cmp $0x1,%ecx jg 8048cf0 #如果数组第一个元素大于1,就跳转到8048cf0 8048d1a: eb de jmp 8048cfa #如果数组第一个元素等于1,就跳转到8048cfa 这又是一个嵌套的for循环,根据用户输入的值来对链表的值进行排序,比如给出值 5 6 1 4 3 2,则将原来链表第 5个位置的值放到第1位,第6个位置的值放到第二位,依次类推。而下面检测链表值时,要求链表值按从大到小排列。通过指令查看链表的值为;#p/x *0x804c0c4=0x1a7 #p/x *0x804c0cc=0x804c0b8 #p/x *0x804c0b8=0x6c #p/x *0x804c0c0=0x804c0ac #p/x *0x804c0ac=0x155 #p/x *0x804c0b4=0x804c0a0 #p/x *0x804c0a0=0x187 #p/x *0x804c0a8=0x804c094 #p/x *0x804c094=0x3bd #p/x *0x804c09c=0x804c088 #p/x *0x804c088=0x255 所以对应关系为:1->0x1a7;2->0x6c;3->0x155;4->0x187;5->0x3bd;6->0x255。第二个数组按从大到小的顺序排列应该为:3bd 255 1a7 187 155 6c。所以,输入的数字应该为:5 6 1 4 3 2。输入这六个数字即可通过关卡。结论与心得: 这一关用到了排序与映射,首先确定输入的6个数字为1-6,然后将这6个数字与数组中的数字对应起来,根据数组中的数据应该降序排列确定输入数字的顺序即可。 通过全部关卡过程如下: 四、实验心得 这次实验phase_1至phase_3三关相对比较简单,也比较好理解。但phase_4至phase_6相对比较难,相应的c代码也不像前面三关一样简单易懂,更是加入了链表和映射等相关知识,着实花了不少功夫才弄懂。 通过这次试验,我对汇编代码有了进一步的了解,更加熟悉了汇编代码中各种指令的作用,我相信这样的一次实践对我今后学习理论课程以及更深入地理解计算机系统会很有帮助。 实验报告 固体碱催化剂KF/CaO-MgO-Fe3O4的制备与表征 摘要:采用在制备复合物CaO—MgO的过程中加入一定量磁性基质Fe3O4来制备磁性复合物CaO—MgO—Fe3O4,再以等体积浸渍法负载KF,制备了负载型磁性固体碱催化剂KF/CaO—MgO—Fe3O4,并将其用于催化菜籽油与甲醇酯交换反应制备生物柴油。重点考察催化剂制备条件对酯交换反应的影响。实验结果表明,在m(CaO):m(MgO)=9: 1、KF负载量为载体质量的20%和500℃焙烧2h制备的催化剂具有较好的催化活性,酯化率达98.4%。磁性催化剂具有多孔结构,孔径在100nm左右,催化剂粒径(30—50)nm,是负载型磁性纳米固体碱催化剂。 关键词:磁性纳米固体碱;生物柴油;复合氧化物催化剂;磁性纳米复合氧化物催化剂 1.时代背景 生物柴油是一种典型的“绿色能源”,它是以植物油、动物油、餐饮废油等为原料制成的液体燃料,是一种清洁的可再生能源,是优质的石油替代品。大力发展生物柴油,对经济可持续发展,推进能源利用,控制城市空气污染,减轻环境压力具有十分重要的战略意义。 能源是经济社会发展的重要动力,面对全球经济的迅速发展,人类对能源的需求日益增长,中国能源消耗每年以超过10%的速度增长。长期以来,石化燃料一直是人类消费的主要能源。石化能源不可再生,按照目前已探明的世界石油储量和开采速度,全球石油的平稳供应只能维持40.6年。世界石油资源的日益枯竭和世界经济高速发展对石油资源的需求急速膨胀,使得原油的价格日益飚升,厄瓜多尔石油部长预计09年全球原油均价为55一60美元/桶(中金在线,2009),2009年原油均价或至75美元/桶(中证网,2008)。中国社会科学院2008年4月7日发布的《中国能源发展报告(2008)》蓝皮书中预计,2007一2020年间,中国石油消费仍将保持较高的增长速度,其中2010年和2020年中国石油消费量将达4.07亿吨和5.63亿吨,分别比2006年提高17.42%和62.47%。报告预计,2007年至2010年石油需求年均增长率为4.5%,2010至2020年石油需求年均增长率为3.3%。其中柴油比重将继续提高,由2006年的34%提高到2007年的36%;汽油所占比重将减少;煤油比重保持在3%至4%之间(中证网,2008)。近年来,中国石油消费逐年递增,GDP和石油消费关联度提高、交通运输业迅速发展、企业拥有量快速增加等因素共同推动着中国的石油消费。根据中国石油和化学工业协会的统计,2008年我国原油表观消费量为3.65亿吨,其中进口原油1.79亿吨,对外依存度达到49%。随着农用柴油机械的发展,我国柴油市场的供需矛盾将不断突出,预计到2010年,我国柴油的需求量将超过1.5亿吨。同时,世界柴油需求量占燃料油总量的比例将会继续上升,全球柴油供应量不足的矛盾将不断激化,因此世界各国都把目光放到了石油替代能源—生物柴油的开发与应用上面。生物柴油是一种清洁的绿色能源。生物柴油和常规柴油的性能比较见表1(孙纯和刘金迪,2006)。与普通柴油相比,生物柴油具有诸多优良的环保性能。使用生物柴油燃料,可降低90%的空气毒性,降低94%的患癌率。由于生物柴油的含氧量高达10%,因此燃烧较为充分,排烟少,废气中只有少量一氧化碳和氮氧化合物,没有苯并芘及二恶英等。排放的CO与矿物柴油相比减少约48%,有催化剂时减少约95%,排放的CO2比矿物柴油减少约50%,SO2和硫化物的排放可减少30%,有催化剂时可减少70%以上;燃烧后残炭低,废气中微小颗粒物含量低(0.02%);具有良好的低温发动启动性能,无添加剂冷滤点达一20℃;具有较好的润滑性能,降低了喷油泵、发动机缸体和连杆的磨损率,使用寿命更长;具有较好的安全性能,生物柴油闪点大于100℃,高于矿物柴油,在运输、储存、使用方面十分安全;具有良好的燃烧性能,其十六烷值超过50,燃烧性能优于矿物柴油,燃烧后残留物呈微酸性,可延长催化剂和发动机的使用寿命;生物柴油的生物降解率高(3星期后降解率:生物柴油98%,矿物柴油70%);具有可再生性能,与矿物柴油不同,其原料来源为各种植物油或动物油,原料供应源源不断;无须改动柴油机,即可直接添加使用生物柴油,并且无需另外添设加油设备、储存设备及人员的特殊技能培训;生物柴油以一定比例与石化柴油调和使用,可降低油耗、提高动力,且能减少尾气污染,改善环境质量(邢英和郡怡佳,2006;张良波,2008)。 2001年美国环保署颁布的生物柴油测试报告表明,与石油柴油相比,使用B20(20%生物柴油与80%柴油的混合物)的柴油混合燃料,可以使尾气中的生物柴油催化剂—磁性纳米固体碱的制备及应用烟尘含量降低10.1%,低碳烃降低21.1%,一氧化碳降低11.0%;若使用未掺杂的生物柴油,则可以使致癌物质多环芳烃减少80一90%,一氧化碳减少48%,二氧化硫减少30%一50%,烟度降低75%。生物柴油尾气排放符合欧Ⅲ标准。 国外生物柴油发展现状:能源危机和环境污染等问题的持续存在,越来越呼唤清洁能源的诞生。经科学家数十年的艰辛努力,新型替代能源—生物柴油得到了迅速发展,并己开始规模化使用。近年来,美国和欧盟纷纷制定优惠政策,鼓励本国企业大力发展生物柴油产业,支持农民种植油料作物,并提供高额的财政补贴,对生物柴油给予税收优惠,以提高生物柴油的市场竞争力,其发展势头十分强劲。 美国历来都相当重视能源战略,积极发展可替代能源是美国能源战略中的重要组成部分,作为一种新型替代能源,生物柴油在美国已经发展了相当长的时间。自20世纪90年代初,美国就开始将生物柴油投入商业应用,目前生物柴油己成为该国增长最快的新能源产品。1992年美国制定的能源政策措施中计划,到2010年,非石油的替代燃料要占到进口石油燃料总量的10%。2002年,美国材料试验学会(ASTM)通过了生物柴油标准。 2006年,美国生物柴油产量达2.5亿加仑,并计划于2012年使美国的生物柴油消费量增加到4.62亿升。截至2006年9月,美国共有81家生物柴油厂,另外还有82个项目正在投建或扩建当中。为了进一步鼓励使用生物柴油,美国农业部决定今后两年每年拿出1.5亿美元用以补贴生物柴油等生物燃料的使用。2006年,欧盟生物柴油产能超过600万吨,产量达到420万吨。2007一2010年间,欧盟生物柴油产量将维持33.9%的年增长幅度,并计划在2010年将生物 柴油占欧盟交通能源使用量的比例提高到5.8%,2020年提高到10%。为了增加生物柴油在燃料消费市场的需求量,欧盟于2008年1月提出了相应的议案,要求到2010年欧盟国家生物柴油消费量达到燃料消费市场的10%;另一项强制性目标要求欧盟国家到2012年生物柴油消耗量必须达到燃料总消耗量的6.5%,从而确保实施欧盟生物柴油的长期发展计划,实现环境的可持续性发展。欧盟制定了多项优惠政策鼓励开发和使用生物柴油,如免征生物柴油增值税,并规定机动车使用生物燃料占动力燃料总额的最低比例。德国、法国、意大利、奥地利、比利时、丹麦、匈牙利、爱尔兰、西班牙等国也纷纷开始研究和发展生物柴油,并制定了各自的发展战略,在生物柴油研究开发和产业化方面取得了相当的进展。 德国是目前全球最大的生物柴油生产国,主要采用纯态生物柴油(B100)作为车用燃料,实施免征燃油税政策(邢英和都怡佳,2006)。德国政府大力提倡使用生物柴油,对德国的生物柴油生产企业全额免除税收,使得生物柴油的价格低于普通柴油。2004年德国已有 1800个加油站供应生物柴油,并已颁布了德国生物柴油标准(DIN V51606)。法国对生物柴油的税率也为零,市场上 使用BS生物柴油,在排放控制严格的地区,使用B30生物柴油作为公共交通燃料。在欧洲,意大利是生物柴油使用最广泛的国家,基本上使用纯态生物柴油作为车用燃料,主要用于柴油车辆和农业机械方面。意大利对生物柴油的税率也为零,在国内已普及使用,使用标准是BS。在奥地利,生物柴油的税率为石化柴油的4.6%,目前有3个生物柴油生产厂,总生产能力超过14万吨/年。 葡萄牙的生物柴油生产主要使用菜籽油、大豆油和棕搁油,目前约有6家工厂,生产能力超过30万吨/年。近年来,西班牙也开始大力发展生物柴油产业,目前在建和己建设完成的生物柴油企业约10家,产能约40一60万吨/年,所有这些生物柴油项目建成后,西班牙有望挤入欧洲生物柴油生产四强。芬兰富腾能源公司在芬兰南部城市波尔沃兴建了1家生物柴油厂,于2007年夏季完工并投产,产量约为17万吨/年。拉脱维亚Bio一Venia公司也计划在波罗的海沿岸的文茨皮尔斯建造该国首座大型生物柴油总厂,产量约10万吨/年(段炼,2009)。近年来,阿根廷生物柴油出口量巨大。根据阿根廷农业部的统计资料显示,2007年阿根廷生物柴油出口量达31.9万吨的,其中76%出口给美国,23.7%出口给欧洲;2008年,阿根廷生物柴油产量突破150万吨,生物柴油协会预计,到2010年生物柴油产量将达到220万吨。目前阿根廷约有生物柴油生产厂8家,产能约60万吨/年。阿根廷政府鼓励企业投建生物柴油厂,为生物柴油企业提供优惠的税收措施,希望到2010年可以开始使用5%生物柴油。 在世界市场上,马来西亚逐步上升为生物柴油的主要出口国(段炼,2009)。马来西亚的生物柴油工业兴起于2006年,2006年7月,GoldenHope成立了第一个产能3万吨/年的工厂,2007年上半年,与马来西亚棕榈油委员会(MPOB)又合作兴建了第二个6万吨/年的的分厂。据市场统计,2007一2008年,已经投入运营的生物柴油工厂约12一巧家。到2007年底,这些工厂生产量达到约60一70万吨,到2008年中期约有200一2400万吨。在马来西亚生产的燃料作为Enffue(环境友好型燃料)的品牌被出口到世界各国,如美国、欧盟以及亚太国家。日本从1995年开始研究生物柴油,1999年建立了以煎炸油为原料日产259吨的生物柴油工业化生产实验装置,2003年生物柴油年产量达40万吨,并实施了生物能源“阳光计划”(全球品牌网,2009)。此外,印度有“绿色能源工程计划”(全球品牌网,2009)。加拿大惊呼本国生物能源行业落后于美欧和日本,大力调整政策迎头赶上;目前,瑞士正准备种植10万公顷生物柴油植物,借此解决每年50%左右的石油需求量;南美的巴西、阿根廷、哥伦比亚和亚洲的韩国以及俄罗斯等国也正积极发展生物柴油。 国内生物柴油发展现状:与国外相比,我国生物柴油的研发起步较晚,但发展迅速。目前我国生物柴油各方面的研究都取得了阶段性成果,一部分科研成果已达到国际先进水平,研究内容包括油脂植物的分布、筛选、培育、遗传改良及其加工工艺和设备。海南正和生物能源公司、湖南天源清洁燃料有限公司、四川古杉油脂化工公司和福建卓越新能源发展公司都己开发出拥有自主知识产权的生物柴油生产技术,并相继建成规模超过万吨的生物柴油生产厂,这标志着生物柴油产业在中国大地的蓬勃发展(武彤等,2008)。 我国对可再生能源生产企业也逐渐采取各种采取优惠措施,如减半征收增值税。随着《可再生能源法》的颁布,国家对可再生能源生产的政策也逐步确立,并出台了其他一系列配套细则,如2006年1月国家发改委颁布的《可再生能源产业发展指导目录》、《可再生能源发电有关管理规定》等法律;2006年6月财政部出台的《可再生能源发展专项资金管理暂行办法》;国务院常务会议审议并原则通过的《可再生能源中长期发展规划》等。从“十一五”起,国家和地方就开始在资金和财税两个方面大力支持可再生能源生产企业的发展。我国“十一五”纲要提出要发展各种石油替代品,将发展生物基液体燃料确定为国家产业的发展方向。2007年9月4日,国家发展和改革委员会向全社会公布了我国《可再生能源中长期发展规划》,提出到2010年生物柴油年利用量达到20万吨,2020年生物柴油年利用量达到200万吨。 2001一2004年是我国生物柴油企业发展的起始阶段。2003年,四川古杉油脂化学公司在河北邯郸建成了3万吨/年的生物柴油工厂,这是当时我国建成的最大的生物柴油工厂。截至2003年,我国共有5家生物柴油生产工厂,年生产能力约9万吨,年产量达到4一5万吨,主要以餐饮和食品企业回收的废油为生产原料。2004年我国新建生物柴油项目明显增多,当年开工建设的生物柴油项目主要有:河南星火生物工程公司的5万吨/年项目、福建源华能源科技公司的3万吨/年项目、四川古杉集团本部的3万吨/年项目、山东绿诺新能源公司的2万吨/年项目。此外,还有许多小型生物柴油项目开工建设。 从2005年开始,我国生物柴油产业进入高速发展阶段。到2005年底,我国已有8家生物柴油生产厂,年生产能力超过20万吨,较上年增长一倍多。其中,四川古杉油脂化工公司旗下的三个生物柴油工厂合计年生产能力达到7万吨,成为我国最大的生物柴油生产企业;河南星火生物工程公司的生物柴油年产能达到5万吨,位居全国第二位。2005一2006年我国生物柴油产业发展速度超出市场预期,新开工建设的生物柴油项目共有20多个,其中出现了一批年产5万吨以上的大型生物柴油项目。2006年部分大型生物柴油项目陆续竣工投产,使得我国生物柴油产能迅速增加。国家粮油信息中心统计数据显示,到2006年底,我国已有25家生物柴油生产企业,年生产能力达到120万吨,是2005 年的6倍。2006年我国建成投产的主要生物柴油项目有:安徽国风集团和江苏清江生物能源科技公司年产20万吨的生物柴油项目,这两个企业是目前我国单厂生产规模最大的生物柴油企业;四川古杉集团和山东华鹜集团年产10万吨生物柴油项目;浙江东江能源科技有限公司年产5万吨的生物柴油项目;江苏丹阳河海植物油厂年产4万吨的生物柴油项目;中国生物柴油国际控股有限公司、河南天冠燃料乙醇公司及石家庄金谷生物制品厂年产3万吨的生物柴油项目。 到2006年底,我国生物柴油产能达到300万吨/年,生物柴油产能继续增加,生产企业近50家。其中,江苏碧路生物能源饲料蛋白公司投资建设的年产25万吨生物柴油项目于2007年底建成投产,成为我国最大的生物柴油工厂。2007年我国建成投产的年产5万吨以上的其他大型生物柴油项目主要有:江苏宜兴四海公司巧万吨/年项目;辽宁瑞联科技发展公司、河北富宽油脂集团公司、河南星火生物工程公司、河南天冠燃料乙醇公司上海公司、江苏无锡华宏生物燃料公司、广西柳州明慧生物燃料公司、内蒙古天宏生物能源科技公司及四川古杉集团北京分公司10万吨/年项目;吉林植物油公司和金鹰集团福建莆田公司6万吨/年项目;河北东安实业公司、闻仁德上海环保能源公司及中国生物柴油国际控股有限公司5万吨/年项目。此外,还有许多年产5万吨以下的生物柴油项目建成投产。2007年全国生物柴油产能已达300万吨,但实际产量只有30万吨,增产空间较大。随着我国生物柴油产能快速扩张,生物柴油产量也随之增加。但由于2007年10月份以来国内外食用植物油价格大幅上涨,伴随着废弃油脂的价格也一路攀升,原料竞争加大,生物柴油生产成本提高,导致目前国内已建成的大型生物柴油企业开工率都保持较低水平,国内企业对生物柴油产业的投资热情降低,在一定程度上制约了国内生物柴油产业的发展。2008年新开工建设的生物柴油项目已明显减少,而停建和缓建的生物柴油项目却在不断增加,许多原计划今年扩大产能的企业也大都暂停了改扩建工作。尽管如此,近年我国生物柴油生产能力仍将会继续保持增加的趋势,只是增速开始放缓。2008年国家发改委批准了中石油南充炼油化工总厂6万吨/年、中石化贵州分公司5万吨/年和中海油海南6万吨/年3个小油桐生物柴油产业化示范项目,中国生物柴油的产业化得到逐步推进。四力l古杉、海南正和、福建卓越、重庆华正、北京清研等数十家企业参与生物柴油产业的开发与生产,并取得了一定的成果。到2008年底我生物柴油催化剂—磁性纳米固体碱的制备及应用国生物柴油生产能力至少增加100万吨,达到400多万吨。 近年来,我国相继建成了许多年产量过万吨的生物柴油厂。计划到2010年,我国年生产生物柴油100万吨;到2020年,年产生物柴油将达到900万吨。预计到2010年,我国生物柴油需求量将达2000万吨。面对着巨大的需求缺口,投资我国生物柴油的时机己经出现。 2.磁性纳米固体碱 2.1 磁性纳米固体碱的制备设想:通过一定的方法,将固体碱材料多功能化,即将系列碱土金属氧化物的负载型固体碱催化剂与磁性基质组合制备成系列磁性固体碱催化剂(KF/XO一Fe3O4,X=Mg,Ca,Sr),赋予固体碱催化剂以磁性,制备出磁性纳米固体碱双功能催化剂,比较该系列催化剂的催化性能,筛选出催化效果较好的催化剂,并研究其在生物柴油制备中的应用。由于氧化钡(BaO)会溶解在甲醇中,并且有毒,因此一般很少研究氧化钡催化制备生物柴油。主要研究内容如下:(l)磁性固体碱催化剂的制备采用等体积浸渍法,研究了催化剂(KF/XO一Fe3O4,X=Mg,Ca,Sr)制备条件的优化(KF/XO的质量比、焙烧温度和焙烧时间),并采用透射电镜(TEM)、低温从吸附一脱附、X一射线粉末衍射(XRD)、拉曼(Raman)、Hanunett指示剂和振动样品磁强计(VSM)等手段对催化剂进行表征。(2)筛选出催化效率较好的催化剂,进一步研究其在生物柴油制备中的应用,包括优化酯交换反应条件(催化剂用量、醇/油摩尔比、反应温度和反应时间),催化剂耐酸耐水性能和催化剂回收、重复使用和再生。初步探讨催化反应机理。(3)初步设计生产工艺流程和磁性分离管。2.2 磁性纳米固体催化剂的制备:以共沉淀法、等体积浸渍法和焙烧法制备催化剂。以n(Na2CO3):,n(NaOH)=3:1的溶液为底液和沉淀剂,称取一定比例的无水CaCl2和MgCl2·6H20,混合加人蒸馏水,搅拌至完全溶解,置于恒压滴液漏斗。400 r/min进行搅拌,控制滴液速率为l滴/s。滴加完毕后,60℃陈化6h,停止搅拌,静置1h,抽滤,洗涤至无杂质离子,马弗炉900℃焙烧4 h,得到钙镁复合氧化物载体。取一定量的载体粉末,以一定比例的KF溶液等体积浸渍,一定温度下焙烧一定时间,即得负载型KF/CaO—MgO固体碱催化剂。 2.3 磁性纳米固体碱的研究结论:采用共沉淀法,以钙和镁氧化物为复合载体,制备负载型纳米固体碱催化剂KF/CaO—MgO,在m(CaO):m(MgO)=9: 1、KF负载量为载体质量的25%、焙烧温度600℃和焙烧时间3 h的条件下,制备的催化剂催化活性最高,酯化率达到95%以上。因此,磁性固体催化剂制备生物柴油是成功可行的。磁性固体催化剂是一种高效的环境友好催化材料,是在固体催化剂上负载磁性基质,使其不仅具有磁性功能而且具有碱性的催化功能的双重功能。这种催化剂具有较高的催化活性;易与反应体系分离回收,具有可再生能力;对环境友好,对反应设备没有腐蚀。 3.复合氧化物固体碱催化剂的研究 水滑石经煅烧后形成的复合氧化物中二价金属离子和三价金属离子分散均匀,可形成与无水碳酸钠碱强度相当的固体碱;通过调节水滑石中所含双金属离子的种类以及配比可对其碱强度和孔径分布实现有效调节。据报道,以水滑石煅烧制得的复合氧化物作为非均相催化剂可用于催化制备生物柴油,如David G Cantrell等用醇油物质量比为30:1,反应时间为3 h,在60℃下油脂转化率最高为74.8%;Wenlei Xie等。在催化剂用量为油重的7.5%,醇油物质量比为15:l,反应9 h后,油脂转化率为67%;陈和等在230℃,醇油物质量比12:1,催化剂用量为棉籽油油重的2%条件下,反应3 h后甲酯收率达到90%以上;Chawalit N等以Ca—Zn复合氧化物为催化剂,在60℃,101.325 kPa,醇油物质量比30:1,催化剂用量为油重的10%,反应1h后甲酯收率达94%;颜姝丽等将Zn/A1类水滑石的煅烧产物用于菜籽油一甲醇酯交换反应,发现具有较好的催化活性;齐涛等通过调节Zn/Al类水滑石中Zn/Al物质的量比,在200℃,2.5 MPa,醇油物质的量比为42:1,催化剂用量为油重的1.4%条件下用于催化菜籽油甲醇酯交换反应,菜籽油转化率达到80%。以水滑石煅烧制备的复合氧化物作为碱催化剂应用于生物柴油酯交换反应具有较高活性,但较大醇油比和较长反应时间限制了其在工业的应用。在前期研究基础上,通过共沉淀法,合成Zn/Al=4的复合氧化物,考察并优化了该固体催化剂在亚临界条件下催化菜籽油一甲醇酯交换反应的工艺条件以及高FFA和水含量对其催化反应的影响。Zn/A1复合氧化物催化生物柴油酯交换反应(齐涛 鲁厚芳 蒋炜 梁斌;四川大学化工学院)所得结论:1.用共沉淀法合成了Zn/A1为4的LDH,XRD分析表明样品具有较好的单一类水滑石结构。样品于400℃煅烧处理8 h后,对亚临界条件下菜籽油一甲醇的酯交换反应具有较好的催化活性。2.以Zn/A1复合氧化物为催化剂,在反应温度200℃,醇油物质量的比为24:1,搅拌转速为400 r/min,压力为2.5 MPa,催化剂用量为菜籽油油重的1.4%条件下,反应90min,菜籽油转化率可达84.25%。在催化酯交换反应中,该催化剂对FFA和水分具有一定的耐受能力。在FFA含量为油重的6%,水质量分数为10%时,油脂转化率仍在80%以上。 除此之外,下面有两例有关“复合氧化物催化剂”的研究进展。 Ca/Al复合固体碱催化剂用于生物柴油的制备(孙广东 李瑞娇 吴谋成;华中农业大学生物质能研发中心,食品科学技术学院)所得结论: 1.采用菜籽油为原料.自制固体碱催化剂制备生物柴油的试验条件为醇油摩尔比为12:1。催化剂用量为原料油质量的10%。反应时间9h,反应温度65℃,在此条件下收率90%以上。2.由于采用固体催化剂,非均相反应所需时间比传统采用液体酸或碱的时间长.但后处理大大简化.副产物甘油极易分离.避免了环境污染和有用化学品的流失。3.自制固体碱催化剂经过简单的处理后可重复使用。其生物柴油的主要指标达到了相关标准。 固体碱SrO—La203催化大豆油合成生物柴油(淳宏 谢文磊;河南工业大学化学化工学院)的研究:用共沉淀法制备了SrO—La2O3,复合氧化物固体碱催化剂,用于催化大豆油与甲醇的酯交换反应,并考察了催化剂制备方法及制备条件对大豆油转化率的影响。结果表明,采用共沉淀法、以氨水为沉淀剂,催化剂中Sr与La摩尔比1.5:1,催化剂焙烧温度973 K条件下显示出固体碱催化剂的最佳催化活性和稳定性。考察了酯交换反应条件对大豆油转化率的影响,结果表明,在甲醇沸点温度下,醇油摩尔比15: 1、催化剂用量占反应物总量3%、反应时问4 h的最佳条件下,大豆油转化率最高达92.63%。考察了SrO—La203,固体碱催化剂重复使用性能,结果表明,当催化剂重复使用3次后,再用773 K温度活化2h,催化剂活性仍保持90%以上,经5次重复利用后大豆油转化率仍能保持在90%左右。SrO—La203固体碱催化剂用于催化大豆油酯交换反应合成生物柴油,考察了反应条件、催化剂制备方法对大豆油转化率的影响,最后还考察了催化剂的稳定性能、在极性溶剂中活性组分的流失以及失活原因等方面问题。而且还考察了金属锶与镧摩尔比对固体碱催化剂的催化活性有较大影响。锶与镧摩尔比由0增大到2.0时,SrO—La203,固体碱催化大豆油酯交换反应的催化活性呈先增大后减小的趋势。在Sr/La摩尔比为1.5:1时,SrO—La203,催化剂对大豆油的转化率达到最大,为87.42%。原因是在SrO—La203系列固体碱中,金属锶与镧摩尔比较低时,经高温焙烧后形成的活性中心能够裸露在催化剂表面,并且随摩尔比增加有越多的碱性中心形成,催化活性不断增加;但过多增加锶含量,高温煅烧后不但不能完全分解形成的碱性中心,而且聚集在担体的表面和孔道内,堵塞孔道,使催化剂比表面积下降,固体碱催化活性降低。实验结果表明,SrO—La203,固体碱催化剂在催化大豆油与甲醇酯交换反应过程中Sr/La摩尔比选择1.5:1较合适。 综合上述前人的研究,利用复合氧化物固体碱催化剂来制备生物柴油的技术已经相当成熟,但仍存在一些问题。例如,如何保持它的高活性一直不变;如何寻找到最佳的二价金属和三价金属离子来制备复合氧化物固体碱;如何提高复合氧化物固体碱的催化活性及稳定性等等。尽管如此,但我相信随着化工技术的发展,采用此技术来制备生物柴油将不断被完善,形成化工生产规模。 4.固体碱KF/CaO-MgO-Fe3O4的设想 本课题拟通过一定的方法,将固体碱材料多功能化,即将磁性纳米固体碱与复合氧化物固体碱组合制备成KF/CaO-MgO-Fe3O4,赋予固体碱催化剂以磁性﹑稳定性﹑强碱性,制备出磁性纳米复合氧化物固体碱多功能催化剂,比较不同制备条件下催化剂的催化性能,筛选出催化效果较好的催化剂,并研究其在生物柴油制备中的应用。主要研究内容如下:(l)该固体碱催化剂的制备采用沉淀法和等体积浸渍法(本实验由于时间有限而且药品供给齐全,所以直接称取一定量CaO﹑MgO﹑Fe3O4粉末和KF·2H2O晶体进行搅拌混匀,然后高温煅烧),研究了该催化剂制备条件的优化(KF/(CaO-MgO)的质量比、焙烧温度、焙烧时间和后期对氧化钙和氧化镁的质量比),并采用X一射线粉末衍射(XRD)和Hanunett指示剂等手段对催化剂进行表征。(2)筛选出催化效率较好的催化剂,进一步研究其在生物柴油制备中的应用,包括优化酯交换反应条件(催化剂用量、醇/油摩尔比、反应温度、反应时间和原料油的酸值及水含量),催化剂耐酸耐水性能和催化剂回收、重复使用和再生。(3)初步探讨催化反应机理。 5.固体碱KF/CaO-MgO-Fe3O4的制备与酯交换反应 称取现成的CaO 9g﹑MgO 1g﹑Fe3O4 0.4g粉末以及一定量KF·2H2O晶体,并加入少许蒸馏水,在烧杯中用玻璃棒进行搅拌混匀,然后转移到坩埚里,再在马弗炉中一定温度下焙烧一段时间,待冷却后用坩埚钳取出,并装袋贴标签,放入干燥器中备用。 由于我们组的实验重点在于固体碱催化剂的制备与研究,因此酯交换反应时,参考文献中理论数据取菜籽油25g﹑无水甲醇 10.5g﹑催化剂 1g和磁石两粒 置于圆底二颈烧瓶,然后放在集热式恒温加热磁力搅拌器中反应三小时(67℃),待反应完全后进行减压过滤,去除混合物中的催化剂;再进行减压蒸馏,去除多余的甲醇,最后将混合液倒入分液漏斗中置于铁架台上进行静置,待分层明显后,从下放出甘油,从上收集粗生物柴油,称量甘油的质量和量取粗生物柴油的体积,并将粗生物柴油密封保存在贴好标签的药瓶里,以待后期气相色谱分析。 6.影响固体碱KF/CaO-MgO-Fe3O4的催化活性的因素分析 6.1 KF的用量 查阅相关文献资料,在催化剂制备过程中,25%KF用量(占载体CaO-MgO质量的百分数)作为理论最佳参考用量,另外我们组为研究不同KF用量对该固体碱催化活性的影响再取两组不同值(20%和30%)作为比较对象来研究。6.2 反应温度和焙烧时间 对于大多数催化反应来说,催化反应温度是一个必须考虑的因素,然而在催化剂制备过程中反应温度仍是一个重要的影响因素。纳米固体碱催化剂KF/CaO—MgO制备生物柴油的研究(李斌,段学友,王运,文利柏,韩鹤友)结果表明,在m(CaO):m(MgO)=9: 1、KF负载量为载体质量的25%和600℃焙烧3 h制备的催化剂具有较好的催化活性,酯化率达95%以上。因此,我们组把600℃和3h作为最佳反应温度和焙烧时间,然后仍各取两组不同值500℃和700℃,2h和4h作为参照来进行实验探。 气象色谱分析前生物柴油的产率估计 气象色谱分析后生物柴油的实际产率 6.4 CaO﹑MgO质量比 基于实验时间有限,我们组积极听取老师意见,先将CaO﹑MgO质量比定为9:1,然后再综合上面所考虑的因素设计正交试验表进行实验,再根据所得甘油的质量来对产率进行初步估计,竟而选择出比较合适的反应温度﹑KF用量和焙烧时间,再在这三者一定的条件下探讨研究钙镁比对固体碱催化活性的影响,这样既节约时间,又合理可行。根据以上数据,我们选择第七组﹑第九组和理论最佳组所对应的上面三个条件来研究三组不同钙镁比8:2,7:3,9:1对催化活性和产率的影响,从而选出制备固体碱催化剂的最佳反应条件来催化制备生物柴油。7.探讨制备生物柴油的最佳反应参数 查阅相关文献,取理论最佳酯交换反应条件:醇油摩尔比为12:1(菜籽油 25g﹑无水甲醇 10.5g),催化剂用量 1g,反应温度67℃,反应时间3h。确定上述因素后,我们组重点考察了制备三组不同CaO﹑MgO质量比(8:2,7:3,9:1)的固体碱催化剂对酯交换的影响,相关数据如下: 注:理论最佳组中钙镁比为9:1的一组由于产率高于百分之百,故而舍去,经分析有以下可能原因:1.在做气象色谱分析时,水杨酸甲酯或生物柴油的加入量不符合标准;2.这组固体碱是我们组制备的第一组催化剂,由于试验经验不足等问题,在实验操作过程中可能存在一些错误;3.气象色谱分析时操作过程可能出现错误等。 8.结论与后期实验 综合上述实验操作与数据,可以得到以下结论: (1)经浸渍法制备的磁性纳米固体碱KF/CaO-MgO-Fe3O4催化剂用于菜籽油酯交换反应中,具有较高的催化活性,菜籽油转化率最高达98.4%,最低达62.8%,从此可看出催化剂的制备方式不同对生物柴油产率的影响。 (2)在甲醇沸点温度下,醇油摩尔比12:1(菜籽油25g﹑无水甲醇10.5g),催化剂用量1g,反应时间3h时,固体碱KF/CaO-MgO-Fe3O4在m(CaO):m(MgO)=9: 1、KF负载量为载体质量的20%、焙烧温度500℃和焙烧时间2h的最佳制备条件下菜籽油转化率可达98.4%。但考虑钙镁比对产率的影响,我们可以初步总结出8:2是一个比较稳定合适的比例,但仍需后期实验考察与分析。 (3)从以上数据可知,根据甘油的质量来进行产率的初步估计时存在巨大偏差,因此我们组根据估计的产率选择适当的固体碱制备条件来探讨钙镁比对产率的影响时没有预测的合理,这也是后期实验必须解决的问题。对于钙镁比的影响,除以上研究过的三组,再可选取实验序号为1﹑3﹑4和9所对应的固体碱制备条件来考察研究。(4)针对理论最佳组,在后期实验中也应重新试验,再综合上述所有数据进行对比判断,从而得出在酯化反应条件一定的情况下,针对固体碱的制备条件不同来选择最佳制备方案的结论。 参考文献: 1.李斌,段学友,王运,文利柏,韩鹤友,纳米固体碱催化剂KF/CaO—MgO制备生物柴油[期刊论文]——工业催化 2009(17) 2.齐涛,鲁厚芳,蒋炜,梁斌,Zn/A1复合氧化物催化生物柴油酯交换反应[期刊论文]——中国粮油学报2010(25) 3.孙广东,李瑞娇,吴谋成,Ca/AI复合固体碱催化剂用于生物柴油的制备[期刊论文]——粮油加工2007(11) 4.淳宏,谢文磊,固体碱SrO—La203催化大豆油合成生物柴油[期刊论文]——精细石油化工进展2009(10)5.赵军英,生物柴油磁性固体催化剂的制备及评价—中围农业科学院硕士学位论文2008 6.陈文伟,高荫榆,林向阳,谢何融,阮榕生,磁性固体催化剂催化制备生物柴油的研究[期刊论文]——福建林业科技2006(09) 7.蔡钒,张彬彬,林静,张国玉,方维平,杨乐夫,酯交换制生物柴油的CaO 固体碱催化剂,理化学学报2008 8.张世敏,张无敌,尹芳,制备生物柴油所用催化剂的研究进展 节能技术2007 9.钮劲涛,陶梅,金宝丹,生物柴油的合成技术,辽宁工程技术大学学报(自然科学版))2009(28) 10.范宝磊,曾彦飞,制备生物柴油过程中催化剂的研究进展,化工进展2008 11.汤颖,马超,顾雪凡,刘炜,制备生物柴油的固体碱催化剂研究进展,海南师范大学学报(自然科学版)2009(22)12.黄彩霞,刘荣厚,菜籽油碱催化法制备生物柴油的工艺参数,农业工程学报,2009(25) 13.姜绍通,刘新新,张福建,菜籽油脚制备生物柴油的原料预处理研究,CH INA O ILS AND FATS,2010(35)14.褚鸿博,赵红,菜籽油制备生物柴油适宜工艺条件及粘度与产率关系的探讨,天然气化工,2010(35)15.,徐伟,沈春红,柴油微乳化技术中乳化剂的选择及配方的研究,化工中间体,2006(09) 16.李为民,郑晓林,徐春明,徐鸽,邬过英,固体碱法制备生物柴油及其性能,化工学报,2005(56) 17.黄慨,颜涌捷,陈晴,张素萍,任铮伟, 钙镁负载型固体碱制备生物柴油的研究, 太阳能学报[J], 2009(20)18.王浚,制备生物柴油催化剂的研究和应用[D],贵州大学2008届硕士研究生学位论文,分类号: 2005221296,论文编号: O643.36。 技 能 训 练 实习报 告 学院:经济与管理 班级:09人力2班 学号:0868100136 姓名:苏日古嘎 一、实验名称:奥派人力资源实践平台 二、实验目的: 奥派人力资源实践平台系统按照人力资源管理的核心内容进行功能的分类,同时按照人力资源管理的流程作为实验流程,开展实验。系统提供了大量真实案例数据,按照系统设计的正确流程,基于这些案例数据,对企业的人力资源状况进行诊断分析,对企业的人力资源管理问题提出解决方案。以案例为基础,对企业的状况进行思考,并做出正确判断和诊断,通过使用系统,能够接触到企业的真实资料,了解企业现实情况,并对企业问题进行诊断,提出解决方案,达到与在企业中开展实际工作一致的效果,学习到的人力资源管理工作的方法和技巧,培养实际的工作能力。 三、实验内容 实验一:人事管理(1)实验内容: 1、员工信息浏览:列表栏中列出员工的基本信息详细信息提供只读方式浏览。 2、调动分配:在实验中,实验可以将员工调动/分配至其他部门,同时担任调动后部门下的相关职务。 3、离职人员:列出员工的基本信息,同时也列出了员工的离职原因。实验可以对员工的离职原因进行查看。 4、档案查询与维护:实验根据查询条件和过滤条件输入相关信息即员工姓名或员工编号,就可以定位到一个在职的员工,进而可以对该员工的详细信息进行维护。 5、人事结构分析:人事结构分析模块提供了人事的统计分析功能。实验可以通过按年龄、按工龄、按性别、按出生日期、按学历、按部门、按雇佣性质等对在职员工进行人事统计分析。 (2)实验成果: A从这个实验中学到了企业在人事管理中如何对人员进行调动,如何对企业员工的人事档案进行管理和维护以及企业如何对人事结构进行统计分析。 B了解了企业中人力资源部要做详细的员工信息以备调动内员工和招聘解雇员工等工作。 C从此次实验中收获了人事管理是人力资源管理工作中的很基础性的工作,学到了怎样做好员工信息以备企业在发展中很好的配置内部员工和按照企业自身的发展需求招聘相关外部专业人员。 D以后的人力资源工作当中要做好员工信息这一部分工作是很重要的要认识到这一点。 (3)实验中存在的问题 A员工信息浏览中员工信息的设置选项较少,应在添加性别、学历、特 长、家庭住址、婚姻、健康等方面内容都应该涉及到。 B在调动分配模块员工从教务处调到财务处时没有涉及到相应的岗位。 实验二:考勤管理 (1)实验内容: 1.考勤参数设置:列表栏列出了目前已经设置的考勤参数信息,包括考勤项目级别,相关类别,考勤分数等等相关信息。 2.日常考勤记录:列表栏列出已经记录的员工日常考勤记录,实验学生可以随时对员工的日常考勤记录进行查询操作。 3.考勤数据查询:考勤数据查询模块提供员工的考勤记录查询功能 4.考勤数据汇总:考勤数据汇总模块分为两类:员工的考勤汇总和部门的考勤汇总。 (1)员工考勤汇总 实验学生选择需要汇总的考勤时间段,便可以汇总出员工在各部门的考勤信息,以及明细记录 (2)部门考勤汇总 实验学生选择需要汇总的考勤时间段,便可以汇总出各部门下的员工考勤信息,以及统计记录。 (2)实验成果: A从实验中了解到考勤管理是为了让员工明确工作和休息时间,明确考勤部门的工作范围、职责,保障工作效率,同时考勤管理是计发员工工资,进行绩效考核的重要依据。 B从实验中学到考勤管理模块包含考勤参数设置、日常考勤记录、考勤数据查询和考勤数据汇总,了解了企业的考勤过程。 C在人力资源管理活动中一定会涉及到考勤方面的内容所以在企业中对员工考勤是必要的人事工作之一。 D通过此次实验知道了考勤是对企业内部员工考核的一种公平的方法。 (3)实验中存在的问题 A在流程中考勤参数设置时添加项部灵活,写一个项就添加了好几同样的项。 B在考勤数据汇总中应在加一项道德素质考核这一项,这样体现企业的人性化管理的一面。员工不能只是机械化的来工作也要注重思想道德这一项。 实验 三、合同管理 (1)实验内容: 1、合同模版管理:合同模版管理系统提供了三份劳动合同模版、一份新员工担保书、二份承诺保证书。点击查看下面的浏览可以查看合同内容。用户自己不可以添加合同模版,也不可以编辑、修改系统得合同模版。 2、试用期:查看试用期人员的资料;对试用的人员进行评分,并给与通过还是解除。试用的人员在试用期里要接受各级领导的审查,领导对试用人员的表现情况给与评分和评语。对表现比较差的人员给与解除劳动关系。对表现好的人员给与通过,通过试用的人员进入下一试用阶段,也就是进入初步签订阶段。 3、初次签订:查看试用期人员的资料和得分;对试用的通过的人员给与延期还是签订合同。对于进入初步签订的人员也要接受各级领导的审查,领导对给试用人员进行查看并对表现情况给与评价,对于不满意的人员将继续适用,对于满意的人员给与签订合同。 4、变更或续签:实现某一部门人员合同签订的信息;实现合同的变更、自动续签还是手动续签等功能。对于已经签订合同的人员,可以根据需要修改、变更合同信息;对于即将到期或是已经到期的合同根据情况给与续签还是解除。 5、解除或终止:实现某一部门人员合同签订的信息的查询功能;实现对所有员工(包括离职和在职)的已存合同档案进行管理: 1.对表现不好的员工可解除合同。 2.对已离职的员工的合同档案终止合同处理。终止时,该员工的人事档案即删除。 6、查询统计打印:实现按部门、职位、员工类别、合同签订时间、合同结束时间查询员工合同签订情况;具体员工合同浏览等功能。 (2)实验结果 A通过对合同管理实验模块的操作,可以学习到在实际情况当中用人单位和应聘人员如何进行合同的签订、合同的变更和续签、合同的解除和终止。 B而可以更加清楚的认识到劳动合同对于用人单位和应聘人员的重要性。 C聘请外籍工作人员合同时用中文和英文文写成,两种文本具有同等效力。 (3)实验中存在的问题 A解除和终止这项总是出现红色,做完了还显示红色,诊断不出来。 B在试用期模块点击解除之后到解除和终止项时仍然没有任何反应。实验四: 工作分析 (1)实验内容 1、制定目标:实验学生通过对企业现有问题的分析和总结,从而确定工作分析目标。制定目标包括分析类型(全面/部分)、企业现有问题、工作分析目标等。 2、确定人员:确定人员就是对即将参与工作分析的研究人员进行确定。 工作分析人员的类型分为:工作分析专家、岗位在职人员、上级主管。 3、确定对象:实验学生根据可供参考的资源即公司经营战略和组织结构图,来确定需要分析的岗位信息。需要分析的岗位信息包括职位名称、所属部门、所需人数,上级职位。 4、信息调查:信息调查中包含了问卷调查法、访谈法、现场观察法三种调查方式。实验学生通过这三种方式的信息调查,可以了解到企业员工的日常工作状况,以及员工在工作环境中所遇到的问题,以便得到及时反馈信息。 问卷调查法:采用问卷的方式获取工作分析中的信息,实现工作分析目的。 访谈法:访谈法又称为“面谈法”,是一种应用最为广泛的工作分析方法。 现场观察法:是指在工作现场观察员工的实际工作,用文字或图表的形式记录下来,收集工作信息中的一种方法。 5、工作描述:工作描述是关于一种工作中所包含的任务、职位以及责任的一份目录清单。实验学生通过对职位名称分析、工作任务分析、工作职责分析、工作关系分析、劳动强度分析。 6、任职资格要求:任职资格要求是一个人完成某种特定工作所应具备各类资格要求进行了解。包括必备知识、必备经验、必备身体素质、必备操作能力、必备个性特征和必备个性特征。 7、工作说明书:工作说明书是实验学生根据前面的详细调查信息。主要是根据工作描述和任职资格要求这两个大方面来编制特定部门下的工作说明书。 (2)实验结果 A工作分析是对工作的一个全面的评价过程.对组织上各项工作的性质、责任、任务以及从事该工作的员工所具备的条件进行调查和分析,然后加以系统、科学的工作描述和任职资格要求,最终编制出工作说明书。 B此次试验中的工作分析模块包含制定目标、确定人员、确定对象、信息调查、工作描述、任职资格要求和工作说明书,这将会让我对企业工作分析流程更加了解。 C从实验中掌握了比在教科书上学到的多知道了工作分析中有确定目标、确定人员、确定对象、信息调查、工作描述、任职资格要求和工作说明书等内容。 (3)实验中存在的问题 A信息调查方面设计的行业巨多范围广,所以信息无法详细地统计。B任职资格要求这一模块内容中应该添加一项个人道德方面的原组织的评价等。 实验五:培训管理 (1)实验内容 1、培训战略规划目标:通过对企业现阶段的情况进行分析和总结,从而确定培训目标 2、在职员工培训需求分析:需根据组织分析与个人分析确认培训需求,并根据已确认的培训需求决定培训目标。 3、新员工培训需求分析:需对各岗位进行工作分析,以确认各岗位的培训需求。 4、制定培训计划:培训计划的制定涉及到设计培训课程,培训编制预算,选择培训对象。 5、培训计划实施:在培训计划实施的过程中需要注意的事项。 6、培训效果评估:培训效果分析分为培训需求评估,培训组织与实施评估,培训结束后评估,培训总结归纳,培训转化,在此各类分析中需如何设计评估表等。 (2)实验结果 A通过此次实验学到了对于企业如何从企业战略出发规划培训目标; B培训结束后要制定培训效果评估表。(3)实验中存在的问题 A在个人分析模块总是添加不完。 B设计组织实施评估表困难没有具体的数据可分析。实验六:职业生涯规划 (1)实验内容 1、审视自我:审视自我分为两个部分来完成的,一部分是自我评价信息,用文本方式实现的,用户可以编辑自我评价信息,编辑好了保存即可。另一部分是您的情商,是用选择方式实现的,用户在情商记录信息后选择答案后保存即可。 2、确立目标:确定目标分为短期目标、中期目标、长期目标、人生目标四个部分来实现的,都采取文本方式实现的,用户只要在相应的文本框中输入内容保存即可。 3、环境评价:环境评价用你所学的专业、你所选择的行业、你所处的地位、所处的形势、发展趋势五个部分组成,其中所选的行业用的是下拉选框,其余用的文本框方式实现的。 4、职业定位:职业定位分为了解自己、确定职位两个部分,在了解自己的基础之上,进一步确定自己的职位即职业定位。了解自己分为了解自己的兴趣、特长、性格、学识、技能。 5、生涯设计:生涯设计的策略分为行动方案、培训计划、阶段性教育三个部分,通过文本框方式实现生涯设计的编辑功能。 6、评估与反馈:评估和反馈分为评估和反馈两个部分。评估由变化 因数和需要调整的地方两个部分组成,通过文本方式显示评估的编辑功能。反馈部分由改进后的结果文本来实现的反馈的编辑功能的。 (2)实验结果 A 从实验中学到了职业生涯规划是指组织或者个人把个人发展与组织发展相结合,对决定个人职业生涯的个人因素组织因素和社会因素等进行分析,制定有关对个人一生中在事业发展上的战略设想与计划安排。 B职业生涯规划是一个人对其一生中所承担职务相继历程的预期和计划,包括一个人的学习,对一项职业或组织的生产性贡献和最终退休。 (3)实验中存在的问题 A这次实验中设计的短期计划中期计划跟长期计划的时间间隔太长。 B在评估与反馈模块设计的内容不能进行员工本人的职业生涯规划的评估,本人认为企业不用设计这模块。 一、实验目的和要求 1、通过实验使学生掌握拟进行的会计模拟实验的基本情况,在接下来的会计模拟实验中,有明确的前提条件。知道所应遵循的规则和方法以及在会计模拟操作过程中所应注意的问题,使整个操作过程不至于中断和与制度不一致。 2、通过实验使学生能进行从开设账户、处理一般经济业务到计算成本、进行期末结转和最后出会计报表等会计的一整套流程。要求学生自己动手,将所学的会计知识进行运用、提高,以胜任今后的实际会计工作。 3、通过实验使学生对企业财务管理实践的主要方面的财务决策深入了解,通过对财务案例的研讨、剖析,培养学生自己收集相关信息、剖析案例、创造性思考的能力,加上教师适当指点、讲授,并组织集体讨论,使其能充分适应以后实际的财务管理工作要求。实验中要注意的是案例讨论不是去寻找正确答案的教学,而是重在培养学生的创造性思维和解决问题的能力,重视的是得出结论的思考过程及解决问题的方法。 二、实验内容 1、手工会计实务 2、电脑模拟会计实务 3、财务案例研究与讨论 三、实验环境与实验软件 四、实验过程与步骤简述 五、实验总结与建议 第次作业 电子科技大学计算机科学与工程学院 实验报告 (实验)课程名称信息安全基础综合设计实验 电子科技大学 实验报告 学生姓名:杨川 指导教师:丁熠 实验地点:主楼 A2-41 3实验项目名称: 一、实验目的: 二、设计思路: 三、实验环境: 操作系统:windows xp 应用软件:vc++6.0 四、实验内容: 五、实验步骤: 六、实验数据及结果分析: 七、实验总结及体会: 学 号:2012063050030实验时间:2014 年 月 日 报告评分: 指导教师签字:第二篇:实验报告
第三篇:实验报告
第四篇:实验报告
第五篇:实验报告