-----------------------------------------------------牢骚,不用看-----------------------------------
最近又回到了操作系统的研究,搞来搞去,发现自己基本啥都会,精的不多。这是好,还是不好,我现在也不知道,反正不能克制自己,看到有意思的东西就想弄弄。 主要的目标还是定于底层,照目前的发展来看,以后应用层肯定是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,跳回去,执行原来的代码。
本文介绍了一种在保护模式下调试操作系统的技巧。通过设置一个特殊的段并填充shellcode实现跳转回到原始代码执行点的方法,避免了死循环或修改EIP等传统调试手段带来的不便。
1万+

被折叠的 条评论
为什么被折叠?



