nasm的win32编程小心得

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文件里都有什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值