所以我发现当程序执行时,EIP指针被设置为代码段中的第一条指令,处理器执行一个执行循环:
我的问题是,第2步会发生什么?
请回复 谢谢
答案 0 :(得分:1)
EIP获取下一条指令的地址。
答案 1 :(得分:1)
如果你有这样的说明:
0x1000 INSTR_1
0x1004 INSTR_2
0x1007 INSTR_3 /* instructions can have different size */
并且EIP
包含0x1000,您需要更新EIP
以使其指向第二条指令(0x1004),因此它可以在下一次迭代中执行它。如果不这样做,您将始终执行第一条指令。
因为指令可以有不同的大小,所以你不能只为它添加常量(如果所有指令都具有相同的大小,你可以这样做,比如在RISC中),但你需要添加指令的长度。刚看完因此,在第一个之后,您将添加4,使其指向第二个,在第二个指令之后,您将向EIP
添加3,它将指向第三个指令。
答案 2 :(得分:1)
“2。将指令的字节长度添加到EIP”
增加EIP指向下一条指令,它增加no。当前指令占用的字节数
答案 3 :(得分:1)
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