Windows上的程序集
我对在Windows上进行最小汇编编程感兴趣。没有GUI,只有一个普通的Windows上的程序集,windows,assembly,Windows,Assembly,我对在Windows上进行最小汇编编程感兴趣。没有GUI,只有一个普通的.exe程序,可以在控制台上打印几个字符。为了查看是否有可能在Windows上编译和运行汇编,我尝试了以下方法: 测试s: ret 命令行: gcc test.s 我得到了以下错误: 函数“main”中:对“WinMain”的未定义引用 所以问题是,我如何将一个简单的汇编不做任何事情的程序编译成Windows可执行文件?我是否需要在每个程序中定义WinMain?它是gcc的标志吗 我真的不在乎我使用哪种汇编程序,但是如果
.exe
程序,可以在控制台上打印几个字符。为了查看是否有可能在Windows上编译和运行汇编,我尝试了以下方法:
测试s:
ret
命令行:
gcc test.s
我得到了以下错误:
函数“main”中:对“WinMain”的未定义引用
所以问题是,我如何将一个简单的汇编不做任何事情的程序编译成Windows可执行文件?我是否需要在每个程序中定义WinMain
?它是gcc的标志吗
我真的不在乎我使用哪种汇编程序,但是如果有人知道这对于gcc
(gas
)、masm
和其他汇编程序来说是否相同或不同,那也很好。你说你想要纯汇编还是干净汇编,这是否符合这些原则
摘自语言
masm32
汇编程序,链接器ml,链接
来源
.586P
; Flat memory model
.MODEL FLAT, STDCALL
;---------------------------------------
; Data segment
_DATA SEGMENT
_DATA ENDS
; Code segment
_TEXT SEGMENT
START:
RET ; Exit
_TEXT ENDS
END START
装配与连接
ML /c /coff PROG1.ASM
LINK /SUBSYSTEM:WINDOWS PROG1.0BJ
这个程序的字面意思是“什么都不做”,但它是纯masm,什么都不做
如果您想在windows中编程,而不需要C语言的帮助,则必须使用WIN32 api编程,您可以在网上找到对该api的引用,该api名为win.hlp
WIN32.hlp
,它似乎就在这个页面上
也许是一个方便的链接->
编辑:使用
as
(气体)和ld
.globl _start
_start: // ld looks for _start by default
movl $22, %eax // AT&T syntax
ret
编撰
c:\Users\James\Desktop\asm\>as file.s
c:\Users\James\Desktop\asm\>ld a.out
c:\Users\James\Desktop\asm\>a.exe
c:\Users\James\Desktop\asm\>echo %errorlevel%
22
第节的分解。正文:
00401000 <_start>:
401000: b8 16 00 00 00 mov $0x16,%eax
401005: c3 ret
401006: 90 nop
401007: 90 nop
gcc[file].s
yeildsa.exe
我建议您使用masm32并使用它。您可能想先看看这个问题:另外,使用-s编译将为我提供需要链接到C标准库的程序集。我不知道你是怎么出错的,我只是在linux和windows下的两台不同的计算机上编译了这些代码???我在windows上试过了,结果出错了。键入“代码> GCC -版本< /代码>输出<代码> GCC(Rev2,由MIW构建项目)4.4.1版权(C)2013免费软件基金会,公司代码<,用另一种方式编辑使用<代码>作为< /代码> <代码> LD
.text
.intel_syntax noprefix
.globl _main
_main: // entry point!
mov eax, 1
ret