BIOS程序编写——ISA模块的编写

BIOS程序编写——ISA模块的编写

ID:38178106

大小:1.33 MB

页数:5页

时间:2019-05-24

上传者:U-3743
BIOS程序编写——ISA模块的编写_第1页
BIOS程序编写——ISA模块的编写_第2页
BIOS程序编写——ISA模块的编写_第3页
BIOS程序编写——ISA模块的编写_第4页
BIOS程序编写——ISA模块的编写_第5页
资源描述:

《BIOS程序编写——ISA模块的编写》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

⋯⋯⋯⋯⋯⋯‘狙i黼jsocket;文/图rOss上一一些基本的知识和软Bl0S的功能节向大家介绍了,实际上几乎所有的厂商都会增加件的使用一B10S这一ACPItableACPIACPI。这节将正式将大家领入编程部分内容,支持的列的殿堂。表.只有支持ACPI的B10S,才能真正实现ACPI功能EPALOG0,能源之星图形文件,也就是BID8文件分新主板自检时候的右上角的图标。下面我们来看一下第七个模块下面以捷波主板的B10S为例(从互联网下,图片上标BlOS固etwabin)ISAROM1一ISA载下来的件文件jy.,键入命令识为[],可以看出这是个模块“”CbromjetwaY.bin/d。如图1所示,返回(ISAM0duIe),因为主板的不同,可能有些Item—Name主板并没有1SA模块SA了许多有用的信息,如模块名(),,或者有两个以上的I模”OriginaI—siZe)块模块原始大小(.压缩后的大小。这里的模块其实是希捷主板自带的捷波”(Comressed—SiZe)(0riginaI—P,原始文件名恢复精灵。FiIe—Name)BIOScbromexeBIOS芯片空间的约束使用.导出/导入甚至删除中的。因为,几乎所有的模块都进行了压缩(LHA算法),以便模块是极为方便的。下面介绍几种常用的添加节省体积。删除Bl0S模块的命令cbrombiosbin/EXTRACT(.模块名用于导出B10S中的模块)cbrombiosbin/lSAinputbin..(用于导入ISA模块)cbrombiOSbin/DELETE(.模块名用于删除B10S模块)BI口S内存布局图1如图2所示一BIOS内.是幅相对比较详细的可以看出,捷波主板的B10S共有7个模块,存布局图.大家可不要被这么多陌生的英文单其中主要的有SystemBIOS,包含了BIOS的初词给吓坏了。如果还不清楚什么是保护模式和始化模块,是系统中最基本的部分,所有的实模式的朋友,请到网上获取信息。BIOS一XGROUPCODEBIOS从图中我们可以大致的看出实模式下的内都有这部分,扩展程序.是各个厂商自己定制的不同于标准Award存可分为三大区域。圈谶拨誉裟} ’“。。⋯⋯⋯。“⋯。)i栏葚目晶编蔷辑)8s0ocket)_■■__医(A20Gate)。A20门其实就是在第21根地址一个开关线上做了,只有当该开关打开时,才能访问到高端内存。由于BIOS厂商的不同,BIOS设计的模块以及启动程序也不尽相同。下面依然以AwardBIOS为例。AWard公司的BIOS除了激活区段{BootBIock:即加电初始化首先执行的指令所在的区域)以外的部分,都要使用LHA算法进行压缩并整合到BlOS文件中。BootBlock位于SystemBlOS模块中。计算机加电启动,首先执行位于0FFFF0h处的指令一个jmpfar(远,这个指令是iJBootBIock处BootBIock转移指令),跳转~.然后开始检测BIOS的校验和.如果出错则跳转到紧B10S一切顺利急恢复程序或备用。如果,BootBIock开始解压缩各个模块并检测其校验和.如果校验和正确,将跳转到这些模块执行。15A簟杖蝈写明1aseMemor:Oh~9FFFF0)By.常规内存.,一共640kb一段内存通常作为DOS下可执行1)IsA模块的结构。这InterruPt3一lSA模块结构文件的载体.也储存了中断向量表(如图所示.是个标准的,“55hVectorTable)、BIOS数据区(BIOSDataArea)开头的两个字节作为开头的标志.必须为BAAh”PE和引导扇区(OOtArea)。,就好像文件头的前两个字节为””一一2)UpperMemory:A0000h~Mz.上个字节是模块的长度位内存区,样。后,因为OFFFFFh一384kbB10S(lSA512字节的整数倍,共。包括显卡、网卡的模块的长度必须为.如果B10S)都被映射到该地址空间。为01h,则是512字节.如果为02h,则是10243)HighMemorYArea:高端内存区03h一.字节.以此类推。在文件偏移的处,是个OFFFFFh~1OFFEFh一64kbmP指令,共。,跳到程序真正的入口点。Oh5sh—说到这段内存.大家可能会感到迷惑。众.Aahc●块开头瓣蠢志▲羹●PE头的M2髯)2h0lh(羹块长度"所周知8086/8088CPU一起里墨01512字节).的在实模式下采用3bImp|莹序入口点(_聃涠程序_队日点刑打执衔t楚盔冒哺嘲‘指夸)segment:offset的方式进行寻址。当我们寻址时.’铀一▲mn|而1leIIo.Wodd▲Oh‘定义苎雌)CPU通过计算(~psegment,10h+offset)得出实际17hsome_dwordddOh的物理内存地址并传人CPU的20位地址线。理论‘0一2程序入口直上来说.2位地址线共可以表示20个地-址,即最大寻址范围只有1024kb。但通过511h一—chectummdb(这壁是程序曲量后十字节,作为6A羹吱segment:offset的方式进行寻址,实际上可以表示帕讹相)FFFF:FFFF~pOFFFFh*10h+0FFFFh=10FFEF~.,换图5算过来差不多是1088kb,实际上这个地址已经超过了20位地址线的处理范围。如果我们访问在程序的入口点可以编写自己的程序.就像在DOS下编写COM程序一样10FFEFh处的内存FEFh,但是要注意许,实际访问的是0F。但是到了后来.20286处理器的横空出世,地址线达多细节.这会在后面讲到。一~程序的最后个字节是校验和到了24位0FFFFFh10FFEFh.那么什么.使处的访问变成了-是校验和呢?其实很简单8IOSlSA现实,在进行到模.为了保证向下兼容.就出现了A20fj一?i恭等酱巍富叫200911里霉峤绻-眵阻 ⋯⋯I⋯I⋯I11⋯1⋯IL)栏目编辑)socket)一块时一WOrd.采用累加的方法,即把模块文件的每只要加入方括号即可。例如.定义了个”个字节相加,如果累加最后的结果为0.则校验型数据,mYAgedW99r.如果要将99h这”正确一aX。编写个程序来实现起来也非常简单.个数据加载到寄存器中,则使用mOVax,如果有一个512字节的ISA模块511meme,先将前字节[yAg卜但如果要~ByAg的偏移地址加载100h””相加,再用减去得出的结果.最后得到的到aX中.就要使用mOVax.mYAge。结果直接填入ISA一个字节即可NASM模块的最后。这中定义函数都用标签的形式.如lSACh“”个程序我已经编好了,叫做ecksum,已随mYFunC:,堆栈平衡的代码和返回代码都需”文提供。要自己动手写,而调用函数则直接使用CaIIlSA”另外.在编写模块的时候要注意如下细节mYFunC即可。①ISA模块拥有自己的堆栈,堆栈大小默认使用Org关键字,它的功能是指定程序被载为1K。入内存时的起始地址。例如在汇编源文件开头”“②ISA模块不用像COM文件需要载入到内存写入org100h表示程序将被载入内存的100h100hB10SlSA“”的处再执行,而是直接在文件(位于处,在模块中,应写为OrgO。上位内存区)中执行,执行之前,B10S会把段times可以进行字节的重复操作$指令代表ISA“寄存器赋值为模块开头的地址,这使得我们当前位置$$代表文件开头的位置。times”lSA模块中导八字符串等地址不用重新定位512一($一$$)db0O在,表示用填充剩余的空间.即如果字符串位于ISA模块文件开头的20h,我直到512字节为止。“”movbX20h3)BIOS一一们可以直接用,这样的命令导入使用提供给自己的功能中断该字符串的地址到寄存器。对于已经习惯使用Windows下API函数的朋③ISA模块在执行时可以修改自己段内的数友.使用中断来调用系统功能无疑会非常不习据(有人会奇怪BlOSROM为只读存储器,为什惯。因为没有像函数名这样容易辨识的标志,么可以修改BIOSROM中的数据呢7这是因为使传递参数也没有任何提示.只有查看中断说明用了BIOSShadow技术).但修改之后必须保证书或者死记硬背下各个寄存器的功能。但总的整个模块校验和的正确性,模块退出时会通过来说,调用中断操作起来还是挺简单的。校验和检测模块的正确性我们将从最简单也是最实用的部分学起一,如果错误.就会造一屏幕操作成无法恢复的错误.所以不推荐对模块进行修。改该操作。开机以后,BIOS都工作在文字方式。其实④切勿在lSA模块中使用DOS中断,这也是初还可以切换BIOS的视频方式到各种不同的方学者经常犯的错误.因为此时DOS并没有启动。式,不同方式的屏幕分辨率、颜色数都有所不⑤ISA模块的调用属于远距离调用一2580,程序末同。在默认的文本方式下.屏幕共行一fetf列尾定要使用返回。.当我们在屏幕打字的时候,屏幕上会出现2)使用NASM编写lSA模块闪烁的光标,WindOWS下我们称之为插入符。NASM作为免费开源的汇编编译器&连接我们可以控制它以便在屏幕的各个位置自由的器.许多高手都喜欢用它编写程序,不仅仅是进行屏幕输出。因为它是免费的.而是因为它使用起来的方便①设置光标位置(INT10h,02h)性。对于从来没有使用过NASM的人来说.使用MOVA}{一,02h;每个中断有不同的功能,用它来编写代码仍然会遇到多多少少的困难,所AH裹示子功能号一些重点给大家讲解以我决定挑出。更详细的MOvBH,0;页号.直接设置戚O即可内容请参看(《Nasm中文手册))。MOVDH,10;第lO行NASMMASMOffSetMOVDL,20;弟20列中没有中诸如、INTlOH;调用中断服务Address⋯⋯的命令,任何标签都代表着标签处的偏移地址。如果要读取某某地址中的内容.②返回光标位置(INT1Oh.03h。篓蠹i∞。ii。=ji“j;—豳荫揣誉裟} ~~一~”⋯—i)蓉栏矗目编:辑)so0cket>■■■团■■■■■■|■●陆■■●—■汪■●■●■U勘■■调用之后寄存器将保存如下内容CH=开始的扫描行CL=结束的扫描行DH=行DL=列使用该中断可以结合lNT1Oh.02h将光标转移到下一行,即起到回车的效果。③向屏幕显示字符(1NT1OH。0AH)MOVAH.OAH;子功能号MOVAL,char;Ansi半符MOVBl{,O;页号,设置为0即可MOVCX,5;字荷重复次数,这里是5次INT10H;调用中断服务④读取键盘字符(INT16H,1OH)⑤向上滚动屏幕/清屏(INT1OH.06)这里只介绍了几个比较常用的中断处理程序,更多的中断说明请参考~IntelDefinedCPUExceptionTabIe》。回国囡匝有了上面的基础一个ISA模块可谓是.编写简单之极.唾手可得了。这里,我们利用ISA模一个密码验证程序块编写.在开机的时候,必须输入正确的密码才能继续启动.就像COMS开一样BlOs芯片上机密码.但这个密码是固化在的.无法修改。如果忘记密码.更是麻烦.只有抱着主机去电脑城换芯片了。下面是程序的源代码:“c^。WWWhacker.com.cnjr≥E—20蚴09,1,1黑里客霉防阱夏缱1-圜曙-;- 翟譬组_誓盈_I毒■盂I_田≯荟言磊_”;、。“““。。。‘::::示.已经成功进入我们编写的lSA模块了。输入“”密码r0sS.电脑便正常启动了。将代码保存为TestPwd.asm,并使用nasm在”nasmoTeStPwdbin命令行下进行编译.T”estPwdasm..编译成功就会在该目录下生成一TestPwdbinecksum个.文件.然后再用ISACh写入校验和.就是我们编写的最终成品。如果要BIOS”放在机器的中进行调试.可以使用cbrombi”os.bin/ISATestPwd.bin将模块添加进BIOS固件再使用AwdFIash在纯DOS下刷新BIOS。l圣l4这里.我们使用Bochs进行调试。Bochs允许直接加载lSA模块.首先运行BOChS,并单击或许现在你已经很有成就感了.但更精彩“S”ave按钮将当前配置先保存下来,然后用的还在后面,我们甚至可以用JSA模块编写出更记事本打开bXrC一BIOSRootkitHookIVTTable.文件,在末尾添加句强大的、等。”OrOmimae1:fiIe=TestPWdbin:Ptg.,(编辑提醒本文涉及的代码,已收录入”addresS=0xd0000ISA本期光盘杂志相关栏目;也可以到黑防官方网,意思是将模块添加到BlOS内存的0Xd0000处一站下载)仂。运行下,如图4所前置知识DeIphi关键讯编程、DelPhi、用户管理OelDhi~写系厕庐簪理文/图键盘上的眼泪W;ndows系统下有一net用户可以使用NetUserAdd函数一下其个命令,相信很多.我们来看朋友都用过.这个命令其实就是调用了C:在DeIPhi下的原型。\windows\system32\net.exe这个文件。net.exe是一个系统自带的工具.功能很强大,可以实现用户管理、文件共享、网络管理等等。本文Delphi一Server参数是需要添加用户的主机名我们就用自己动手编写个系统用户管理.如果netexe一LeveIBuf工具.也算是实现了.的部分功能。是本机则设置成空参数决定了参数的1234buf创建用户结构,设置成、、、分别表示参数所指usERINFO1USERINFO2向的内容为—一、—一、USERINFO3USERINFO44首先我们来实现创建用户的功能,要添加—一、—一,这个结构都包含’一“i唰荫揣篙簋羔

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
大家都在看
近期热门
关闭