1

私は C (およびもちろんいくつかのアセンブリ) で OS を開発していますが、外部 (RAM ディスクに配置された) プログラムをロード/実行できるようにしたいと考えています。「-f bin」を使用して、nasm で生のマシン コードとしてテスト プログラムを組み立てました。この件に関して私が見つけた他のすべては、WindowsまたはLinuxの実行中にコードをロードすることです。次のコードを使用して、プログラムをメモリにロードします。

#define BIN_ADDR 0xFF000
int run_bin(char *file) //Too many hacks at the moment
{
    u32int size = 0;
    char *bin = open_file(file, &size);
    printf("Loaded [%d] bytes of [%s] into [%X]\n", size, file, bin);
    char *reloc = (char *)BIN_ADDR; //no malloc because of the org statement in the prog
    memset(reloc, 0, size);
    memcpy(reloc, bin, size);
    jmp_to_bin();
}

それにジャンプするコード:

[global jmp_to_bin]
jmp_to_bin:
    jmp [bin_loc] ;also tried a plain jump

bin_loc dd 0xFF000

これにより、実行時にGPFが発生しました。必要に応じて、GPF の登録簿やスクリーンショットを提供できます。

私の OS のコードはhttps://github.com/farlepet/retro-osにあります

どんな助けでも大歓迎です。

4

1 に答える 1

1

ID マッピングとフラット メモリ空間を使用するため、アドレス 0xff000 は BIOS ROM 範囲になります。そこにコピーできないのも不思議ではありません。そのアドレスを変更した方がよい ;)

ボックスのスクリーンショット

于 2012-12-27T18:05:35.743 に答える