x86汇编语言 - 终止程序

时间:2011-11-10 19:48:28

标签: x86 assembly

我确信这对大多数人来说非常微不足道,但我对x86汇编语言并不是很熟悉。我只是想自学。

我在窗户。在我阅读的任何地方,我被告知使用INT 21返回操作系统。哪个退出程序,但我收到错误Unhandled exception at 0x003d1313 in Assignment1.exe: 0xC0000005: Access violation reading location 0xffffffff

谢谢!

3 个答案:

答案 0 :(得分:5)

在Windows上,如果您使用的是正式汇编程序(例如MASM),则只需调用以下内容:

.386 
.model flat, stdcall 
option casemap:none 
include \masm32\include\windows.inc 
include \masm32\include\kernel32.inc 
includelib \masm32\lib\kernel32.lib 
.data 
.code 
start: 
        invoke ExitProcess,0 
end start

如果您没有使用任何汇编程序并且只想执行一大块二进制代码,请执行以下操作:

push xxx
push -1
push 0
mov eax, yyy
mov edx, 7FFE0300
call dword ptr ds:[edx]

其中xxx是进程的退出代码,yyy是NtTerminateProcess的系统调用号(使用http://www.pediy.com/document/Windows_System_Call_Table/Windows_System_Call_Table.htm确定适当操作系统的调用号。对于Windows 7,它是0x172)

答案 1 :(得分:3)

答案完全取决于您使用的操作系统:)

这是在Linux上使用“int 0x80”的示例:

movl $1, %eax
movl $0, %ebx
int $0x80

此维基百科链接为您提供更多选择:

http://en.wikipedia.org/wiki/Exit_%28operating_system%29

答案 2 :(得分:3)

如果您的筹码是平衡的,退出程序的最简单方法是

retn