【发布时间】:2021-06-06 10:51:40
【问题描述】:
我最近编写了一个小程序,它使用 winapi 简单地显示一个弹出对话框。我在 x64dbg 调试器中启动它,看看它是如何编译的,并学习了一些关于汇编的知识。
我注意到的第一件事是主线程没有在我的代码入口点开始执行:它开始在ntdll.dll 的某个地方执行。这段代码似乎在最终调用kernel32 之前进行了几次函数调用,后者调用了入口点。
在入口点,寄存器已经加载了一些值。我知道它们一定很重要,因为在调试器中将它们归零会导致我的程序崩溃。 rax 似乎加载了入口点,但我不确定其他人的值是做什么的。
那么在我的入口点之前所有代码到底做了什么,它加载到寄存器中的值是什么?
【问题讨论】:
-
入口处唯一定义的寄存器是堆栈指针。所有其他的都是实施细节,随时可能发生变化。
标签: windows assembly windows-10 x86-64 entry-point