我只是想知道是否可以替换操作系统的加载程序(可执行程序加载程序而不是引导加载程序)(Windows 是我的选择)。是否有任何可用的第三方加载程序可以修补默认加载程序。
有什么方法可以让我获得对 OS Loader 的控制权?我的意思是,我希望它正在做的事情对我来说是可见的(每一步)。
如果你问我为什么要这样做,For learning purposes.
我只是想知道是否可以替换操作系统的加载程序(可执行程序加载程序而不是引导加载程序)(Windows 是我的选择)。是否有任何可用的第三方加载程序可以修补默认加载程序。
有什么方法可以让我获得对 OS Loader 的控制权?我的意思是,我希望它正在做的事情对我来说是可见的(每一步)。
如果你问我为什么要这样做,For learning purposes.
不,进程创建和ntdll中的用户模式加载器是捆绑在一起的(PsCreateProcess会直接映射到ntdll中并跳转到它,这样它就可以完成解析模块和设置进程),你不能替换它。
如果你想玩这种东西,那么 Linux 就是你要走的路。
加载程序是内核的一部分,但由于您可以访问所有内核源代码,因此您可以尽情使用它。
Linux 具有可插入的可执行文件格式,因此可以添加一个额外的程序加载器,它将使用可执行文件而不是标准的(ELF、shell 脚本、binfmt_misc)来执行自己的自定义操作。
binfmt_misc 模块允许您完全在用户空间中为可执行程序编写自定义加载器;这通常用于执行非本地二进制文件或解释二进制文件,例如 Java、CLR 可执行文件等。
另一方面,如果你想用其他东西替换ELF 加载器,你可以直接在内核中创建一个 binfmt 模块。查看 fs/binfmt_* 示例。ELF 加载程序本身就在那里。
由于每个答案和评论都提供了有用的信息。我刚刚将所有答案和评论编译到一个帖子中。
我只是想知道是否可以替换操作系统的加载程序(可执行程序加载程序而不是引导加载程序)(Windows 是我的选择)。
不,在windows中进程创建和ntdll中的用户模式加载器是捆绑在一起的(PsCreateProcess会直接映射到ntdll中并跳转到它,这样它就可以完成解析模块和设置进程),你不能替换它。
但是有一些可用的资源描述了进程的格式和加载。
这是一篇关于 PE 文件(exe + dll)的相当古老但仍然是最新的 MSDN 文章
- 第 I 部分:深入研究 Win32 可移植可执行文件格式,作者:Matt Pietrek(MSDN 杂志,2002 年 2 月)
- 第二部分。Matt Pietrek对 Win32 可移植可执行文件格式的深入研究(MSDN 杂志,2002 年 3 月)
您可以使用此信息编写启动给定可执行文件的应用程序。
如果你对 linux 和 elf 格式更感兴趣,你会在 google 中找到你需要的一切。
有什么方法可以让我获得对 OS Loader 的控制权?我的意思是,我希望它正在做的事情对我来说是可见的(每一步)。
在Windows上,您可以通过启用 Loader Snaps 来了解工作中的加载程序。您可以使用gflags.exe
(Windows 调试工具的一部分)执行此操作。有一个很好的gflags.exe
参考http://www.osronline.com/DDKx/ddtools/gflags_4n77.htm。启用 Show Loader Snaps 后,您可以通过在调试器 (WinDBG) 下启动应用程序来查看加载程序跟踪消息。
如果你想玩这种东西,那么 Linux 是最好的选择。
加载程序是内核的一部分——但是当您可以访问所有内核源时,您可以尽情使用它。
各种二进制格式的加载器fs/binfmt_*.c
位于 Linux 源代码中(fs/binfmt_elf.c
是用于 ELF 格式的可执行文件的加载器 - 即绝大多数)。
动态加载器/lib{,64}/ld-linux.so.2
也用于动态链接的二进制文件——它是 binfmt_elf.c 中的代码引用的“解释器”的一个示例。
Linux 具有可插入的可执行文件格式,因此可以添加一个额外的程序加载器,它将使用可执行文件而不是标准的(ELF、shell 脚本、binfmt_misc)来执行自己的自定义操作。
该binfmt_misc
模块允许您完全在用户空间中为可执行程序编写自定义加载器;这通常用于执行非本地二进制文件或解释二进制文件,例如 Java、CLR 可执行文件等。
另一方面,如果你想用其他东西替换 ELF 加载器,你可以直接在内核中创建一个 binfmt 模块。看看fs/binfmt_*
例子。ELF 加载程序本身就在那里。
不,您不能替换 OS 加载程序,但有可用的资源描述进程的格式和加载。
这是一篇关于 PE 文件(exe + dll)的相当古老但仍然是最新的 MSDN 文章http://msdn.microsoft.com/en-us/magazine/cc301805.aspx
您可以使用此信息编写启动给定可执行文件的应用程序。
如果你对 linux 和 elf 格式更感兴趣,你会在 google 中找到你需要的一切。
有什么方法可以让我获得对 OS Loader 的控制权?我的意思是,我希望它正在做的事情对我来说是可见的(每一步)。
在 Windows 上,您可以通过启用 Loader Snaps 来了解工作中的加载程序。您可以使用 gflags.exe(Windows 调试工具的一部分)执行此操作。这里有一个很好的 gflags.exe 参考。启用 Show Loader Snaps 后,您可以通过在调试器 (WinDBG) 下启动应用程序来查看加载程序跟踪消息。