我只是想知道是否有可能取代操作系统(Windows是我的select)的Loader(可执行程序加载程序,而不是引导加载程序)。 是否有任何第三方装载机可用于修补默认的装载机?
有什么办法通过我可以获得对OS Loader的控制? 我的意思是,我希望事情能够让我看到(每一步)。
如果你问我为什么要这样做, For learning purposes.
不,在ntdll中进程创建和用户模式加载器是绑在一起的(PsCreateProcess将直接映射到ntdll中,并跳转到它,以便它可以完成解析模块和设置过程),你不能取代它。
如果你想玩这样的事情,那么Linux就是要走的路。
加载器是内核的一部分,但是由于您可以访问所有的内核源代码,因此您可以随心所欲地使用它。
Linux有可插入的可执行文件格式,所以可以添加一个额外的程序加载器,它将自己的可执行文件,而不是标准的(ELF,shell脚本,binfmt_misc)自定义的东西。
binfmt_misc模块允许您完全在用户空间中为可执行程序编写自定义加载程序; 这通常用于执行非本地二进制文件或解释的二进制文件,如Java,CLR可执行文件等
另一方面,如果你想用别的东西替换 ELF加载器,你可以直接在内核中创建一个binfmt模块。 以fs / binfmt_ *为例。 ELF装载机本身就在那里。
由于每个答案和评论都提供了有用的信息。 我只是把所有的答案和意见汇编成一个单独的帖子。
我只是想知道是否有可能取代操作系统(Windows是我的选择)的Loader(可执行程序加载程序,而不是引导加载程序)。
不,在Windows进程创建和ntdll中的用户模式加载器绑定在一起(PsCreateProcess将直接映射到ntdll并跳转到它,以便它可以完成解析模块和设置过程),你不能取代它。
但是有资源可用来描述进程的格式和加载。
这是一个相当古老但仍然是最新的MSDN文章关于PE文件(EXE + DLL)
- 第一部分深入研究Win32便携式可执行文件格式作者:Matt Pietrek(MSDN Magazine,2002年2月)
- 第二部分 深入了解Win32便携式可执行文件格式作者Matt Pietrek(MSDN Magazine,2002年3月)
您可以使用这些信息来编写一个启动给定可执行文件的应用程序。
如果你对linux和elf格式更感兴趣,你会在google找到所有你需要的。
有什么办法通过我可以获得对OS Loader的控制? 我的意思是,我希望事情能够让我看到(每一步)。
在Windows上 ,通过启用Loader捕捉,您可以了解装载机在工作中的情况。 您可以使用gflags.exe
(Windows调试工具的一部分)执行此操作。 有一个很好的gflags.exe
参考http://www.osronline.com/DDKx/ddtools/gflags_4n77.htm 。 启用Show Loader Snap后,可以通过在调试器(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装载机本身就在那里。
不,您不能替换操作系统加载器,但有资源可用于描述格式和加载进程。
这是一个相当旧,但仍然UPtodate有关PE文件(EXE + DLL)MSDN文章http://msdn.microsoft.com/en-us/magazine/cc301805.aspx
您可以使用这些信息来编写一个启动给定可执行文件的应用程序。
如果你对linux和elf格式更感兴趣,你会在google找到所有你需要的。
有什么办法通过我可以获得对OS Loader的控制? 我的意思是,我希望事情能够让我看到(每一步)。
在Windows上,通过启用Loader捕捉,您可以了解装载机在工作中的情况。 您可以使用gflags.exe(Windows调试工具的一部分)执行此操作。 这里有一个很好的gflags.exe参考。 启用Show Loader Snap后,可以通过在调试器(WinDBG)下启动应用程序来查看加载程序跟踪消息。