所以我发现当程序执行时,EIP指针被设置为代码段中的第一条指令,处理器做了一个执行循环:
- 将 EIP 指向第一条指令
- 将指令的字节长度添加到 EIP
- 执行在步骤 1 中读取的指令
- 返回 1
我的问题是,第 2 步会发生什么?
请回复谢谢
EIP 获取下一条指令的地址。
如果您有这样的说明:
0x1000 INSTR_1
0x1004 INSTR_2
0x1007 INSTR_3 /* instructions can have different size */
并且EIP
包含0x1000,您需要更新它EIP
以使其指向第二条指令(0x1004),以便它可以在下一次迭代中执行它。如果您不这样做,您将始终执行第一条指令。
因为指令可以有不同的大小,你不能只添加常量(如果所有指令都具有相同的大小,你可以这样做,就像在 RISC 中一样),但你需要添加刚刚阅读的指令的长度。因此,在第一条指令之后,您将添加 4,使其指向第二条指令,在第二条指令之后,您将添加 3EIP
并指向第三条指令。
"2. 将指令的字节长度添加到 EIP"
递增 EIP 以指向下一条指令,它递增 no。当前指令占用的字节数
EIP 移动到下一条指令。
Points the EIP to the first instruction
EIP--> 1.instruction 1 with 2 bytes
2.instruction 1 with 5 bytes
3.instruction 1 with 3 bytes
Adds the byte length of the instruction to EIP(move 2 bytes ahead)
1.instruction 1 with 2 bytes
EIP--> 2.instruction 1 with 5 bytes
3.instruction 1 with 3 bytes
将指令的字节长度添加到 EIP(前移 5 个字节)
1.instruction 1 with 2 bytes
2.instruction 1 with 5 bytes
EIP--> 3.instruction 1 with 3 bytes