【发布时间】:2013-07-05 01:40:50
【问题描述】:
您好,提前致谢!
我正在处理一个汇编项目,我需要将我的程序代码移动到堆栈中,并从那里继续程序的流程。
这意味着程序将从代码段开始,并在运行时移动到堆栈段。它会在那里执行给它的任务(现在,让它无限循环)。
我尝试了一些想法:
PUSH word [cs:jump]
MOV cx, sp
PUSH SS
PUSH SP
MOV BP, SP
ADD word [word BP], 2
JMP FAR [BP]
jump:
JMP cx
这可以编译,但不起作用。
汇编语言是英特尔针对 80x86 的 16 位汇编。 汇编器是 nasm。
感谢所有的帮助。
【问题讨论】:
-
需要将程序移到堆栈中吗?这是一个非常不寻常的需求。您的问题很可能可以通过其他方式解决。 [在现代处理器上,您也可能会遇到麻烦:堆栈区域通常被标记为“不可执行”,因此即使您将程序移到那里,您实际上也可能无法执行它。您似乎使用的是纯 x86,因此执行保护可能不适用]。
-
我见过一个示例程序可以在 80x86 的程序集上执行此操作,问题是它是为 tasm 而不是 nasm 编写的。我似乎无法正确“转换”它。
-
我找到了为tasm制作的程序:P286N IDEAL DOSSEG MODEL small STACK 100H CODESEG start: push [word cs:exit + 4] push [word cs:exit + 2] push [word cs:exit ] push ss push sp mov bp, sp add [word bp], 2 jmp[dword bp] exit: mov ah, 4CH mov al, 0 int 21H END start