6

我只是想知道是否可以替换操作系统的加载程序(可执行程序加载程序而不是引导加载程序)(Windows 是我的选择)。是否有任何可用的第三方加载程序可以修补默认加载程序。

有什么方法可以让我获得对 OS Loader 的控制权?我的意思是,我希望它正在做的事情对我来说是可见的(每一步)。

如果你问我为什么要这样做,For learning purposes.

4

6 回答 6

5

不,进程创建和ntdll中的用户模式加载器是捆绑在一起的(PsCreateProcess会直接映射到ntdll中并跳转到它,这样它就可以完成解析模块和设置进程),你不能替换它。

于 2010-01-29T07:23:45.123 回答
3

如果你想玩这种东西,那么 Linux 就是你要走的路。

加载程序是内核的一部分,但由于您可以访问所有内核源代码,因此您可以尽情使用它。

于 2010-01-29T07:50:03.237 回答
2

Linux 具有可插入的可执行文件格式,因此可以添加一个额外的程序加载器,它将使用可执行文件而不是标准的(ELF、shell 脚本、binfmt_misc)来执行自己的自定义操作。

binfmt_misc 模块允许您完全在用户空间中为可执行程序编写自定义加载器;这通常用于执行非本地二进制文件或解释二进制文件,例如 Java、CLR 可执行文件等。

另一方面,如果你想用其他东西替换ELF 加载器,你可以直接在内核中创建一个 binfmt 模块。查看 fs/binfmt_* 示例。ELF 加载程序本身就在那里。

于 2010-01-29T08:02:11.040 回答
2

由于每个答案和评论都提供了有用的信息。我刚刚将所有答案和评论编译到一个帖子中。

我只是想知道是否可以替换操作系统的加载程序(可执行程序加载程序而不是引导加载程序)(Windows 是我的选择)。

不,在windows中进程创建和ntdll中的用户模式加载器是捆绑在一起的(PsCreateProcess会直接映射到ntdll中并跳转到它,这样它就可以完成解析模块和设置进程),你不能替换它。

但是有一些可用的资源描述了进程的格式和加载。

这是一篇关于 PE 文件(exe + dll)的相当古老但仍然是最新的 MSDN 文章

  1. 第 I 部分:深入研究 Win32 可移植可执行文件格式,作者:Matt Pietrek(MSDN 杂志,2002 年 2 月)
  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 加载程序本身就在那里。

于 2010-01-29T12:35:17.813 回答
1

不,您不能替换 OS 加载程序,但有可用的资源描述进程的格式和加载。

这是一篇关于 PE 文件(exe + dll)的相当古老但仍然是最新的 MSDN 文章http://msdn.microsoft.com/en-us/magazine/cc301805.aspx

您可以使用此信息编写启动给定可执行文件的应用程序。

如果你对 linux 和 elf 格式更感兴趣,你会在 google 中找到你需要的一切。

于 2010-01-29T07:52:04.137 回答
1

有什么方法可以让我获得对 OS Loader 的控制权?我的意思是,我希望它正在做的事情对我来说是可见的(每一步)。

在 Windows 上,您可以通过启用 Loader Snaps 来了解工作中的加载程序。您可以使用 gflags.exe(Windows 调试工具的一部分)执行此操作。这里有一个很好的 gflags.exe 参考。启用 Show Loader Snaps 后,您可以通过在调试器 (WinDBG) 下启动应用程序来查看加载程序跟踪消息。

于 2010-01-30T16:29:53.800 回答