两种汇编的实验

一、汇编-1

1 通过输入gcc -S -o main.s main.c -m32 将下面c程序”week0401学号.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; }
2. 删除汇编代码中 . 开关的代码,提交f 函数的汇编代码截图,图中用矩形标出函数栈帧的形成和销毁的代码

#include<stdio.h>

int g(int x){
   
	return x+3;
}

int f(int x){
   
	int i=31;
	return g(x)+i;
}
int main(void){
   
	return f(8)+1;
}

使用以下代码进行汇编:

gcc -S -o week040120232831.s week040120232831.c -m32

结果如下:(出错,发现没有用32位编译的包)
在这里插入图片描述
使用代码安装32位的编译包

sudo apt-get install gcc-multilib

在这里插入图片描述
再次编译;
在这里插入图片描述

查看week040120232831.s文件发现,很杂乱:
在这里插入图片描述

因此需要删除多余的辅助代码,而这些辅助代码就是类似“.size”等“.”开头的文件。通过以下代码即可删除所有“.”开头的辅助代码,且删除后的代码如下:

sed -i '/[.]/d' week040120232831.s

在这里插入图片描述
f 函数的汇编代码截图如下:
在这里插入图片描述

用矩形标出函数栈帧的形成和销毁的代码如下:
在这里插入图片描述

二、汇编-2

1 通过输入gcc -S -o main.s main.c 将下面c程序”week0402学号.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;
}

  1. 参考http://www.cnblogs.com/lxm20145215----/p/5982554.html,使用gdb跟踪汇编代码,在纸上画出f中每一条语句引起的eip(rip),ebp(rbp),esp(rsb),eax(rax)的值和栈的变化情况。提交截图。

代码如下:

#include<stdio.h>

int g(int x){
   
        return x+3;
}

int f(int x){
   
        int i=31;
        return g(x)+i;
}
int main(void){
   
        return f(8)+1;
}

编译代码如下:

gcc -S -o week040220232831.s week040220232831.c

生成week040220232831,并进行gdb,不生成无法进行gdb调试:

gcc -g week040220232831.c -o week040220232831 -m32

在这里插入图片描述
进行gdb调试

gdb week040220232831

在这里插入图片描述
一路按照以下输入进行gdb调试:

b main
r
disassemble
i r
display /i $pc
si
i r
si
x/i $pc
si
x/i $pc
i r
x /4a 0xffffd118
si
x/i $pc
i r
x /4a 0xffffd118 
disassemble

以上即结束,x /4a 0xffffd118中的16进制数是ebp的物理地址

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在纸上画出f中每一条语句引起的eip(rip),ebp(rbp),esp(rsb),eax(rax)的值和栈的变化情况。图如下所示:
在这里插入图片描述

相关推荐

  1. C++成员函数实现

    2023-12-30 10:16:03       51 阅读
  2. 汇编道题

    2023-12-30 10:16:03       51 阅读
  3. C++ 实现Python 列表list 方法

    2023-12-30 10:16:03       28 阅读
  4. 【Spring Boot】过滤敏感词实现

    2023-12-30 10:16:03       27 阅读
  5. webpack 自动清理 dist 文件夹实现方法

    2023-12-30 10:16:03       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-30 10:16:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-30 10:16:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-30 10:16:03       82 阅读
  4. Python语言-面向对象

    2023-12-30 10:16:03       91 阅读

热门阅读

  1. 2023年度最后一天班

    2023-12-30 10:16:03       55 阅读
  2. Mongodb中一个有趣的数值查询案例

    2023-12-30 10:16:03       50 阅读
  3. TCP、IP、TCP/IP、HTTP和HTTPS协议简介

    2023-12-30 10:16:03       65 阅读
  4. h5 history模式是什么

    2023-12-30 10:16:03       49 阅读
  5. WPF 基础入门(XAML理解二)

    2023-12-30 10:16:03       57 阅读
  6. Linux 赛题FTP配置

    2023-12-30 10:16:03       52 阅读
  7. 第三篇 结构型设计模式 - 简化复杂系统的结构

    2023-12-30 10:16:03       53 阅读
  8. flutter实践:Isolate应用实例二

    2023-12-30 10:16:03       54 阅读
  9. 不同开源协议之间的差异分析

    2023-12-30 10:16:03       48 阅读