Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows上的程序集_Windows_Assembly - Fatal编程技术网

Windows上的程序集

Windows上的程序集,windows,assembly,Windows,Assembly,我对在Windows上进行最小汇编编程感兴趣。没有GUI,只有一个普通的.exe程序,可以在控制台上打印几个字符。为了查看是否有可能在Windows上编译和运行汇编,我尝试了以下方法: 测试s: ret 命令行: gcc test.s 我得到了以下错误: 函数“main”中:对“WinMain”的未定义引用 所以问题是,我如何将一个简单的汇编不做任何事情的程序编译成Windows可执行文件?我是否需要在每个程序中定义WinMain?它是gcc的标志吗 我真的不在乎我使用哪种汇编程序,但是如果

我对在Windows上进行最小汇编编程感兴趣。没有GUI,只有一个普通的
.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
yeilds
a.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