首页
社区
课程
招聘
[求助]请帮帮我啊!汇编问题!不晓得如何生成目标文件??
发表于: 2005-10-14 21:46 7658

[求助]请帮帮我啊!汇编问题!不晓得如何生成目标文件??

2005-10-14 21:46
7658
我下载了罗云彬的汇编原代码,用他写的原代码,我却没有办法把它进行编译,不知道如何生成目标文件,但是我用我的教科书<<IBM-PC汇编语言程序设计>>上的列子就可以生成目标文件,也可以生成可执行文件,

还有这个东西也不太明白:
使用 nmake 或下列命令进行编译和链接:
; ml /c /coff Hello.asm
; Link /subsystem:windows Hello.obj

程序原代码:;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Sample code for < Win32ASM Programming >
; by 罗云彬, http://asm.yeah.net
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Hello.asm
; 使用 Win32ASM 写的 Hello, world 程序
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 使用 nmake 或下列命令进行编译和链接:
; ml /c /coff Hello.asm
; Link /subsystem:windows Hello.obj
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .386
                .model flat,stdcall
                option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include                windows.inc
include                user32.inc
includelib        user32.lib
include                kernel32.inc
includelib        kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .data

szCaption        db        'A MessageBox !',0
szText                db        'Hello, World !',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .code
start:
                invoke        MessageBox,NULL,offset szText,offset szCaption,MB_OK
                invoke        ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                end        start
有谁能把他们编译,执行成功后教我一下吗?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 227
活跃值: (91)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
可以成功通过编译啊?
你试下把库都加上绝对路径看下。
2005-10-15 09:20
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我是初初级的菜鸟,上面的哥哥的东西我看不懂,不晓得什么是绝对路径啊!??如果你愿意的话,可以告诉我你用了哪几个文件让它编译成功吗?以及怎么操作的吗?谢谢了,要不加一下我的QQ512674863告诉我一下,万分感激!!!万分感激!!!万分感激!!!万分感激!!!万分感激!!!万分感激!!!我都卡在这里好多天了!!!!
2005-10-15 12:23
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
4
看看这篇文章吧。

IDE的选择与配置
作者:AoGo 于2003-9-12上传

--------------------------------------------------------------------------------

   IDE,全称集成开发环境,对于MASM的IDE,我想每个人最低的要求都至少要求在写程序时不需要在命令行中手工输入命令来编译再链接,这样很不方便,如果代码有错,就需要用编辑器(一般是计事本)修改然后再重复的编译、链接,把大量的时间花在这种操作上,不爽!

  为此,RedASM出现了,它具备了写MASM程序的所有基本功能,只要设置好,在RedASM中写程序简直和用VC差不多,API函数原型的提示、常数自动的弹出、结构的成员变量显示(暂不支持声明为结构类型的变量)、过程变量名自己列出、支持快速跳转、关键字的自动补齐、集成对话框编辑器/菜单编辑器、工具栏编辑器、调试器等等等等,让我等汇编狂人惊喜不已,但是(住住听到这两字时总是让人心里发紧^_^),RedASM对中文的支持相当不好,并且一直没有解决,情况就是打开、编辑有中文的源文件时会停止响应或死机,除非整个程序都不用中文那就没问题,最新版本的RedASM能通过设置中文字体来支持双字节的编辑,但这种方法只适用于2000以上的操作系统,对于我们这些用着破机器装个98都觉得慢、对英文头痛的人来说,RedASM成了我等人心头之鸡肋---功能强大却用着烦心,可是它的确非常实用,心里这个可惜啊,犹如滔滔江水....(打住)!
  所以,如果你操作系统在98以上(不包括ME),推荐你选择RedASM,最新版本的RedASM速度更快,实用的功能让MASM程序的编写真的非常方便,你可以到作者主页上去下载(http://radasm.sonshinesoftware.com/
),记住RedASM更新相当快,要时常去看看是否更新了,这也是对作者的一种支持。
  不过因为我RedASM只用过几次,它的功能与特点我不清楚,详细自己去玩吧,而MASM的设置也相当方便,只要设置好MASM32的路径就行。
  RedASM的几个缺点:
     1.是没有模板,虽然可以自己写一个,但是内建模析是一个IDE所具备基本条件,不知道RedASM的作者为什么不写几个。
     2.高亮显示的API函数与常数库不全,遇到没有加入的函数,我们还是得去看参考手册。(建立写MASM总开着参考手册,方便查询)。
     3.资源编辑功能不是很实用,RedASM把对话框编辑、菜单编辑等等分开了,碰到需要加入其它资源,还是得自己去修改,这点不方便。

另外向大家重点推荐另一个也是我一直使用的IDE,不,不能说是IDE,只能说是编辑器,那就是EditPlus,程序的下载地址:,点击下载EditPlue点击查看程序界面截图,只要自己设置好,EditPlus就可以相当方便的用来进行MASM的编程,如何配置大家就不要操心了,我已经为大家写好了相关的配置文件,并做了一个安装程序,请大家下载本站的MASM for EditPlus,安装好后就行了,目前MASM for EditPlus已经升级到Serial 0004,因为MASM for EditPlus是我自己配置的,我就它详细向大家说说MASM for EditPlus的优点。
  1.MASM for EditPlus的关键字非常全,因为我是按照最新版本的MASMv8.0来制作语法文件表的,所有MASMv8.0支持的函数都能高亮显示,如果某个在API手册中存在的API在EditPlus中输入后没有高亮显示就证明此函数MASM不支持,同理,常数与结构也是一样,另外所有的关键字都支持自动完成,这样可以尽量的避免大小写这种讨厌的错误.
  2.MASM for EditPlus的模板相当多,这样省得大家在学习时得去自己写重复的代码.
  3.批处理相当完善,还支持VC的编译,批处理有相当的智能,当编译的文件是EXE/DLL等程序时,如果源文件目录下不存在资源文件,批处理会通过复制的方法把相应的res改名复制到目标目录,编译后就能行到一个包含资源文件的程序,这样方便点4号工具栏启动VC资源编辑器来进行编辑.
  3.当编译的模式是DLL/VxD时,如果源文件目录下不存在DEF文件,则批处理也会自动用重定向文件来创建它,这样你就不用手工去自己建立了,当然要输出函数的话还是得自己添加。
  4.当建立LIB时,INC文件会自动的创建,虽然有时会把一些API函数也加进去,但是这样不影响它的使用,因为MASM编译时是找到原型就跳过的,所以建立自己建立的LIB在使用时尽量包含在最后。
  5.因为MASM for EditPlus集成了MASM5.0、MASMv8.0、VC资源编辑器,98DDK的头文件,所以,你只需要安装好MASM for EditPlus后就不需要进行其它设置了,并且只要你安装了SoftICE,还可以使用MASM for EditPlus进行源码调试。
  6.如果你喜欢手工进行编译,可以这样,在启动时打通MASM for EditPlus的BIN目录,如在Autoexec.bat中添加一句set PATH=%PATH%;D:\MASM32\BIN,注意D:\MASM32\BIN要是你自己的安装目录下的BIN,以后在命令行方式下只要输入mlink 文件路径就可以进行一步到位的编译,例如编译C:\1.asm,则输mlink c:\1.asm,则能自动的编译出1.EXE文件来。唯一的要求就在源代码最前面几行中加入一行注释,里面用双引号包含说明编译的模式,如;MODE="DOS",则编译程序会自动编译为DOS汇编程序,相关的关键关有DOS/CON/DLG/EXE/DLL/MDI/VXD/LIB.

  小技巧:
  ===============
  1.RedASM有一个很方便的功能,叫ASCII码表,这在想知道某些字符的值的相当有用,其实EditPlus中这个功能更加方便,你只要把光标移动到相应字符前面,在EditPlus的状态栏中会自动显示其ASCII值,虽然无法显示特殊的字符,但是已经相当方便好用。
  2.当一个文件中自定义的过程、函数过多时,可以点搜索-]函数列表来查看已有的过程,双击后能马上跳到目录行.对于大文件相当文件。
  3.当要查找字符时,如想查找一些变量是否重声明,可以双击选择这个单词,再点查找时选择的文本会自动出现在查找编辑框中。
  4.当要查找某个API函数相应的LIB时或查看某个常数的值时,你可以这样做:点搜索-]在文件中查找,输入API的名字,然后文件类型使用*.inc,文件夹选择MASM for EditPlus的INCLUDE文件,然后点查找,不到1秒钟,就能查找到它所对应的INC文件。也很方便,并且设置好后,以后查找时只需双击想查询的API再点在文件中查找,所有的设置都不需要输入,直接点查找就行,用得好的话,这比在API手册中查找还要方便。
  5.如果编译时使用EditPlus的输出窗口,当发生错误后,你只需双击列表中错误提示的那一行,则能自动跳运源文件中相关行,这一点和VC的编辑器一样。这个功能也相当方便。具体在参数设置中,在用户工具需要使用输出窗口的工具下复选"捕捉输出"就行了。
  6.如果你用MASM已经在写程序了,并且想写一个软件,建议使用工程功能,这样可以把一系列的文件设置在一个工程中,在下面的打开的文件名列表左边有一个文件夹的图标,点一下能在弹出的菜单中相当文件设置工程文件。
  7.把API的帮助文件添加到5号工具栏,以后只需选择要查询的关键字,点5号工具栏就可以显示它的信息,非常方便。如果您还未安装API参考手册,请到我的站点下载。

  EditPlus做为一个文本编辑器是非常实用的,对于编程来说,有一些非常有用的功能不容易被您发现,我均放到了工具栏上,相应的快捷键我帮您定义好了,这些快捷键是我习惯的,如下:
    ==============================================================
    把选择的文本复制追加到剪切板     Ctrl+Shift+C
    选择文本全部转换成大写        Ctrl+U
    选择文本全部转换成小写        Ctrl+L
    选择当前的字词             Ctrl+W
    选择当前行                Ctrl+R 或 单击行号
    开始进行列块选择            Alt+Mouse
    注释选择的文本            Ctrl+;
    复制当前行                Ctrl+J
    增加当前行的缩进            Ctrl+I
    缩进或缩进选择行            Tab
    显示当前源代码中的所有函数列表    F4
    在当前光标所在行设置一个标记    F5
    清除当前文档中的所有标记        F6
    快速跳转到当前行上一个标记        F7
    快速跳转到当前行下一个标记        F8
    跳到指定行                Ctrl+G
    显示或隐藏列标记            Ctrl+`
    开始记录或停止键盘宏记录        Ctrl+Q
    键盘宏回放                Alt+ 0,1,2,3...
    运行用户工具            Ctrl+ 0,1,2,3...

    其中最实用的是文档标记,当一个文件很长时,如果您突然想声明一个全局变量,当然您可能会用宏在代码中定义,但更有可能的是您会拖动光标到最前面的.data或.data?段添加好变量,再拖动光标到刚才的地方,如果代码很多,非常麻烦,这个时候,请一定要使用标记功能,碰到这种情况,您只需先在当前行按下F5做一个标记,然后再到前面声明好变量,再按一个F8,就能马上返回刚才的位置,非常方便。
    接着是函数列表,当一个文件很大,里面有N个过程/函数时,F4就太方便了,您可能在某个过程中修改时突然想到另外某个过程也要修改,此时您只需按下F4,所有的过程就全部出来了,选择马上跳转到这个过程,结合标记功能,在文件中来回跳转根本不会再麻烦。
    另外一个非常实用的功能是增加缩进,当源代码的某一块要全部往前减少一个制表符时,你只需选择这些行,再按Ctrl+I就OK了(全部往后添加一个制表符就是Tab键,当然要选择),对代码美化非常实用。
    还有宏(不是MASM的宏),比如说对话框过程,每个对话框返回过程最初都是一样的,您可以把过程记录为一个宏,以后需要添加对话框模板的地方按Alt+n就行了。一样方便。
    另外有一个功能就是颜色选择工具,猜想您以前定义色彩搞不好是使用宏RGB或自己进行移位,现在不必这么麻烦了,颜色选择功能已放到了工具栏上,不过记得选择了相应色彩后一定要把前面两位与后面两位调换,如选择后为:#45FF10h,这时应该改为10FF45h,如果前面是A-F,还应添加0.如#89FFEEh,应改为0EEFF89h.

  另外还有一些编辑器非常好,如UE,如果你想使用UE做编辑器,可以直接挂上MASM for EditPlus的批处理,参数的提供设置一下后就能进行MASM for EditPlus一样的编译操作。

  另外,大家不要老是在意IDE的选择,其实做为一个编辑器来说,关键是要自己用着顺手,很多朋友都不喜欢RedASM的封装性,老觉得它就像VC一样搞得很复杂,还有些朋友不喜欢用EditPlus,这些都有个人的原因,所以,大家在选择IDE时,选择好后觉得好用最好就一直用下去,像RedASM,将来它一定会解决双字节的问题的,如果现在你去使用它,将来就会更加顺手.当然,MASM for EditPlus也会不断的进行更新,不过因为编辑器不是我编写的,我的做法可能有点白痴。最好的方法就是自己写一个编辑器,这个以后再说。
2005-10-15 17:24
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
正在看,不过还是要先谢谢上面的哥哥.谢
2005-10-18 17:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
最好亲自输入一遍,复制的有时格式不符。
2005-11-7 22:00
0
雪    币: 2506
活跃值: (1030)
能力值: (RANK:990 )
在线值:
发帖
回帖
粉丝
7
.386
    .model flat,stdcall
    option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include    windows.inc
include    user32.inc
includelib  user32.lib
include    kernel32.inc
includelib  kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    .data

szCaption  db  'A MessageBox !',0
szText    db  'Hello, World !',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    .code
start:
    invoke  MessageBox,NULL,offset szText,offset szCaption,MB_OK
    invoke  ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    end  start

到汉化新世纪去下载个我做的的RadASM 2.2.0.5b汉化增强版,安装后根据向导在RadASM里建一个Masm的Win32 App工程,把你上面的这段代码复制进去,点菜单上的编译、连接,就可以运行了。
2005-11-8 12:22
0
游客
登录 | 注册 方可回帖
返回
//