当前位置: 首页 > 知识库问答 >
问题:

长模式下近呼叫的地址大小覆盖

陆雅志
2023-03-14

英特尔手册(第2卷第2.2.1.6段)说:

使用地址大小前缀不会禁用RIP相对寻址。地址大小前缀的作用是截断并零扩展计算出的有效地址到32位。

调用rel32描述如下:

调用near,velegrate,displement相对于下64位模式下32位位移符号扩展到64位

共有1个答案

訾高明
2023-03-14

这不是67前缀可能针对的RIP相对寻址类型,67前缀对调用/jmp/jcc偏移量没有影响(相反,影响的是66前缀,例如,调用rel16调用rel32)。

par 2.2.1.6讨论的RIP相对寻址类型是由类似00***101的ModRM字节编码的,例如,类似

mov rax, [eip]
; or,
addr32 mov rax, [eip]
; or if your assembler doesn't let you write either of those,
db 67
mov rax, [rip]

这是他们所指的情况之一,其中RIP相对寻址仍然有效,但被截断。如果寻址完全恢复到32bit模式,那么像00***101这样的ModRM将编码[sword]而完全不涉及EIP。

 类似资料:
  • 我阅读了关于64位模式下地址计算的英特尔手册。假设我们有64位模式,默认地址大小是64位。另外,假设所讨论的指令前面有地址大小覆盖前缀,因此地址大小变成32位。 现在,假设指令用寄存器号0(RAX/EAX/AX...)指定的地址编码内存操作数。 现在我不完全理解的是,CPU是只查看eax值并在内部扩展它以形成“本地”64位地址,还是查看整个rax值并将其截断到有效的32位范围(例如,rax包含类似

  • 问题内容: 如果Java客户端在其他服务器上调用远程EJB,您如何获得客户端IP地址?请注意,从服务器获取它很重要,因为客户端可能位于NAT防火墙之后,在这种情况下,我们需要公共IP地址。 注意:尽管它最好是一种通用的解决方案,但是至少我可以使用一个从JBoss 4.2.2上的EJB2调用中检索IP地址的解决方案。 问题答案: JBoss社区Wiki上的这篇文章完全解决了您的问题。在JBoss 5

  • 问题内容: 我正在编写Java Rest Web服务,需要调用者的IP地址。我以为我曾经在Cookie中看到过一次,但现在看不到了。是否有一致的地方获取此信息? 我看到了一个使用“ OperationalContext”来获取它的示例,但这不是在Java中。 问题答案: 我认为您可以通过请求对象获得IP。 如果我没记错的话。

  • 问题内容: 我正在编写Java Rest Web服务,需要调用者的IP地址。我以为我曾经在Cookie中看到过一次,但现在看不到了。是否有一致的地方获取此信息? 我看到了一个使用“ OperationalContext”来获取它的示例,但这不是在Java中。 问题答案: 我认为您可以通过请求对象获取IP。 如果我没记错的话。

  • 尝试设置react路由时出现一些奇怪的错误 这是我的主index.js文件 我得到的错误是 不知道为什么

  • 问题内容: 我正在尝试模拟一些基于反射的方法。您可以在下面看到详细信息, 被测课程 测试 } 要么 但是,测试失败,并显示NullPointerException。我知道我在嘲笑概念上做错了什么,但是我不明白这是什么。您能否对此加以说明,并建议我如何测试此方法? 谢谢。 问题答案: 您需要一个Method对象和一个Class对象。根据您的评论,Mockito无法模拟方法,因此您需要一个真正的方法。