我想阅读并理解Linux内核的内存管理(特别是defrag\compaction\migration).
所以,我关闭了大小的优化.config(当然使用make menuconfig)并编译...这让我仍然是一个优化的内核.
注意:当我说优化内核时,我的意思是当我使用gdb并告诉它next它会跳转时.我不希望这样,我希望能够像一个简单的hello世界一样逐行地遵循代码.
接下来,我编辑Makefile并交换-O2,-O0这会导致事情中断.
我发现了这个,但我不知道我想要什么文件,因为我不知道兔子洞到底有多远.
我可以使用更通用的选项吗?我理解内存压缩的概念; 但是,我希望看到一切发生的地方以及它是如何发生的.
我正在努力教自己装配.我找到了一个很好的网站 ; 但是,一切都是为x86编写的,我使用的是64位机器.
我知道问题是什么,但我不知道如何解决它.如果我用strace运行程序,那么结果如下:
execve("./file", ["./file", "hello"], [/* 94 vars */]) = 0
creat(NULL, 0) = -1 EINVAL (Invalid argument)
write(0, NULL, 0 <unfinished ...>
+++ exited with 234 +++
Run Code Online (Sandbox Code Playgroud)
所以,我知道当我调用时creat,文件名"hello"没有被传递,因此我没有文件描述符.
这是有问题的代码:
section .text
global _start
_start:
pop rbx ; argc
pop rbx ; prog name
pop rbx ; the file name
mov eax,85 ; syscall number for creat()
mov ecx,00644Q ; rw,r,r
int 80h ; call the kernel
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用syscall命令; 但是,我想使用中断.
任何想法或建议都会有所帮助.另外,我正在使用nasm一个汇编程序.