gpt4 book ai didi

pointers - EIP寄存器如何获取其值?

转载 作者:行者123 更新时间:2023-12-02 21:37:14 25 4
gpt4 key购买 nike

我刚刚开始在学校学习汇编,我们开始深入研究寄存器以及如何使用它们。我似乎无法理解的一点是指令指针如何获取下一条指令的地址?例如,采用以下代码:

nop
pushl %ebp
movl %esp, %ebp
subl $4, %esp

在前面的代码中,指令指针在每一行之后都会递增,我想知道它如何知道下一步要执行哪条指令(即 mov,sub,...等)?当我们第一次运行程序时,前面的所有指令都首先加载到 RAM 中,并且第一条指令的地址(在本例中为 nop)会自动加载到 eip 中,然后它只是一一浏览吗?或者我错过了什么?

感谢任何帮助。

最佳答案

每次检索和解码指令以供执行时,

EIP 都会由 CPU 本身中的微代码(固件)进行更新。我不相信您甚至可以按照通常的方式访问它。不过,可以使用 jmp 指令对其进行修改,该指令在功能上(不包括管道问题等)与 mov %eip,address 相同。它还针对条件跳转、callret 指令进行了更新。

一旦你的程序被加载到内存中(在此过程中,你可以将你的程序视为像任何其他文件一样的简单数据),操作系统(或其他一些加载程序)就会执行jmp到开始你的程序。当然,您作为示例代码显示的代码是程序的真正开始,而只是 main调用的函数。

关于pointers - EIP寄存器如何获取其值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25923875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com