首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用引导扇区中的函数时,汇编语言打印垃圾值

是因为引导扇区是计算机启动时加载的第一个扇区,它的主要作用是初始化计算机硬件并加载操作系统。在引导扇区中,通常会使用汇编语言编写一些函数来完成特定的任务。

打印垃圾值通常是由于未正确初始化变量或者未正确设置打印输出的方式导致的。在汇编语言中,打印输出通常是通过调用BIOS中的中断服务例程来实现的。具体来说,可以使用INT 10h中断来进行字符输出。

下面是一个简单的示例代码,展示如何在引导扇区中使用汇编语言打印字符串:

代码语言:txt
复制
org 0x7c00  ; 设置代码的起始地址为0x7c00

section .text
    ; 打印字符串函数
    print_string:
        mov ah, 0x0e  ; 设置打印输出的功能号为0x0e
    .loop:
        lodsb  ; 从DS:SI指向的内存地址读取一个字节到AL寄存器
        cmp al, 0  ; 判断是否到达字符串结尾
        je .done
        int 0x10  ; 调用INT 10h中断进行字符输出
        jmp .loop
    .done:
        ret

section .text
    ; 引导扇区的入口点
    start:
        mov ah, 0x0e  ; 设置打印输出的功能号为0x0e
        mov si, message  ; 设置SI寄存器指向要打印的字符串
        call print_string  ; 调用打印字符串函数
        jmp $  ; 无限循环

section .data
    ; 要打印的字符串
    message db 'Hello, World!', 0

times 510-($-$$) db 0  ; 填充剩余的引导扇区空间
dw 0xaa55  ; 引导扇区的结束标志

在上述代码中,首先定义了一个打印字符串的函数print_string,该函数使用INT 10h中断进行字符输出。然后,在引导扇区的入口点start中,设置要打印的字符串并调用print_string函数进行打印。

需要注意的是,由于引导扇区的空间有限,所以在编写引导扇区的代码时需要非常小心,确保代码的大小不超过510字节,并且以0xaa55作为结束标志。

关于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,无法给出具体的链接地址。但是腾讯云作为一家知名的云计算服务提供商,提供了丰富的云计算产品和解决方案,可以通过搜索引擎或者腾讯云官方网站获取相关信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

操作系统启动篇--01

after_page_tables //设置了页表之后 进入main函数 看一看mem_init… 小结 ---- 本系列参考哈工大MOOC整理而来 本系列需要汇编语言作为前置基础,不清楚汇编...ROM只读存储器代码是生产过程中直接写入,因此刚插上电时候,内存唯一有代码也是这块区域,因此CS和IP初始默认也是被设置为了执行该块代码区域起始位置。...(计算机交给操作系统来管理) 0磁道0扇区是操作系统引导扇区,一共512字节 ---- 0x7c00处存放代码 就是从磁盘引导扇区读入那512个字节 引导扇区就是启动设备第一个扇区,开机时按住...---- after_page_tables //设置了页表之后 虽然说main函数返回,操作系统会进入死机状态,但实际上main函数永远都不会返回,因为操作系统需要一直处于运行状态。...将没有使用内存全部置空,而上面从0地址处开始使用一段内存就是上面移动到0地址处system模块,也就是操作系统代码 ---- 小结 计算机启动读取BIOS,BIOS会去读取0磁道0扇区boot

61020

《一个操作系统实现》笔记(1)--NASM汇编语法和环境搭建

Bochs虚拟机调试方法 也可以在输入b 0x7c00之后继续执行,这样当引导扇区执行到这里,我们就可以单步调试了,使用dump_cpu可以查看CPU寄存器,x /64xb [addr]查看某个内存地址处内容...---- 计算机启动过程 当计算机电源被打开,它会先进行加电自检(POST), 然后寻找启动盘,如果是选择从软盘启动,计算机就会检查软盘0面0磁道1扇区,如果发现它以0xAA55结束(二进制数据经常这样搞一个特殊标记...,比如jpeg文件格式以0xFFD8作为图像数据开始标记),则BIOS认为它是一个引导扇区。...一旦BIOS发现了引导扇区,就会将这512字节内容装载到内存地址0000:7c00处,然后跳转到0000:7c00处将控制权彻底交给这段引导代码。...如L8 db "A" ;字节变量初始化成ASCIIA(65),使用变量L8来标记内存位置。

3.9K52

详解MBR篡改技术

一个盘片两面各有一个磁头(Heads),每个盘片被划分成若干个同心圆磁道,每个盘片半径均为固定R同心圆形成柱面(Cylinders),从外至里编号为0、1、2……每个盘片上每个磁道又被划分为若干个扇区...开始按bios设定系统引导顺序引导系统。当设置为从硬盘启动,Bios执行完自己程序后如何把执行权交给硬盘呢?交给硬盘后又执行了什么呢?...1、制作payload 工程payload.s文件属于汇编语言程序,需要利用其进行编译生成二进制payload。...而程序对磁盘操作直接使用了fopen等文件操作函数,这是为什么?...根据之前我们对MBR工作机制认识,当MBR被破坏,系统无法正常引导,磁盘分区信息丢失,所以需要修复这两部分才可以正常启动系统。

1.5K20

答网友问:golangslice作为函数参数传递还是引用传递?

今天有网友问通道和切片在赋值给另一个变量或作为函数参数传递时候是不是引用传递?因为老师在讲解时候说是指针传递? 先说结论:在Go语言中都是传递,没有引用传递。...然后将b第一个元素更改成10。那么,a第一个元素也将会是10。那这是为什么呢?这个要从slice底层数据结构来找答案。...如下: slice底层结构其中一个实际上是有一个指针,指向了一个数组。...那么,在把a赋值给b时候,只是把slice结构也就是Array、Len和Cap复制给了b,但Array指向数组还是同一个。所以,这就是为什么更改了b[0],a[0]也更改了原因。...另外,在Go还有chan类型、map类型等都是同样原理。所以大家一定不要混淆。

52520

哈工大李治军操作系统听课笔记——2、打开操作系统

这里图灵机是用来模仿人用笔在白纸上进行计算过程,这里控制器用来模仿人大脑,里面由一套计算逻辑,读写头用来模仿眼睛和笔,纸带模仿白纸,从现实世界抽象出来一个计算模型,但是图灵机缺点是只有一种计算逻辑...这里要记住上图中结构图: 其中IP(也称为PC)是程序计数器,用来记录当前想要执行指令地址(这是计算机组成原理相关知识),从而根据指令地址在存储器取出对应指令,进而将指令送到CPU中进行执行(...这是可以理解为在处理不同指令,相当于不同图灵机),重复地进行取指、执行操作,这也就是计算机工作基本原理。...1、引导扇区代码:bootsect.s (其中.s后缀代表是汇编代码) ? Q:为什么不使用C语言等高级语言,而要使用汇编语言呢?...A:引导扇区需要进行完整控制,汇编语言更加能够对计算机实现完整控制,而C语言不是完全透明,无法对计算机实现完整控制。

77320

golang 函数使用返回与指针返回区别,底层原理分析

变量内存分配与回收 堆与栈区别 变量内存分配逃逸分析 检查该变量是在栈上分配还是堆上分配 函数内变量在堆上分配一些 case 函数使用与指针返回性能差异 其他一些使用经验 总结 变量内存分配与回收...栈生长和收缩都是自动,由编译器插入代码自动完成,因此位于栈内存函数局部变量所使用内存随函数调用而分配,随函数返回而自动释放,所以程序员不管是使用垃圾回收还是没有垃圾回收高级编程语言都不需要自己释放局部变量所使用内存...Go 声明一个函数内局部变量,当编译器发现变量作用域没有逃出函数范围,就会在栈上分配内存,反之则分配在堆上,逃逸分析由编译器完成,作用于编译阶段。...上文介绍了 Go 变量内存分配方式,通过上文可以知道在函数定义变量并使用返回,该变量会在栈上分配内存,函数返回时会拷贝整个对象,使用指针返回变量在分配内存时会逃逸到堆,返回只会拷贝指针地址...那在函数返回使用还是指针,哪种效率更高呢,虽然有拷贝操作,但是返回指针会将变量分配在堆上,堆上变量分配以及回收也会有较大开销。

5K40

《程序是怎么跑起来》读书笔记

但有一点需要注意,主存存储指令和数据会随着计算机关机而自动清除。 通常我们将汇编语言编写程序转化成机器语言过程称为汇编 ;反之,机器语言程序转化成汇编语言程序过程则称为反汇编 。...该数据位是 1 表示负,为 0 则表示“正或者 0” 在二进制数,我们使用是“将小数点前面的固定为 1 正则表达式 ”。...指针 也是一种变量,它所表示不是数据,而是存储着数据内存地址。通过使用指针,就可以对任意指定地址数据进行读写。 数组 是指多个同样数据类型数据在内存连续排列形式。...在数组各个元素,除了数据之外,通过为其附带上下一个元素索引,即可实现链表 。 二叉查找树是指在链表基础上往数组追加元素,考虑到数据大小关系,将其分成左右两个方向表现形式。...栈清理处理 是指,把不需要数据从接收和传递函数参数使用内存上栈区域中清理出去。 磁盘是通过把其物理表面划分成多个空间来使用

1.5K31

实战操作系统 loader 编写(下) -- 进军内核

内存区域划分 经过一系列文章,我们不断在向物理内存存放着我们文件,从最初引导扇区,到 loader.bin,再到 kernel.bin,整个物理内存到底被我们变成了什么样子呢?...下图展示了物理内存样貌: 图中按照具体物理内存使用情况划分了格子,但格子大小是均等,并没有按照实际大小比例来绘制,不过左侧标注了物理内存地址,所以格子实际在内存大小是可以通过左侧数字计算得到...编译后,我们再次查看 kernel.bin ELF header: 可以看到,新编译后 kernel.bin ELF header ,e_entry 已经变成了10000h。...事实上,既然我们已经从 BIOS 加载起始扇区,到跳转进入 loader,并且不会再次回去执行 BIOS 或其实扇区代码,从 0h 到 7FFFFh 全部区域我们都可以覆盖使用。 4....内存拷贝函数 首先,我们需要一个能够复用内存拷贝函数,你一定想到了 C 语言中 memcpy 函数,没错,我们就用汇编语言仿写一个 memcpy: ; ------------------- 内存拷贝函数

36320

程序员需要了解硬核知识之操作系统和应用

但是,在上面代码扇区压根就没有出现过传递给 fopen() 函数参数,是文件名 MyFile.txt 和指定文件写入 w。...下面让我们来看一下代码清单 fp 功能,变量 fp 中被赋予是 fopen() 函数返回,该被称为文件指针。应用打开文件后,操作系统就会自动申请分配用来管理文件读写内存空间。...内存地址可以通过 fopen() 函数返回获得。...比如,用 C 语言来处理整数数据,有8位 char 类型,16位short类型,以及32位long类型三个选项,使用位数较大 long 类型进行处理的话,增加只是内存以及磁盘开销,对性能影响不大...最初,为了实现在显示器显示和在打印打印,就必须分别编写各自程序,而在 Windows ,可以借助 WYSIWYG 基本上在一个程序中就可以做到显示和打印这两个功能了。

48320

linux开机启动顺序

Linux引导扇区内容是采用汇编语言编写程序,其源代码在arch/i386/boot(不同体系CPU有其各自boot目录),有4个程序文件:   ◎bootsect.S,引导扇区主程序,汇编后代码不超过...512字节,即一个扇区 大 小   ◎setup.S, 引导辅助程序   ◎edd.S,辅助程序一部分,用于支持BIOS增强磁盘设备服务   ◎video.S,辅助程序另一部分,用于引导屏幕显示...最后调用cpues_idle()函数:进入了系统主循环体口默认将一直执行 default_idle()函数指令,即CPUhalt指令,直到就绪队列存在其他进程需要被调度才会转向执行其他函数。...只要其中有一个程序加载获得成功,那么系统就将开始用户层初始化,而不会再回到init()函数。至 此,init()函数结束,Linux内核引导 部分也到此结束。...默认等级有以下几项:   0 - halt (系统直接关机)   1 - single user mode (单人模式,用于系统维护使用)   2 - Multi-user, without NFS

8.3K100

操作系统之引导

第一种方案,在一个分区上只安装一个操作系统,或者安装相同软件厂商不同操作系统是有效,但如果安装两个不同厂商操作系统,可能就会有问题。假设操作系统A和B都使用是第一种策略,A先安装到分区上。...因此可直接在引导扇区设置一个变量(cluster尺寸),并写入cluster尺寸。这样引导扇区就无需计算cluster大小,而直接引用即可。这种方法可大大减少引导扇区代码量。...这样综合下来,可节约大约60字节空间。不要小看这60个字节,在汇编语言实现引导扇区,60个字节可以实现分析FAT32根目录项功能,而这是FAT32引导扇区核心功能。...在MSwindows系列操作系统,NTFS分区引导扇区一共用了16个(也就是说,要引导NTFS上操作系统文件,需要8K代码空间)。因此只能更进一步使用预置引导法。...: 1、 FAT32和NTFS文件系统引导扇区代码(汇编语言编写),存放在sysinit目录下。

85410

计算机基本组成、操作系统、编程语言学习笔记

,检测硬件:CPU、内存、硬盘等 BIOS读取CMOS存储器参数,选择启动设备等 从启动设备上读取第一个扇区内容 根据分区信息读入BootLoader启动装载模块,启动操作系统 操作系统询问BIOS...qq,并从硬盘读取qq代码至内存(运算器+内存+硬盘) 5.计算机在内存运行qq代码(内存) 6.如果此时从qq好友接收一个文件并下载,该文件将会永久保存在硬盘 7.关闭qqCPU向内存发出关闭...qq指令,内存关闭qq并清理内存qq代码 编程语言分类 机器语言 直接用0和1进行编程语言 优点:执行效率高开发效率低 汇编语言 汇编语言通过汇编语言翻译器将汇编语言翻译成机器语言。...优点(较汇编语言):开发效率高 缺点(较汇编语言):执行效率低 解释型语言 直接将代码解释称机器码,每写一句就可执行语句, 优点(较编译型):开发效率高 ,缺点执行效率低 编译型语言 使用专门编译器,...在交互式下不需要用print,可以自动打印 优点:可以清楚地看到每一句指令执行结果 缺点:不能保存,只可用作一般调试 命令行式 在文本编辑器编写代码,由于python语言是解释型语言,我们直接使用python

53520

对不起,学会这些知识后我飘了

扇区,把磁盘表面分成若干个同心圆空间就是 磁道,把磁道按照固定大小存储空间划分而成就是 扇区 ? 扇区是对磁盘进行物理读写最小单位。...Windows 中使用磁盘,一般是一个扇区 512 个字节。不过,Windows 在逻辑方面对磁盘进行读写单位是扇区整数倍簇。...最初,为了是现在显示器显示和在打印打印,就必须分别编写各自程序,而在 Windows ,可以借助 WYSIWYG 基本上在一个程序中就可以做到显示和打印这两个功能了。...图中意思是指 c 在 MyFunc 定义了但是一直未被使用,这其实是一项编译器优化功能,由于存储着 AddNum 函数返回变量 c 在后面没有被用到,因此编译器就认为 该变量没有意义,进而也就没有生成与之对应汇编语言代码...全局变量和局部变量 在熟悉了汇编语言后,接下来我们来了解一下全局变量和局部变量,在函数外部定义变量称为全局变量,在函数内部定义变量称为局部变量,全局变量可以在任意函数使用,局部变量只能在函数定义局部变量内部使用

63910

CTF实战22 病毒感染技术

2类: 一种是面对大规模计算机使用网络发动拒绝服务计算机蠕虫,虽说会绑架计算机,但使用者可能还可以正常使用,只是会被占用一部分运算、连网能力 另一种是针对个人用户以执行大量垃圾代码计算机蠕虫。...引导型病毒 这个类型病毒是从系统启动扇区(Boot)或者硬盘系统引导扇区(MBR)来加载自己 引导型病毒主要存在于主引导区、引导区 病毒利用操作系统引导模块会存放在某个固定位置上, 并且控制权转交方式是以物理位置为依据...,而病毒已隐藏在系统并伺机传染、发作 引导型病毒进入系统,一定要通过启动过程 在无病毒环境下使用软盘或硬盘,即使它已感染引导区病毒,也不会进入系统并进行传染 2....,至今仍可破坏计算机硬盘引导记录)传染计算机病毒 DOS病毒是最早出现计算机病毒 感染主引导扇区引导扇区DOS病毒称为引导型病毒 3....,并且在运行时候获得优先运行权,包括找寻可执行文件入口点和自动运行宏两种 之后,病毒就会开始隐秘其运行权,不然电脑使用者察觉,之后病毒会进行一些系统层次代码和函数替换 最后溢出获得系统较高权限

88220

关于启动引导那些事儿(上) : Legacy Boot

此外,由于引导我们也需要访问、识别其他硬件设备(除了硬盘,还有光驱、USB等等),因此这个程序也需要具备访问其他硬件设备能力。此外它还要在操作系统启动过程,给操作系统提供访问硬件设备方法。...对于每个引导设备,BIOS加载它第一个扇区(共512字节,称为引导扇区),而这个扇区内就存放着我们引导程序,即MBR(Master Boot Record,主引导记录)。...Real World MBR 实际使用MBR还真不太好找。如今,Windows已经唯一指定UEFI了,因此我们只能在其他阵营里找MBR。我最终选择采用LinuxLive OSMBR来进行分析。...而之后代码段就是用来打印错误信息了。 我们可以从错误信息打印开始对引导逻辑进行分析。在反汇编要注意,由于BIOS是运行在实模式下,因此要做特殊配置。...其中,CHS(cylinders-heads-sectors)是比较原始读取方式,它使用(磁头, 磁道, 扇区)对某一扇区进行定位。

2.7K10

红帽认证RedHat-RHCSA 磁盘管理

0磁头0柱面1扇区 磁盘0柱面、0磁头、1扇区称为主引导 磁盘分区表 含4个分区项,偏移地址01BEH——01FDH,分区项1、分区项2、分区项3、分区项4 结束标记 偏移地址01FE——01FF...2个字节为结束。...GPT是一个实体硬盘分区表结构布局标准,它是可扩展固件接口(EFl)标准(被Intel用于替代个人计算机BlOS )一部分,被用于替代BlOS系统一32bits来存储逻辑块地址和大小信息引导纪录...1M  500M   print  打印分区表   rm分区号  删除   gdisk  类似fdisk功能,但是仅限于gpt分区 filesystem  文件系统  用户和数据之间接口,帮助管理数据...mkfs  -t  xfs  /dev/sdc2   mkfs.ext4  == mkfs  -t  ext4    mkfs.xfs  /dev/sdc3  -f z  第二次格式化,格式化为xfs需要加入

18140

11.9 实现磁盘相关操作

函数则调用这两个函数来遍历所有逻辑驱动器并输出相应信息。在输出驱动器空间信息,会输出该驱动器总大小、已用空间以及可用空间。...该函数使用Shell2.dll模块SHFormatDrive()这个未导出函数实现对特定磁盘格式化。...代码定义了几个数据结构来表示MBR及其组件,包括引导记录、磁盘分区表和磁盘签名,ShowMbr使用ReadFile函数从硬盘读取MBR数据,然后以十六进制格式逐字节打印MBR数据。...AnalysMbr函数提取并分析MBR数据,打印引导记录、磁盘签名和分区表信息。...主函数使用CreateFileA打开第一个物理硬盘,使用ShowMbr函数读取MBR数据,使用AnalystMbr函数分析MBR数据,然后使用CloseHandle函数关闭文件句柄,此段代码读者在编译需采用

19930

实战操作系统 loader 编写(上) -- 进入保护模式

引言 此前文章,我们详细介绍了从引导扇区跳转到 loader 工作: 从启动扇区跳转到 loader 引导扇区工作已经告一段落,接下来我们工作就是编写我们 loader 了。...2. loader 加载内核过程 有了通过引导扇区加载 loader 经验,让 loader 加载内核就简单多了。...从软盘读取 kernel 我们首先来看看如何让 loader 能够在软盘上找到 kernel,这里 kernel,我们暂且先使用之前我们写好快速排序程序: 如何实现汇编语言与 C 语言之间相互调用...在软盘寻找 kernel.bin 想了解更加详细内容,参考此前引导扇区加载 loader 代码: 从启动扇区跳转到 loader 主要步骤仍然是: 循环读取根目录区一个扇区 循环读取当前扇区一个条目...jmp dword SelectorFlatC:(BaseOfLoaderPhyAddr + LABEL_PM_START) jmp $ ; ---- 显示一个字符串, 函数开始

96620
领券