-----------------------------------------------------牢骚,不用看-----------------------------------
最近又回到了操作系统的研究,搞来搞去,发现自己基本啥都会,精的不多。这是好,还是不好,我现在也不知道,反正不能克制自己,看到有意思的东西就想弄弄。 主要的目标还是定于底层,照目前的发展来看,以后应用层肯定是web的天下,web式的操作系统应该是主流。但支持这个系统的底层系统也会不少,按我个人情况,写写c和汇编应是强处。快奔三的人了,感觉还是一玩是处,虽然一直在努力,也是一直没啥突破。
----------------------------------------------------正文开始---------------------------------------
相信很多人都被这个东东给困扰了吧,有看到网上其他高手提出的方案,死循环改eip之类,试了下,感觉不爽,昨天晚上在床上想了一下,白天利用上班时间给实现了,(嘿嘿),首先给图,这是调试,已在调试状态进入了保护模式。
代码:
LABLE_BEGIN: mov dx, cs mov cx, 400h ;;400h,自己乱定的,可以改,这个就是调试时用的断点 mov ds, cx mov byte [ds:0], 00eah ;;ea是jmp的机器码,加下面两句就是 jmp offset:seg,也就是跳回 mov word [ds:1],LABLE_REAL_START mov word [ds:3], dx jmp 400h:0h ;;跳到断点 LABLE_REAL_START: 原来的代码
原理很简单,自己先设一个段,这个段可以用bochsdbg能断下来的,然后在段里面填shellcode,(也就是机器码) jmp offset:seg,跳回去,执行原来的代码。