我无法完全理解地址跳转表是如何工作的。
基本上,在编译文件时,编译器知道在内存中设置 dll 的函数的位置,但是一旦执行应用程序,一些函数地址可能会由于地址之间的冲突而改变它们在内存中的位置。
例如:编译器在地址 40000 中加载函数,并且不知何故在同一地址中加载了GetModuleHandle
另一个函数。GetModuleFileName
根据应用程序中函数的访问方式,windows加载器将在地址跳转表中添加第二个函数,当第一个函数被调用时,加载器将循环遍历地址跳转表并将函数的地址更改为主地址。用于调用,第一个函数将进入地址跳转表
这是地址跳转表的工作方式吗?