• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

关于引导区的执行程序问题,类似LILO这个东东!怎样做呢?

whwlxl 2002-05-06 01:59:21
由于需要,我得做一个这样的东东,就是在每次启动时执行一个程序,但又不能用批处理!功能如下:
开机引导时需要检测开机时间,并当满足一定时间就执行win95下的一个特定程序。问的是怎么写这个程序到引导扇区,就象LILO一样?此程序由于要在操作系统之前执行,问有什么特殊要求吗?是.com的还是.exe的?我以前从未做过类似的东东,如大侠们有什么相关资料请介绍一下,最好在网上能找到!
...全文
59 点赞 收藏 24
写回复
24 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
whwlxl 2002-07-06
相关问题见:
http://www.csdn.net/expert/topic/832/832531.xml?temp=.1071131
http://www.csdn.net/expert/topic/777/777469.xml?temp=.1845819
http://www.csdn.net/expert/topic/789/789262.xml?temp=.2607996
http://www.csdn.net/expert/topic/839/839214.xml?temp=.9482996
http://www.csdn.net/expert/topic/701/701058.xml?temp=.9740564

有源码请发whwlxl2000@sina.com
回复
zdhe 2002-06-09
it's not easy,
read linux boot code is best way.
回复
whwlxl 2002-06-09
wanlucky(博博) :
sorry!我上面关于日期的调用找到了!谢谢你!可是还有问题呀,我写的东西不能引导呀!各位大虾,有机会帮忙看看啦!就在http://www.csdn.net/expert/topic/789/789262.xml
还是关于引导程序的!谢谢了!
回复
wanlucky 2002-05-30
whwlxl(笨笨):
 你找一下BIOS调用的手册不就完了,我记得有关于系统日期的调用,你找一下不就完了吗?这个问题也要提出来.
回复
whwlxl 2002-05-29
对不起,还是一个关于BIOS调用的问题了!就是关于系统日期的!我知道系统日时钟的BIOS调用。但是现在需要知道系统日期,而且只能是BIOS调用,请问哪位大虾知道要???
回复
CCsdnCC 2002-05-11
我在1996年曾做过这样的事情,实际上很简单。(与上述诸位所述相近,用汇编写一段很小的程序就可以了。最让我高高兴的事是在操作系统之前运行程序,你可以随便滥用内存.)
回复
headman 2002-05-11
to:alexatnt
我也想学学,能把代码给我看看吗?
earthwormgu@sz.webex.com
回复
alexatnt 2002-05-11
我试了一下,成功了。
我用debug写了一个清除bois密码的程序,只有12个字节,没用用到dos中断,然后用ppkk所说的方法写入软盘引导区,中途提示发生两个错误,我全部选择了忽略(我是在xp下试验的)。然后重新启动,现预先设置了一个密码,读软盘后光标就停止不动了——没有提示Non-system diskette,重新启动之后,密码果然被清除了!
回复
whwlxl 2002-05-07
问如何不通过操作系统而直接对其特定文件进行操作,比如写数据到此文件。由于在BIOS级别只能对扇区进行操作(我记得应该是这样的),而不能通过文件名处理,怎么办呢?
回复
whwlxl 2002-05-07
感谢大家的支持,我会多找些此类书籍看看,免得总是劳烦大家了!谢谢
回复
wanlucky 2002-05-07
:)我想你一定会提上面这个问题:你可以通过文件查找文件分配表来确定你要的文件所在的扇区.当然你必须知道文件分配表的格式,请查有关资料吧,你或者可以通过使用debug来读取dos系统提供的对于文件操作的中断服务程序的代码来研究看一看,dos是怎么做的!:)
祝好运!
回复
ppkk 2002-05-07
如果要通过FAT来访问文件的话,是很麻烦的,因为这是文件系统的一部分,
首先要访问目录表,然后在FAT表中获取文件簇号链,再由簇号化为扇区号,
最后通过int13访问,一般人可没那么大的耐心。
如果你对所有这些都感兴趣,推荐一套国内顶级图书<ms-dos 5.0>
内核剖析(上 中 下) 李凤华 等编。你可在里面找到全部答案。
回复
z_sky 2002-05-06
看了你留的短信,再补充一些:
1、引导区空间有限,有些位置是固定的数据区,不能乱写;
2、很多软件可以备份你的引导区到文件和恢复,你用你的代码替换掉这些文件里的执行代码恢复回去就可以改写了;
3、首先你的源程序不是编译成.exe 或 .com, 只需要是目标代码即可,甚至用debug直接写(如果代码不多)
4、如果设计到要超出一个扇区的容量,你的代码要自己去取出存在其他扇区的代码(因为没有文件系统)
5、可以把保存下来的主引导记录debug看看,学习一下作参考;
回复
wanlucky 2002-05-06
在随便说一句,你的主引导区被改,对于杀毒软件而言,呵呵:)
回复
wanlucky 2002-05-06
这还不简单,到dos下面去,用汇编写你要程序:程序实际分两部分:一部分:功能代码,就是你的程序实现的功能(正如你的贴子中的那些功能):第二部分:释放部分:也就是如何把程序写道主引导扇区,其实很简单:用汇编中的标号就可以确定你的功能代码长度(也就是结尾标号地址减去开始标号对应地址),把开始标号的地址作为首址,功能代码长度作为写入字节数量,记住不要超过512字节,如果超过了,把功能代码分成两部分,前一部分为512字节,剩下的作为第二部分,再写入主引导扇区之前,首先把主引导扇区考到主引导扇区之后的没用过的扇区中,然后把功能代码注入主引导区(如果功能代码大于512字节,先把前一部分512字节写入,剩下的统统写道主引导扇区之后的没有使用的扇区中,这样当机器从硬盘启动读主引导扇区时,就把你的代码读到内存的一个固定地址(不好意思,具体值多少我忘了,你可以查一下有关资料,说实在的关于汇编语言我很久之前用过,其语法我都快忘干净了,就是怎样编程没忘:)),你的程序不就执行了,下面分两种情况说明:
1.对于功能代码小于512字节的情况!在你的512字节快执行完,也就是512字节末尾处,你的代码要做的工作是把已经转移到其他扇区(前面已述)的主引导记录给读到内存的某个地址(内存高端,好像是A000:0000之后把,不确定,看一下资料吧)去执行,上面所说的那个说固定地址也行,只要是没有覆盖BIOS模块的地址就行.因为现在你的代码是老大,要知道操作系统这个时候还没引导呢!),然后用跳转语句跳到那个地址去执行,这样,主引导区的代码就得以执行了,后面就是主引导区的代码的工作了,你不用管!
2.对于功能代码大于512字节的情况!在你的512字节快执行完,也就是512字节末尾处,你的代码要做的工作把剩余的字节(前面已经说了,放在没有用到的扇区中)读到内存某个地址中(操作过程跟第一种情况一样就不多说了),然后跳到那个地址去执行,当执行快结束时,把主引导记录从扇区中读到内存的某个地址执行(操作过程又和第一种情况一样就不多说了).
实际上说白了,就是对于第二种情况.两部分代码功能代码,一部分512字节,这段代码末尾处的执行的功能是把剩下的功能代码读到内存中执行,而剩下的这段功能代码的末尾处执行的功能就是把主引导区的代码读到内存中执行.而第一种情况由于功能代码小于512字节,所以直接就在代码末尾出完成读主引导区代码到内存去的任务!

关于为什么要以512字节划分,我想这就不用解释了吧!
祝你成功!!
       
   




然后
回复
ppkk 2002-05-06
由于写入引导区是很危险的,除非你的硬盘没有重要的东西,
而且现有引导区,含用现有操作系统引导代码,你将你的代码写入后
将不能启动系统,也找不到硬盘了,请切记!!!
所以,你最好用pqmagic分出一个试
验区,再将此分区变为主分区,将原主分区隐藏,在新的分区
上作试验,不至于将你的所有资料全部毁掉。
另外,你可先用软盘作试验,即写入软盘引导区.
你用汇编写完成后,编译连接成com文件,然后用debug调入此文件
如:

debug myprg.com
-a1000
mov ax,301
mov bx,100
mov cx,1
mov dx,0 ;写入软盘引导区
int 13h
-g=1000
即将myprg.com写入软盘引导区
再一次请你注意,使用int 13h是很危险的,如果你不熟,要很小心,
否则你的资料将全毁掉!!!
回复
Kiloy 2002-05-06
可以参照MSDOS下用汇编写.COM程序的方法,限制是不能调用任何操作系统代码,应为这时操作系统还没有启动,而且程序长度只能小于512字节。
回复
whwlxl 2002-05-06
现在引导区程序功能是读系统时钟,我用汇编写完源程序后把他联接成执行文件?还是就编译成OBJ文件,然后调用int 13h把此程序写入引导区?
回复
ppkk 2002-05-06
你的代码要放在引导区,则你只能用汇编来编写,且最高级的调用为bios,
因为如果你用c/c++写,其则肯定要调用os的api,即使你的代码写在引导区,
不能执行又有何用。而且引导区只有512字节。
你用汇编写完后,可用int 13h调用写入引导区。

回复
whwlxl 2002-05-06
感谢!问题是我现在不知道怎么把源文件变成最后的能在引导扇区直接执行的代码?不会是那种常规的编译联接的方法吧!能否给具体步骤!
回复
加载更多回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2002-05-06 01:59
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……