首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是相对跳跃?

问什么是相对跳跃?
EN

Stack Overflow用户
提问于 2013-07-22 21:04:54
回答 1查看 1.9K关注 0票数 2

为什么要用它来挂接和重定向函数?

如下所示:

代码语言:javascript
复制
procedure RedirectProcedure(OldAddress, NewAddress: Pointer);
var
  NewCode: TInstruction;
begin
  NewCode.Opcode := $E9; //relative jump
  NewCode.Offset := NativeInt(NewAddress)-NativeInt(OldAddress)-SizeOf(NewCode);
  PatchCode(OldAddress, NewCode, SizeOf(NewCode));
end;

顺便问一下,$E9常量是什么意思?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-22 21:13:32

跳转指令将指令指针移动到新位置。它是goto的机器语言等价物。绝对跳转将指令指针移动到绝对地址。相对跳转跳转到相对于当前指令指针指定的地址。

$E9操作码是具有32位偏移量的相对跳转。请注意,对于具有不同大小偏移量的跳转,有不同的跳转操作码。

该地址相对于跳转指令的末尾,因此是SizeOf(NewCode)调整。

这段代码对我来说确实很眼熟。我想是我写的!

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17788375

复制
相关文章

相似问题

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