LoginSignup
2
1

More than 1 year has passed since last update.

Cやアセンブラで終了ステータスを返す

Last updated at Posted at 2022-12-05

はじめに

必要最低限の環境変数やコードを調べ、今後の土台とする。

環境

Windows 11 Pro (64bit)
Visual Studio Community 2022

MASM32 SDK

ソースなど

dev16.bat
@echo off
path %path%;D:\masm32\bin
path %path%;D:\etc\msdos\binary\i86_x64
cmd
ret.asm
comment *
ml /c ret.asm
link16 /t ret;
*
.model tiny
.code
	org	0100h
start:
	mov	ax, 4c2ah
	int	21h
end start

実行例

D:\Projects\etc\MASM32>ml /c ret.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.

 Assembling: ret.asm

D:\Projects\etc\MASM32>link16 /t ret;

Microsoft (R) Segmented Executable Linker  Version 5.60.339 Dec  5 1994
Copyright (C) Microsoft Corp 1984-1993.  All rights reserved.

LINK : warning L4045: name of output file is 'ret.com'

D:\Projects\etc\MASM32>msdos ret

D:\Projects\etc\MASM32>echo %errorlevel%
42

D:\Projects\etc\MASM32>certutil ret.com
    b8 2a 4c cd 21                                     .*L.!
CertUtil: -dump コマンドは正常に完了しました。

D:\Projects\etc\MASM32>

VC++

ソースなど

devc.bat
@echo off
path %path%;D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\bin\Hostx64\x86
set lib=%lib%;D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\lib\x86
set lib=%lib%;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\ucrt\x86
set lib=%lib%;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\um\x86
cmd
retc.c
/*
cl /MD retc.c
*/
int main(int argc, char *argv[])
{
	return argc;
}

実行例

D:\Projects\msvc>cl /MD retc.c
Microsoft(R) C/C++ Optimizing Compiler Version 19.34.31935 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

retc.c
Microsoft (R) Incremental Linker Version 14.34.31935.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:retc.exe
retc.obj

D:\Projects\msvc>retc a b c

D:\Projects\msvc>echo %errorlevel%
4

D:\Projects\msvc>

MASM (x86)

ソースなど

devasm.bat
@echo off
path %path%;D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\bin\Hostx64\x86
set lib=%lib%;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\um\x86
cmd
reta.asm
comment *
ml /c reta.asm
link /subsystem:console reta
*
includelib kernel32
.model flat
ExitProcess proto stdcall :dword

.code
start proc c
	invoke	ExitProcess, 42
start endp
end start

実行例

D:\Projects\msvc>ml /c reta.asm
Microsoft (R) Macro Assembler Version 14.34.31935.0
Copyright (C) Microsoft Corporation.  All rights reserved.

 Assembling: reta.asm

D:\Projects\msvc>link /subsystem:console reta
Microsoft (R) Incremental Linker Version 14.34.31935.0
Copyright (C) Microsoft Corporation.  All rights reserved.


D:\Projects\msvc>reta

D:\Projects\msvc>echo %errorlevel%
42

D:\Projects\msvc>
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1