0
  • 基于 Windows 的可执行文件如何工作?
  • 如何在可执行文件中找到起始地址?
  • 对于任何文件执行,地址存储在哪里,我们如何读取这些地址?
  • 任何 dll 或 exe 文件的 call 和 ret 是如何工作的?

给我提示使用 ida pro 反汇编程序。

4

2 回答 2

1

程序的虚拟起始地址记录在可执行文件的标头中。任何了解这些结构的标题查看器程序都可以轻松地显示它们,例如 HT (http://hte.sf.net/) — 仅举一个例子。IDAPro 可能有类似的东西。

于 2010-11-22T03:55:40.650 回答
0

任何 dll 或 exe 文件的 call 和 ret 是如何工作的

这实际上取决于它是有问题的 DLL 还是 EXE。

当 Windows 的模块加载器完成加载 DLL 时,它会使用参数调用 DLL 的起始地址(称为“DllMain”)DLL_PROCESS_ATTACH(参见DllMain 的文档)。如果 DllMain 返回 1,则加载程序继续。

但是,当您启动 EXE 时,系统会生成一个新进程并将ntdll.dll映射到该进程的地址空间,然后生成从 NTDLL 的起始地址运行的主线程。然后该线程执行更多初始化,加载 EXE 文件(加上其导入表中列出的任何 DLL)并调用由 EXE 的起始地址标识的函数。当该函数返回时,NTDLL 然后调用NtTerminateProcess它杀死所有正在运行的线程并关闭进程。

使用用户模式调试器可能很难观察到这个 EXE 启动过程;一些调试器在进程初始化的早期阶段难以突破。

于 2015-10-06T17:14:09.663 回答