VS2015及VS2017汇编语言调用C语言的stdio库中的函数

众所周知,VS可以用来写汇编语言,同样的在汇编语言中,我们可以调用C语言中的函数,前提我们需要知道调用的函数在哪里。

例如下面这一段代码:

;//VS15/17 Template for Win32 Console Application
.686
.MODEL flat, stdcall
option casemap : none


includelib ucrt.lib
includelib msvcrt.lib
;  Function prototypes 
 puts    PROTO  C : dword
 printf    PROTO  C : dword,:vararg 
 
.data
     Hello byte "hello",10, 0
.code  
 main proc
    invoke puts,offset Hello
invoke printf, offset Hello
ret

 main endp  

 end main

假如在VS2010和VS2013中,是可以运行的,但是VS2015之后就不可以运行。

原因是:从VC++ 2015开始,标准库的部分函数被改成了inline函数,所以libcmt.lib、msvcrt.lib中就没有这些函数的符号了。

所以之后的版本就需要其他的方式,如下:

;//VS15/17 Template for Win32 Console Application
.686
.MODEL flat, stdcall
option casemap : none




includelib ucrt.lib
includelib legacy_stdio_definitions.lib


;  Function prototypes 
 
 printf    PROTO  C : dword,:vararg 
 _getch PROTO  C : vararg
 
.data
     Hello byte "hello",10, 0
.code  
 main proc
    
invoke printf, offset Hello
invoke _getch

ret

 main endp  

 end main

我们通过这样的方式,来调用VS中printf的函数。

新手一个,不足之处请各位大佬批评指正。有想法的请留言,谢谢。

转载请标明出处:https://blog.csdn.net/cj_xiaoni/article/details/79858832

你可能感兴趣的:(C语言,汇编语言,vs)