nasm的win32编程小心得

来源:互联网 发布:四川省旅游数据统计 编辑:程序博客网 时间:2024/05/29 08:38

From:http://blog.csdn.net/aNUi/article/details/636738

终于成功了。下面是我的探索过程,以及一些其他的遗留问题。
首先给出我的第一个小程序:

;assemble with
;NASM -fwin32 hello.asm
;link with
;lcclnk -s -subsystem windows hello.obj

%include "include/win32n.inc"

extern _MessageBoxA@16
;Import _MessageBoxA@16 user32.dll


global _WinMain@16


SEGMENT .text USE32 class=code
_WinMain@16:

push dword 0 ; OK button
push dword title1
push dword string1
push dword 0
call _MessageBoxA@16

ret

segment .data use32

string1: db 'hello world',13,'Success!!!',13,10,0
title1: db 'Hello',0 

;其实上面这个头文件没有用到
import这里,发现这句居然不能用,报错,也不知道为什么,只好使用了另外一种方式实现:~extern
_WinMain@16;这是lcclnk规定的入口点方式,必须定义这个global
_MessageBoxA@16;这里碰到过挫折,一直出错,以前是写成了 [_MessageBoxA@16]

其实造成失败的问题主要出在连接这一部分。
一开始的时候是找不到合适的lib文件,因为有几个例子是使用win32.lib的,但是我没有找到这个。
于是打算使用masm的link.exe,用user32.lib,* <-- **** 我将masm的user32.lib拿来用alink连接,失败了
后来在些资料中找到了lcc-win32,下载下来安装好了,将重新编译好的user32.lib拿来,使用lcclnk编译,本来应该是没问题的,但是由于那个call的地方我写成了call [_MessageBoxA@16] ****这个样到底指到了什么地方?**** 哎,还是原配的好,成功了。在想这个lcclnk到底实现了什么?nasm的obj文件里都有什么?

原创粉丝点击