Win32下的匯編調用C標準庫函數

在Win32環境下匯編,自然難免或必然要用到C標準函數,以下是匯編調用C標準函數的方法。

C標準函數包含在MSVCRT.LIB文件中,此文件在VC中可以找到。把它復制到匯編的庫目錄下,然后包含進去。

includelib masm32/lib/msvcrt.lib

然后還需宣告你將要時用到的函數的原型,用如下語句:

extern  C printf:dword
;或者
printf proto c:dword,:vararg

第一句宣告了printf函數有一個DWORD類型的參數;第二種方法是宣告printf函數有不確定個dword類型的參數,這是printf函

數的特點。

然后就可以壓棧再call它了,甚至invoke。

下面給個例子:

.386
.model flat, stdcall
option casemap :none
include C:/masm32/include/windows.inc
include C:/masm32/include/kernel32.inc
includelib C:/masm32/lib/kernel32.lib
include c:/masm32/include/user32.inc
includelib c:/masm32/lib/user32.lib

includelib c:/masm32/lib/msvcrt.lib
;宣告printf之原型
printf proto c:dword,:vararg
;extern C printf:DWORD
 
.data
szCaption db 'hello', 0 
szText db 'hello!', 0
 
.code

start:

 invoke MessageBox, NULL, offset szText, offset szCaption, MB_OK 

//使用之 
invoke printf, offset szText

 
 invoke ExitProcess, NULL
end start

 

編譯連接,運行,咦?怎么控制臺上沒有打印出Hello!字樣?那是當然,前后環境都沒設定單單調用個printf當然是什麼都不會有。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值