2

你怎么能强行改变汇编语言CSIP

ORG指令可以用来改变数字的IP,但是你怎么改变CS呢?

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

许多论坛,包括堆栈溢出中的一个问题都说这是不可能的,但是即使 C 是由汇编代码制成的,它又如何具有多线程选项呢?

4

4 回答 4

7

要进行更改,只需根据您的需要使用(例如)或长时间(例如)cs:ip进行跳远。linklink有几种不同的寻址模式。实现多线程与简单地改变是完全不同的事情。jmpjmp segment:offsetcallcall segment:offsetjmp call cs:ip

于 2012-09-17T19:11:03.163 回答
3

我想你可以只用

jmp segment:offset

call segment:offset
于 2012-09-17T19:11:09.400 回答
1

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

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

于 2012-12-27T21:57:09.523 回答
1

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

ljmp $segment, $offset

或 Intel 语法中的以下内容:

jmp segment:offset
于 2021-03-15T03:49:18.863 回答