Windows 是否可以替换操作系统的加载程序?有没有办法控制装载机?
我只是想知道是否有可能替换操作系统的加载器(可执行程序加载器而不是引导加载器)(Windows是我的选择)。是否有任何第三方加载程序可用于修补默认加载程序 有没有什么方法可以让我获得对OS加载程序的控制权?我的意思是,我希望它正在做的事情对我来说是可见的(每一步)Windows 是否可以替换操作系统的加载程序?有没有办法控制装载机?,windows,linux,operating-system,linker,loader,Windows,Linux,Operating System,Linker,Loader,我只是想知道是否有可能替换操作系统的加载器(可执行程序加载器而不是引导加载器)(Windows是我的选择)。是否有任何第三方加载程序可用于修补默认加载程序 有没有什么方法可以让我获得对OS加载程序的控制权?我的意思是,我希望它正在做的事情对我来说是可见的(每一步) 如果您问我为什么要这样做,出于学习目的。否,进程创建和ntdll中的用户模式加载程序是绑定在一起的(PsCreateProcess将直接映射到ntdll并跳转到它,以便它可以完成模块解析和进程设置),您不能替换它 如果你想玩这类游戏,
如果您问我为什么要这样做,
出于学习目的。
否,进程创建和ntdll中的用户模式加载程序是绑定在一起的(PsCreateProcess将直接映射到ntdll并跳转到它,以便它可以完成模块解析和进程设置),您不能替换它 如果你想玩这类游戏,那么Linux就是你的选择
加载器是内核的一部分,但是由于您可以访问所有内核源代码,因此您可以将其放在心上。不,您不能替换操作系统加载器,但是可以使用一些资源来描述进程的格式和加载 这是一篇关于PE文件(exe+dll)的非常古老但仍然是最新的MSDN文章 您可以使用此信息编写启动给定可执行文件的应用程序
如果你对linux和elf格式更感兴趣,你可以在谷歌找到你所需要的一切。linux有可插拔的可执行文件格式,因此可以添加一个额外的程序加载器,它可以使用可执行文件而不是标准文件(elf、shell脚本、binfmt_misc)完成自己的自定义工作 binfmt_misc模块允许您为完全在用户空间中的可执行程序编写自定义加载程序;这通常用于执行非本机二进制文件或解释二进制文件,如Java、CLR可执行文件等
另一方面,如果您想用其他东西替换ELF加载程序,您可以直接在内核中创建一个binfmt模块。以fs/binfmt_*为例。ELF加载程序本身就在那里。因为每个答案和注释都提供了有用的信息。我刚刚把所有答案和评论整理成一篇文章。 我只是想知道这是否可能 替换加载器(可执行程序 加载程序(不是引导加载程序)的 操作系统(Windows是我的 选择) 否,在windows process creation中,ntdll中的用户模式加载程序与ntdll中的用户模式加载程序绑定在一起(PsCreateProcess将直接映射到ntdll并跳转到ntdll,以便它可以完成模块解析和进程设置),您无法替换它 但是有一些资源可以用来描述进程的格式和加载 这是一篇关于PE文件(exe+dll)的非常古老但仍然是最新的MSDN文章
gflags.exe
(Windows调试工具的一部分)执行此操作。有一个很好的gflags.exe
参考。启用显示加载程序快照后,您可以通过在调试器(WinDBG)下启动应用程序来查看加载程序跟踪消息
如果你想玩这种东西,那么Linux是最好的选择 加载器是内核的一部分,但由于您可以访问所有内核源代码,因此可以随心所欲地使用它
各种二进制格式的加载程序位于Linux源代码中的
fs/binfmt_*.c
(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加载程序的控制权?我的意思是,我希望它正在做的事情对我来说是可见的(每一步)
在Windows上,通过启用加载程序捕捉,您可以在工作时看到加载程序。您可以使用gflags.exe(Windows调试工具的一部分)执行此操作。有一个很好的gflags.exe引用。启用Show Loader Snaps后,您可以通过在调试器(WinDBG)下启动应用程序来查看加载程序跟踪消息。引导加载程序或可执行加载程序?实际上,Linux中的加载程序是/lib{,64}/ld-Linux.so.2。Linux源代码中的各种二进制格式的加载程序是
fs/binfmt.*.c
(fs/binfmt_elf.c
是用于elf格式可执行文件的加载程序-即绝大多数)。Ignacio指出的动态加载程序ld linux.so.2
也用于动态链接的二进制文件-这是一个“解释器”的示例正如binfmt_elf.c
中的代码所引用的那样。这不会很好,但至少可以通过