目录
一、利用GPT工具学习教材一、二章
二、实验楼:实验一
1.编写main.c代码
2.编译代码并删除所有以“.”打头的字符串
3.代码分析:
函数main:
pushl %ebp #将EBP(栈基值)寄存器的值压入栈中
movl %esp,%ebp #EBP指针指向标号1的位置
subl $4,%esp #ESP指针向下增1,指向下一个标号位置
movl $20230000, (%esp) #将立即数20230000放入ESP寄存器指向的标号2位置
call f #调用g函数,先将ESP后移,存储现在EIP寄存器内的值,然后EBP内的值压榨存储到下一标号位置
函数f:
pushl %ebp #把ESP寄存器的值向下移到标号4
movl %esp, %ebp #把EBP寄存器的值标号1放到栈空间标号4的位置
subl $4,%esp #ESP寄存器指针向下加1,指向下一个标号位置
movl 8(%ebp), %eax #把立即数8放到EAX的寄存器
movl %eax,( %esp) #将EAX寄存器里的值放到ESP所指的位置
call g #调用g函数,先将ESP后移,存储现在EIP寄存器内的值,然后EBP内的值压榨存储到下一标号位置
函数g:
pushl %ebp #将EBP(栈基值)寄存器的值入栈
movl %esp, %ebp #让EBP和ESP指向同一个位置
movl 8(%ebp), %eax #将EBP指针前两个标号位置的内容放入EAX运算单元内
addl $2800,%eax #将EAX内的值+2800
popl %ebp #将标号7放入EBP寄存器里,让EBP指针回归上一级函数的栈底
ret #函数返回,将标号6内的值放入EIP寄存器内
函数f:
leave #销毁f函数的这一部分工作站栈
ret #函数返回,将标号3内的值放入EIP寄存器内
函数main:
addl $9,%eax #将EAX中内容加9,EAX寄存器是默认存储函数返回值的寄存器
leave #销毁main函数工作栈
ret #函数返回
最终输出结果为:20232809