首页
社区
课程
招聘
[旧帖] [求助]汇编语言调用C语言库函数怎么弄 0.00雪花
发表于: 2011-10-15 18:07 3844

[旧帖] [求助]汇编语言调用C语言库函数怎么弄 0.00雪花

2011-10-15 18:07
3844
.386
.model flat,stdcall
option casemap:none

include stdio.inc
includelib msvcrt.lib

.data
szSum db '此数列的值为:%d',0

.code
start:

       XOR AX, AX
       MOV CX, 1000D
again: ADD AX, CX ;计算过程:1000+999+…+2+1
       DEC CX
       LOOP again
invoke printf,szSum
end start

我想调用C语言中的printf

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 859
活跃值: (304)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
2
	.386
	.model flat,stdcall
	option casemap:none
	
	include windows.inc
	include kernel32.inc

	includelib kernel32.lib
	includelib msvcrt.lib
	
	printf proto C  :dword,:vararg

	.data 
	
szString db "Hello",0dh,0ah,0
szFormat db "%s%08x",0

	.code
start:
	invoke printf,addr szFormat,addr szString,100
	invoke ExitProcess,0
end start

注意工程 subsystem 为 console
2011-10-15 23:17
0
雪    币: 13
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
十分感谢您
2011-10-16 13:01
0
雪    币: 13
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Sample code for < Win32ASM Programming >
; by 罗云彬, http://asm.yeah.net
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Test.asm
; 编程环境测试代码
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 使用 nmake 或下列命令进行编译和链接:
; ml /c /coff Test.asm
; rc Test.rc
; Link /subsystem:windows Test.obj Test.res
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .386
                .model flat,stdcall
                option casemap:none

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include                windows.inc
include                user32.inc
includelib        user32.lib
include                kernel32.inc
includelib        kernel32.lib
include             masm32.inc
includelib     masm32.lib

includelib msvcrt.lib
printf proto C  :dword,:vararg
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data

szText db "转换完的字符是:%c",0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .code
main proc
                      
         
                      LOCAL @ch:BYTE
                                LOCAL @dh:dword
                MOV ch,'F'
                MOV AL,ch
                CMP AL,'A'
                JB NEXT
                CMP AL,'Z'
                JA NEXT
                ADD AL,020h
                MOVZX EAX,AL                           
                invoke printf,addr szText,EAX    ; NNNNNNNNNNN
                 
NEXT:                invoke ExitProcess,NULL
                  
main endp
               
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end main

我将第NNNNNNNNNNN句改为:MOV  dh,EAX
                                              invoke printf,addr szText,dh
这样为什么打印不出字符.....
2011-10-16 16:55
0
雪    币: 859
活跃值: (304)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
5
你反汇编看看就知道了
这时候是 push dh,只push 两个字节不是dword型
虽然是%c 但是还是转化为dword再压栈的

另:这个能行吗
MOV  dh,EAX
2011-10-17 03:17
0
游客
登录 | 注册 方可回帖
返回
//