用汇编语言改变CS:IP

时间:2012-09-17 17:07:00

标签: assembly x86

如何用汇编语言强制更改CSIP

ORG指令可用于更改IP的数量,但您如何更改CS

基本上我想用汇编来实现多线程。

许多论坛,包括堆栈溢出问题都说它不可能,但那么C有多线程选项,即使是汇编代码也是如此?

4 个答案:

答案 0 :(得分:6)

要更改cs:ip,只需使用jmp(例如jmp segment:offset)或长call(例如call segment:offset)进行长跳转,具体取决于您的需要。 jmp linkcall link可以使用多种不同的寻址模式。实现多线程与简单地改变cs:ip完全不同。

答案 1 :(得分:2)

我认为你可以只使用

jmp segment:offset

call segment:offset

答案 2 :(得分:1)

只有远程控制传输指令(jmp,call,ret)才能更改CS或EIP寄存器。我认为CS寄存器只能在实模式下更改。

RET基本上取ESP(堆栈指针)的值并将其推送到IP / EIP。然后ESP增加8加上立即偏移(如果存在)。

答案 3 :(得分:1)

要更改 csip 寄存器,请在 AT&T 语法中使用以下内容:

ljmp $segment, $offset

或英特尔语法中的以下内容:

jmp segment:offset