x86汇编语言 - 终止程序

Joh*_*rad 2 x86 assembly

我相信这对大多数人来说都是微不足道的,但我对x86汇编语言并不是很熟悉.我只是想自学.

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

谢谢!

Jos*_*phH 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
Run Code Online (Sandbox Code Playgroud)

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

push xxx
push -1
push 0
mov eax, yyy
mov edx, 7FFE0300
call dword ptr ds:[edx]
Run Code Online (Sandbox Code Playgroud)

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

  • 注意后一种方法是一种hack-ish方法.无法保证它适用于未来版本的Windows NT.如果您知道它的位置,最好只使用Kernel32.dll的ExitProcess API. (2认同)