小编Mic*_*bek的帖子

如何使用内核创建可启动CD映像?

我有一个内核,要启动我正在使用命令qemu-system-i386 -kernel kernel.bin.有没有办法创建可引导的磁盘映像来启动qemu-system-i386 -cdrom CD.iso

我使用这些命令在linux中编译的代码:

nasm -f elf32 kernel.asm -o kernelasm.o
gcc -m32 -c kernel.c -o kernelc.o
ld -m elf_i386 -T link.ld -o kernel.bin kernelasm.o kernelc.o
Run Code Online (Sandbox Code Playgroud)

然后启动 qemu-system-i386 -kernel kernel.bin

代码:kernel.asm:

[BITS 32]
SECTION .text
    align 4
    dd 0x1BADB002
    dd 0x00
    dd - (0x1BADB002 + 0x00)

global start
global keyboard_handler
global read_port
global write_port
global load_idt

extern kmain
extern keyboard_handler_main

read_port:
    mov edx, [esp + 4]
    in al, dx
    ret

write_port:
    mov   edx, [esp + …
Run Code Online (Sandbox Code Playgroud)

c assembly operating-system kernel nasm

7
推荐指数
1
解决办法
653
查看次数

C++ Windows返回vs ExitProcess

我试图在没有任何CRT库的Windows上创建简单的程序.

我有两个代码:

// compile without -lkernel32
int __stdcall _main() {
    return 5;
}
Run Code Online (Sandbox Code Playgroud)

// compile with -lkernel32
#include <windows.h>

void __stdcall _main() {
    ExitProcess(5);
}
Run Code Online (Sandbox Code Playgroud)

我用这个bash脚本用MinGW-w64 7.1.0编译它们:

@echo off
del main.exe 2>nul
C:\Users\Michal\Downloads\mingw64\bin\g++ main.cpp -o main.exe -O3 -s -nostdlib -lkernel32
main.exe
echo %errorlevel%
pause
Run Code Online (Sandbox Code Playgroud)

输出(退出代码)是相同的.(我使用的是Windows 7 Pro 64位)

什么代码更好?(也许更好的问题是:为什么"返回"变体有效?)

编辑:

程序的入口点(默认由链接器预先设置)是_main(通常CRT lib执行一些工作然后调用'main'函数并使用main函数返回的值调用ExitProcess(或类似的东西)).

在我的代码中,我没有使用CRT库,_main仍然是程序的入口点(并没有调用'main'函数).

c++ winapi

2
推荐指数
2
解决办法
2130
查看次数

标签 统计

assembly ×1

c ×1

c++ ×1

kernel ×1

nasm ×1

operating-system ×1

winapi ×1