gpt4 book ai didi

winapi - ntdll.dll 内部 ZwCreateUserProcess 的远跳转

转载 作者:行者123 更新时间:2023-12-02 05:47:23 27 4
gpt4 key购买 nike

我试图了解 Windows API 如何创建进程,以便我可以创建一个程序来确定无效的 exe 失败的位置。我有一个调用 kernel32.CreateProcessA 的程序。在 OllyDbg 中,这会调用 kernel32.CreateProcessInternalA,后者又调用 kernel32.CreateProcessInternalW,后者又调用 ntdll.ZwCreateUserProcess。这个函数是:

mov eax, 0xAA
xor ecx, ecx
lea edx, dword ptr [esp+4]
call dword ptr fs:[0xC0]
add esp, 4
retn 0x2C

因此,我遵循对 fs:[0xC0] 的调用,其中包含一条指令:

jmp far 0x33:0x74BE271E

但是当我执行此指令时,Olly 在调用后立即返回到 add esp, 4 处的 ntdll.ZwCreateUserProcess(不在 0x74BE271E)。我在 retn 0x2C 处设置了断点,发现在执行 add esp, 4 期间以某种方式创建了新进程。

所以我假设远跳涉及一些魔法。我尝试将 CS 寄存器更改为 0x33,将 EIP 更改为 0x74BE271E,而不是实际执行远跳转,但这只是在几条指令后给我带来了访问冲突。这里发生了什么?我需要能够超越此 ZwCreateUserProcess 的抽象进行更深入的研究,以弄清楚 Windows 到底是如何创建进程的。

最佳答案

jmp far 0x33:0x74BE271E` 

该跳转正在进入内核。 0x33是一个特殊的段选择器,指向某种x86门;这会触发上下文切换到内核。

关于winapi - ntdll.dll 内部 ZwCreateUserProcess 的远跳转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13672396/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com