我试着写一个peloader.我首先将可执行映像及其所有依赖的dll(包括kernel32.dll和ntdll.dll)加载到内存中,处理所有导入地址表,重写所有需要重定位的数据.
然后我按顺序调用所有图像的EntryPoint.我从ntdll.dll的EntryPoint获得返回码0,但kernel32.dll返回0xC0000000.当我试图调用可执行映像的EntryPoint时,程序崩溃了.
我知道Windows系统在创建进程时已经将ntdll.dll和kernel32.dll加载到进程内存中.我的问题是如何将ntdll.dll和kernel32.dll的另一个副本加载到内存中,并将我的模块链接到副本.
我做了一个实验:1.复制ntdll.dll - > a.dll
是否可以使a.exe正确运行?
这是我关于堆栈溢出的第一个问题,对不起我糟糕的英语.谢谢.