当系统打开一个可执行文件的时候,它会调用Kernel32.dll中的CreateProcess函数;CreateProcess函数在完成装载应用程序后,会先将一个返回地址压入到堆栈顶端,然后转向执行刚才装载的应用程序。当该应用程序结束后,会将堆栈顶端数据弹出放到IP中,继续执行,其实栈顶数据就是在Kernal32.dll中的返回地址
1.这句话中的栈顶返回地址,为什么说是Kernal32.dll中的返回地址,我还是不明白
2.一个.exe文件在windows系统双击运行后,是怎么被载入系统的,如果是CreateProcess完成装载的,而CreateProcess又是Kernal32.dll的函数,那么如果是call CreateProcess,它会将call CreateProcess指令的下一条地址压栈,而被压栈的地址我感觉应该是系统程序的地址,怎么会是Kernal32.dll中的返回地址,难道CreateProcess函数执行完装载任务,而被装载的程序也执行完毕之后还要跳到Kernal32.dll去执行其它操作么?如果是,那又执行什么操作呢?
3.还有Kernal32.dll的实际装入地址是否和PE头结构中的IMAGE_NT_HEADERS.OptionalHeader.ImageBase相等?
请教高手帮我一下
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)