首页
社区
课程
招聘
[原创]汇编中STDOU如何写printf("abc");不定义字符串变量
发表于: 2009-6-16 20:57 7428

[原创]汇编中STDOU如何写printf("abc");不定义字符串变量

2009-6-16 20:57
7428

汇编中STDOU如何写printf("abc");
不定义 abc这个字符串变量.
MASM32练习时,有时为了提示错误信息,去不能直接像C一样printf("XX错误.");
总不能每个错误都定义一个变量吧,那也太麻烦了.


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (9)
雪    币: 393
活跃值: (100)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
2
invoke printf,CTXT("abc")
不知道是不是这样用..
不是的话,你自己查一下CTXT宏
2009-6-17 00:09
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
3
FUNC MACRO parameters:VARARG
        invoke parameters
        EXITM <eax>
      ENDM
      literal MACRO quoted_text:VARARG
        LOCAL local_text
        .data
          local_text db quoted_text,0
        align 4
        .code
        EXITM <local_text>
      ENDM
      CTXT MACRO quoted_text:VARARG
        EXITM <offset literal(quoted_text)>
      ENDM
    str$ MACRO DDvalue
      LOCAL rvstring
      .data
        rvstring db 20 dup (0)
        align 4
      .code
      invoke dwtoa,DDvalue,ADDR rvstring
      EXITM <ADDR rvstring>
    ENDM
2009-6-17 10:45
0
雪    币: 247
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
CTXT macro Text:VARARG
        local szText
        .data
                szText byte Text, 0
        .code
        exitm <offset szText>
        endm
ctxt equ <CTXT>
2009-6-17 17:34
0
雪    币: 229
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
#include <stdio.h>
char format[] = "%s %s\n";
char hello[] = "Hello";
char world[] = "world";
void main( void )
{
   __asm
   {
      mov  eax, offset world
      push eax
      mov  eax, offset hello
      push eax
      mov  eax, offset format
      push eax
      

call printf
      //clean up the stack so that main can exit cleanly
      //use the unused register ebx to do the cleanup
      pop  ebx
      pop  ebx
      pop  ebx
   }
}
2009-6-17 18:27
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
6
include masm32rt.inc
includelib masm32.lib

invoke  StdOut, CTXT("abc")

楼主主要想要的是在MASM32下怎么用MACRO来使得书写简便,而不是想VC内联汇编,更不想要一个一个push后call,所以楼上的辛苦写的代码楼主应该不会接受。
2009-6-18 04:00
0
雪    币: 254
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
.386
                .model flat, stdcall
                option casemap :none

include                windows.inc
include                user32.inc
include         kernel32.inc
includelib        user32.lib
include         masm32rt.inc
includelib      masm32.lib


   .data
   
   
   .data?
   
szBuffer   db   256 dup(?)
   
   .code
   
   
   
start:
      invoke   StdOut,CTXT("OUT OK!!!!")
           
      invoke    StdIn,offset szBuffer,sizeof  szBuffer
      invoke        ExitProcess,NULL
end start

----------------------------------------------------------
J:\ctxt.asm(25) : error A2006: undefined symbol : CTXT
J:\ctxt.asm(25) : error A2114: INVOKE argument type mismatch : argument : 1


出现这样的错误包含的文件错了吗?
2009-6-20 20:30
0
雪    币: 254
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
pengmo 整的宏的,编译时没错,连接时出错了,有哪位有完整的吗,发个来吧。百度在查中,还没查到

CTXT macro Text:VARARG
  local szText
  .data
    szText byte Text, 0
  .code
  exitm <offset szText>
  endm
ctxt equ <CTXT>
2009-6-20 21:00
0
雪    币: 622
活跃值: (65)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
9
invoke crt_printf
2009-6-20 23:06
0
雪    币: 254
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
已解决,
C:\RadASM\masm32\macros
include    macros.asm 就行了.开始不行是我在另一台电脑上,环境不对所至.
2009-6-22 21:02
0
游客
登录 | 注册 方可回帖
返回
//