首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >地址跳转表

地址跳转表
EN

Stack Overflow用户
提问于 2013-09-21 18:22:12
回答 1查看 676关注 0票数 1

我不能完全理解地址跳转表是如何工作的。

例如:编译器将函数GetModuleHandle加载到地址40000,并且不知何故还有另一个函数GetModuleFileName被加载到相同的地址。

根据函数在应用程序中的访问方式,windows加载器将在地址跳转表中添加第二个函数,当第一个函数被调用时,加载器将遍历地址跳转表,并将函数的地址更改为主地址以供调用,第一个函数将进入地址跳转表。

这是地址跳转表的工作方式吗?

EN

回答 1

Stack Overflow用户

发布于 2013-09-21 18:45:27

分支表只是一个goto (跳转)指令的列表,可以指向任何地方。

在您的示例中,分支表是一个位于40000的代码块。计算一个偏移量,然后实际的跳转指令跳转到40000 +偏移量。

下面是一些伪代码:

代码语言:javascript
复制
# x can be one of 0 1 2
      y  = x*8;                   # create offset  4 is the size of instructions
      goto jumptable(y);          # branch into 'table' of branch instructions
/* start of branch table */       #
# your 40000:
jumptable:
      goto errorfunc1;          # x= 0  oops
      goto func2;               # x= 1
      goto func7;               # x= 2
#... rest of branch table
errorfunc1:
     call oops;
func2:     
     call function2;
func7:
     call function7;      
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18931488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档