栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

2021-2022-1 20212806《Linux内核原理与分析》第二周作业

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-2022-1 20212806《Linux内核原理与分析》第二周作业

反汇编一个简单C程序

文章目录
  • 反汇编一个简单C程序
    • (一)反汇编执行过程及分析
    • (二)问题总结

(一)反汇编执行过程及分析

1.使用命令:gcc –S –o main.s main.c -m32,对以下程序进行反汇编。

// main.c
int g(int x)
{
    return x + 3;
}
    
int f(int x)
{
    return g(x);
}
    
int main(void)
{
    return f(8) + 1;
}

命令执行过程如下:
生成的main.s程序如下:
     我们在分析汇编代码时,可以把main.s简化一下,所有以".“打头的字符串(都是编译器在链接阶段所需辅助信息)不会实际执行,可以都删掉。
     在VIM中通过"g/.s*/d"命令即可删除所有以”."打头的字符串,这样代码就会更加精简:

(二)问题总结

     在打开反汇编出的main.s程序时,会发现这个文件是main.c生成的,但main.s汇编文件还有一些".cfi_"打头的字符以及其他以 “.” 打头的字符串,其实这些都是编译器在链接阶段所需的辅助信息。
     EIP寄存器是指向代码段中的一条条指令,即main.s中的汇编指令,从"main:"开始,它会自动加一,调用call指令它会修改EIP寄存器。EBP寄存器和ESP寄存器也特别重要,两个寄存器总是指向一个堆栈,EBP指向栈底,而ESP指向栈顶。
     以下是堆栈空间示意图,右侧数字表示内存地址,EBP和ESP寄存器都指向栈底,即指向一个4字节存储单元的下边缘2000的位置,指2000-2003这4个字节,也就是标号为0的存储单元,依此类推,标号1的存储单元为 1996-1999这4个字节。在代码执行过程中,堆栈空间和相应的EBP/ESP寄存器会不断变化。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/292021.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号