Windows 是否可以替换操作系统的加载程序?有没有办法控制装载机?

Windows 是否可以替换操作系统的加载程序?有没有办法控制装载机?,windows,linux,operating-system,linker,loader,Windows,Linux,Operating System,Linker,Loader,我只是想知道是否有可能替换操作系统的加载器(可执行程序加载器而不是引导加载器)(Windows是我的选择)。是否有任何第三方加载程序可用于修补默认加载程序 有没有什么方法可以让我获得对OS加载程序的控制权?我的意思是,我希望它正在做的事情对我来说是可见的(每一步) 如果您问我为什么要这样做,出于学习目的。否,进程创建和ntdll中的用户模式加载程序是绑定在一起的(PsCreateProcess将直接映射到ntdll并跳转到它,以便它可以完成模块解析和进程设置),您不能替换它 如果你想玩这类游戏,

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

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


如果您问我为什么要这样做,
出于学习目的。

否,进程创建和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文章

  • 马特·皮特瑞克(MSDN) 杂志,2002年2月)
  • 马特·皮特瑞克(MSDN) 杂志,2002年3月)
  • 您可以使用此信息编写启动给定可执行文件的应用程序

    如果你对linux和elf格式更感兴趣,你可以在谷歌找到你所需要的一切

    有没有什么办法可以帮我 获得对操作系统加载程序的控制权? 我是说,我想让它做的事情 对我可见(每一步)

    在Windows上,通过启用加载程序捕捉,您可以在工作时看到加载程序。您可以使用
    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
    中的代码所引用的那样。这不会很好,但至少可以通过