2016-03-21 29 views
-1

我做了一個簡單的引導程序與nasm(工程)..我的第二個程序 也與nasm編譯應該從引導程序啓動...但我不知道該怎麼做.. 。有任何想法嗎.. ?跳轉到內核在DVD上

在這裏我的網站here ..你有可能看到兩個textarea的,上面的textarea是bootloader ..,第二個應該是從bootloader啓動的第二個程序(但是我不能讓它工作)。 然後你應該按'make iso'按鈕。 然後在php中使用命令: $ op = system(「genisoimage -b prog」。$ getal。「。img -no-emul-boot -boot-load-size 4 -o prog」。$ getal。「 .iso/var/www/html/boot/>>「。getal。」2.txt 2> & 1「,$ back);

這使得一個ISO文件,燒傷在啓動扇區(512)DVD中的第一個程序/引導程序..這工作..但現在如何運行第二個程序.. 任何想法的?

THX,

弗雷德裏克鍋

+0

您可以創建第一階段和第二階段,將它們組合在一起以創建磁盤映像。我有一個答案,顯示如何可以在[Stackoverflow答案](http://stackoverflow.com/a/34095896/3857942)中完成。此代碼顯示如何加載第二個扇區並跳轉到該扇區。一旦你有磁盤映像,你應該可以使用genisoimg(或mkisofs) –

+0

我也有一些[一般bootloader技巧](http://stackoverflow.com/questions/32701854/boot-loader-doesnt-jump-to -kernel-code/32705076#32705076)在這個Stackoverflow的答案 –

+0

Thx,爲你的時間/快速反應......但不得不說:不適應這樣的方式......對我來說太難了。 – Frederik

回答

0

首先,我很驚訝你的引導程序在所有工作,因爲它使用的堆棧(push 0a000h)的設置不以SP也不SS寄存器。所以你依靠BIOS來建立一個堆棧,設置某處這不會影響你想要做的事情。該堆棧甚至可能位於非常低的地址並覆蓋IVT或您自己的代碼 - 您根本無法知道。

對於你的原始問題:嘗試調查int 0x13。您的ISO製作腳本可以將您的兩個二進制文件粘合在一起(只要確保它們適當填充),然後從引導代碼中,您可以使用指定的中斷將新的二進制文件加載到特定位置的內存中,然後您可以遠遠地在jmp那裏。