本文为看雪论坛精华文章
看雪论坛作者ID:零加一
1
环境搭建
2
文件系统提取
寻找启动设备并将设备的第0个扇区载入到0x7c00处,即载入MBR
从0x7c00处开始执行,并将第1个扇区载入到0x2000,并跳转到0x2000处继续执行,这里为加载Stage1.5。
将第1个扇区之后的几个扇区装载到0x2200,并跳转到0x2200处继续执行,并加载Stage2加载到0x8000处后跳转到0x8200处开始执行。
读取配置文件,根据配置文件进行执行操作,其中包括了内核镜像(这里是bzImage)的加载,当内核镜像加载完毕后会有3个地址需要关注。
1.linux_data_tmp_addr指向bzImage数据。
2.LINUX_BZIMAGE_ADDR指向压缩后的kernel数据。
3.linux_data_real_addr指向部分bzImage数据
从linux_data_tmp_addr开始将部分数据拷贝到linux_data_real_addr并切换到实模式跳转到linux_data_real_addr+200处执行。
./qemu-system-i386 -s -S -m 512 -drive file=Wowfk.img,format=raw,index=0
注:圈起来的函数是grub_read,参考源码:/stage2/stage1_5.c:cmain
call near ptr unk_2360在源码中对应的是/stage2/asm.S:chain_stage2
用于转移ip
0x8200的代码位于:/stage2/asm.S:_start
注:该处执行的代码均在/arch/x86/boot/compressed/head_32.S中
使用vmlinux-to-elf将内核程序提取出来
3
总结
看雪ID:零加一
https://bbs.pediy.com/user-home-749276.htm
# 往期推荐
球分享
球点赞
球在看
点击“阅读原文”,了解更多!