我确信这对大多数人来说非常微不足道,但我对x86汇编语言并不是很熟悉。我只是想自学。
我在窗户。在我阅读的任何地方,我被告知使用INT 21
返回操作系统。哪个退出程序,但我收到错误Unhandled exception at 0x003d1313 in Assignment1.exe: 0xC0000005: Access violation reading location 0xffffffff
。
谢谢!
答案 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
此维基百科链接为您提供更多选择:
答案 2 :(得分:3)
如果您的筹码是平衡的,退出程序的最简单方法是
retn