深入理解计算机系统读书笔记之一个简单汇编程序的调试分析

课堂练习及课后作业2.1:外部中断 本关任务:通过相关知识以及实验回答:版本 1 内核的第 6 次时钟中断发生时,断点和恢复点(指令地址)分别是多少?本关任务:修改版本 0 内核,使得每发生 100 次时钟中断,就在屏幕上输出一个字符‘t’和当时的进程号,如“t(0)”表示0号进程运行时发生了时钟中断。本关任务:通过实际操作回答在输出第一行 0/1 字符的过程中(如下图所示),共发生了几次时钟中断?本关任务:修改版本 1 内核源码,使得每次时钟中断发生时,都在屏幕上输出字符‘t’。分析版本1内核,找到第一次时钟中断的恢复点地址。 阅读详情

为了深入理解汇编程序中的帧指针(ebp)和栈指针(esp)的用法,想亲自调试下程序,我写了一个简单的程序,如下:      

保存为hello.c,然后在终端输入gcc -S hello.c,就会有个hello.s生成,也就是上面程序对应的汇编程序了,主要程序清单如下:                         

然后使用as -gstabs -o hello.o hello.s和ld -o hello hello.o生成可执行文件,最后就可以调试了,这里就是本文的重点了。

一、设断点

break *_start + 1,程序会在nop那里停下来

二、run

三、我调试的每一步

Breakpoint 1, _start () at hello.s:7
7        leal    4(%esp), %ecx

        

(gdb) next
8        andl    $-16, %esp

然后的这句话比较费解 andl %-16, %esp,-16的二进制表示为0xFFFFFFF0,这里是将SP的低4位清零了,这样地址就是16的整数倍了,寻址会更快,因为esp的低4位本身就是0,所以这句话在这里并没有起到作用,我们就把这里跳过,直接next

(gdb) next
9        pushl    -4(%ecx)                             
(gdb) next
10        pushl    %ebp

(gdb) next
11        movl    %esp, %ebp

(gdb) next
_start () at hello.s:12
12        pushl    %ecx


(gdb) next
13        subl    $36, %esp

(gdb) next
14        movl    $3, -16(%ebp)

(gdb) next
15        movl    $4, -12(%ebp)

(gdb) next
16        movl    $5, -8(%ebp)

(gdb) next
17        movl    -8(%ebp), %eax

3, 4, 5就分别存放到了ebp -16, ebp -12, ebp -8 这3个位置

我们查看下是不是这样的

(gdb) x /4 0xbffff5a8                                    //果然在
0xbffff5a8:    3    4    5    -1073744444

(gdb) next
18        movl    %eax, 8(%esp)


(gdb) next
19        movl    -12(%ebp), %eax

(gdb) next
20        movl    %eax, 4(%esp)


(gdb) next
21        movl    -16(%ebp), %eax


(gdb) next
22        movl    %eax, (%esp)


(gdb) next
23        call    add


(gdb) step
add () at hello.s:34
34        pushl    %ebp


(gdb) next
35        movl    %esp, %ebp


(gdb) next
36        movl    12(%ebp), %edx


(gdb) next
37        movl    8(%ebp), %eax


(gdb) next
38        addl    %edx, %eax


(gdb) next
39        addl    16(%ebp), %eax


(gdb) next
40        popl    %ebp


(gdb) next
add () at hello.s:41
41        ret


(gdb) next
_start () at hello.s:24
24        movl    $0, %eax


(gdb) next
25        addl    $36, %esp


(gdb) next
26        popl    %ecx


(gdb) next
27        popl    %ebp

(gdb) next
_start () at hello.s:28
28        leal    -4(%ecx), %esp         

                 

(gdb) next
_start () at hello.s:29
29        ret


(gdb) next
0x00000001 in ?? ()


程序结束

pscad IEEE标准系统搭建说明 pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。 立即下载

相关推荐

R语言生存分析

自己整理编写的R语言常用数据分析模型的模板,原文件为Rmd格式,直接复制粘贴过来,作为个人学习笔记保存和分享。部分参考薛毅的《统计建模与R软件》和《R语言实战》生存分析是研究生存时间的分布规律,以及生存时间和相关因素之间关系的一种统计分析方法。生存分析在医学科学研究中具有广泛而重要的应用价值,它对人群寿命的研究,各种慢性疾病的现场追踪研究,临床疗效试验和动物试验等研究中随访资料的处理骑着举足轻重的作

Tiaaaaa的博客 2万+

Linux栈溢出例子详解

注:本例中使用的例子为看雪论坛帖子中的例子(https://bbs.pediy.com/thread-216868.htm),结合自己的理解,进行更深入的详细的讲解,更有利于理解细节! 例子中的代码如下: //vuln.c #include <stdio.h> #include <string.h> int main(int argc, char* argv[]) { /*...

weixin_39833509的博客 1633

OpenCV实战:如何用Debevec算法搞定相机响应函数(附完整代码)

本文详细介绍了如何使用OpenCV实现Debevec算法计算相机响应函数(CRF),并应用于HDR图像合成。通过完整的代码示例和工程实践问题解决方案,帮助开发者掌握从原理到实现的关键步骤,提升高动态范围成像和计算机视觉任务的处理能力。

weixin_29061041的博客 230

mit6.828 lab1 exercise11

exercise11

weixin_42376554的博客 282

数据科学常见模型总结(二)-倾向性得分匹配模型

PSM的核心思想是从未受干预的用户群体中,找到和干预对象一模一样的用户,这样就可以把因果效应归因到干预上。

wudelong0112的专栏 4891

LabVIEW工程密码保护机制与移除技术详解

LabVIEW作为工业自动化领域广泛使用的图形化编程工具,其密码保护机制涉及文件加密与权限控制等核心技术。从技术实现来看,现代版本采用AES-128加密结合SHA-256哈希校验,而经典版本使用XOR加密配合Base64编码。理解这些加密原理对于工程维护、灾难恢复等合法场景至关重要。在实际应用中,密码移除工具需要处理不同版本的文件结构差异,包括解析XML描述区的Protection标签、动态识别版本并应用对应解密策略。这类技术在工业设备维护、教学研究等场景具有重要价值,但必须注意遵守法律边界,确保拥有合法的

weixin_34161083的博客 390

汇编代码调试程序debug参数说明

汇编语言开发调试的步骤如下 1.EDIT,编写汇编程序代码,生成.asm文件 2.MASM,汇编程序,将.asm文件编译成二进制代码,生成.obj文件 3.LINK,链接程序,将.obj链接成为可执行文件,生成.exe文件 4.DEBUG,调试程序 学习前我们先准备环境,工具下载地址如下: https://download.youkuaiyun.com/download/shanghaichongmin/67356237 使用工具,先解压,不用位数的计算机开启方法不一样 32位:dos路径切

shanghaichongmin的博客 9960

从图片到3D模型:用Tripo+Unity打造AI建模流水线(避坑指南)

本文详细介绍了如何利用Tripo和Unity构建AI驱动的3D建模流水线,从图片到3D模型的高效转换。通过文生模型和图生模型的双模系统,开发者可以大幅提升建模效率,适用于游戏开发和数字内容创作。文章还提供了环境配置、图片预处理、批量生成等实用技巧,帮助开发者避开常见陷阱。

weixin_27024175的博客 616

04_分析几个汇编指令片段(一)

分析以下汇编指令片段 push $8 movl %esp, %ebp subl $4, %esp movl $8, (%esp)

weixin_39247141的博客 734

RHCA ---RH442-4

这题考试中是没有的,但我做ex的判分脚本里做了,主要是lab环境swap只有512M的,这样后续改了某几个参数后会造成内存不够用导致异常.这里记得是双>,如果没自信的小伙伴可以在考试开始后第一时间把/etc/fstab先备份一个或者vi进入后手动敲一下。根据题意我们需要分2个768M的分区给swap。用free看swap大小是2.0Gi即可。留意红框中的内容即可,最后w保存退出。这个时候可以重启下机器。

Q先生 642

SY6982C 7.4V锂电池1A充电模块原理图设计,已量产

在手持设备、便携工具与小型无人机等场景中,7.4V(2S)锂聚合物电池的应用愈发广泛。这类电池对充电系统的安全性、效率与兼容性提出了明确要求:需支持 USB 5V 输入、1A 安全充电,同时具备多重保护机制。本文将结合一款基于 SY6982C 的充电原理图,深入解析其电路设计与技术亮点。

不脱发的程序猿 362

操作系统总结&Unix环境编程(四) ---- 设备管理(I/O原理)

引子 外部设备分为存储性设备和I/O型设备,设备管理通常采用I/O中断、缓冲区管理、通道、设备驱动调度等多种技术。通常有以下功能: 设备中断处理 缓冲区管理 设备分配去配 设备驱动管理 实现虚拟设备 一、I/O硬件原理 1、概念:I/O系统 I/O操作 I/O操作特性 2、I/O控制方式:对CPU和设备的...

waittor的博客 723

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

《深入理解计算机系统》笔记-计算机系统漫游

视频地址:https://www.bilibili.com/video/BV1kE411X7S5?p=9&spm_id_from=pageDriver 一、什么是计算机系统? 程序的执行结果 不仅取决于 算法、程序编写,而且取决于 语言处理系统、操作系统、ISA、微体系结构。 不同计算机课程处于不同层次,必须将各层次关联起来解决问题。 1. “计算机系统基础” 内容概要: 2. 为什么要学习 “计算机系统基础”? 3. 冯 · 诺依曼结构 1946年,普林斯顿高等研究院开始设计 “存储程序”

ClimberCoding 779

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

CSAPP 读书笔记(一)

CSAPP。

xc_biubiubiu的博客 1177

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【课程总结】Linux内核分析课程总结

程涵 原创博客 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 每周实验报告: 反汇编一个简单的C程序http://www.cnblogs.com/ClareOhno/p/5223874.html 操作系统是如何工作的http://www.cnblogs.com/ClareOh...

aashao137666的博客 229

汇编语言与微机原理-变量的调试与分析

请对源程序文件中的源程序 利用debug进行调试分析, 请提交调试截图(截图加上适当标记或注释)以及 通过调试分析收获理解了的知识点、体会等文字叙述。 DSEG SEGMENT ORG 10H VARB DB 'ABCDE' EVEN VARW DW 3 DUP(5),4 DUP(-1) BUFW EQU THIS WORD BUFBB LABEL BYTE VARD DD 1234H,5678H,3 DUP(5) BUFB EQU BYTE PTR VARD

zombotany的博客 2121

64位汇编参数传递

64位汇编 当参数少于7个时, 参数从左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9。 当参数为7个以上时, 前 6 个与前面一样, 但后面的依次从 “右向左” 放入栈中,即和32位汇编一样。 参数个数大于 7 个的时候 H(a, b, c, d, e, f, g, h); a->%rdi, b->%rsi, c->%rdx, d->%rcx,...

麦峰强的博客 3257

计算机汇编语言调试报告心得,汇编语言实习心得

通过汇编语言实习,学生应该通过大量的上机实验熟悉8086 CPU的指令功能、用途和使用技巧,进而通过循序渐进的程序设计练习,验证各类指令的功能和提高程序设计的能力。下面是学习啦小编为大家收集整理的汇编语言实习心得,欢迎大家阅读。汇编语言实习心得篇1分支程序设计(2课时)一、实验目的1、学习使用汇编语言、连接程序对汇编语言源程序进行汇编、链接装配操作。2、学习使用调试程序debug对可执行文件.ex...

weixin_34378815的博客 1205

C语言语句的汇编级表示if,if-else,for

if int main() { int a=1,b,c;//为了简单起见,不包含任何文件!! if(a<666){ b=a; } } //注:codeblocks不知道为啥,比较666到了汇编里面就是比较665,比较2又变成了比较1, //总是小1 把12(%esp)的指向的a和665比较,如果跳转了就是说跳到if{}后面去,如果没跳转就是直接执行{}里面的语句所以跳转条件总是和if的条件相反!! if-else 解释:多了一个else其实就是不符合i

weixin_46028606的博客 1154

汇编实验三 汇编语言程序的调试与运行

一.实验目的 1.熟练掌握编写汇编语言原程序的基本框架 2.熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。 二.实验内容 一个汇编语言程序从写出到最终执行的简要过程如下: 1) 编辑 可以用任意的文本编辑器来编辑源程序,只要最终将其存储为纯文本文件即可。一般保存为*.asm文件。 2) 编译 上机过程中,我们采用微软的masm5.0汇编编译器,文件名为masm.exe。我们的编译器...

dreamlpx的博客 9151

编译器编译过程探究

摘要: 完整的语言处理系统包括预处理器、编译器、汇编器、连接-编辑器四个组成部分。一个典型的编译过程为:预处理器将源程序中的宏展开为原始语句加入到源程序中,编译器则产生汇编代码,汇编代码交由汇编器产生可重定位机器代码,然后与一些库程序连接在一起形成绝对机器代码,即可在计算机上执行的代码。本文以GCC为工具,对简单的C,C++程序进行编译,观察其各个部分的输出内容,探究语言处理系统所做的完整工作。 ...

weixin_39999637的博客 888

汇编语言程序运行过程分析

实验项目 程序运行过程分析 综合性实验 2020年11月 18日 一、实验综述 1.实验目的及要求 (1)掌握程序执行具体过程 (2)构建汇编语言的运行环境 (3)掌握汇编语言的编译连接过程 (4)掌握汇编语言的调试跟踪过程 2.实验仪器、设备或软件 VMWARE win7虚拟机 phpstudy DVWA-master 3.实验原理 一个源程序从写出到最终执行的过程。 (1)编写汇编源程序 (2)对源程序进行编译连接 使用汇编语言编译程序对源程序文件中的源程序进行编译,生成目标文件;...

fencecat的博客 6025

计算机汇编语言调试报告心得,汇编语言实验总结.docx

汇编语言实验总结合肥工业大学  计算机与信息学院  实验报告  课程:汇编语言程序设计  专业班级:计算机科学与技术13-1班  学号:XX  姓名:樊娇  实验一Debug程序的使用  一.实验目的  1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。  2、掌握8086/8088的寻址方式及多字节数据的处理方法。  二.实验内容  1、利用DEBUG程序中的“E”命令,...

weixin_30972131的博客 2125

汇编语言---debug调试技巧

查看数据段中的内容 单步执行程序,使用-p(不进入内部程序),而-t进入内部程序进行跟踪

accumulation 509
上一篇: Debian系统配置文件说明
下一篇: 深入理解计算机系统读书笔记之程序的跳转
tracing
博客等级 码龄20年 108粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值