Menu

#261 dynamic call problem

v210
closed
nobody
None
5
2013-04-20
2013-04-08
ToutEnMasm
No

Dynamic declare:
;-------- sprintf_s PROTO C :DWORD ,:DWORD ,:DWORD , :VARARG -------------------------
EXTERNDEF ADRsprintf_s:DWORD ;sprintf_s use a vararg en couldn't be call in the library
Psprintf_s TYPEDEF PROTO C :DWORD ,:DWORD ,:DWORD , :VARARG
Fsprintf_s TYPEDEF PTR Psprintf_s
sprintf_s TEXTEQU <Fsprintf_s ptr ADRsprintf_s>

.code
.LISTALL
invoke sprintf_s,addr sz_buffer,sizeof sz_buffer,write("Friendlyname : %s"), addr buffer
invoke o_printcrlf,addr sz_buffer
.NOLIST

result with ml OK:
Microsoft (R) Macro Assembler Version 6.15.8803 04/07/13 10:40:24
mat_enum.asm Page 1 - 1

00000055 0000
C .LISTALL
1C LOCAL txt
00000863 1C .data
00000863 46 72 69 65 6E 1C ??002D db "Friendlyname : %s",0
64 6C 79 6E 61
6D 65 20 3A 20
25 73 00
1C align 4
000009F8 1C .code
1C EXITM <ADDR ??002D>
C invoke sprintf_s,addr sz_buffer,sizeof sz_buffer,write("Friendlyname : %s"), addr buffer
000009F8 8D 85 FFFFFEDC * lea eax, byte ptr ss:[ebp]+0DCh
000009FE 50 * push eax
000009FF 68 00000863 R * push OFFSET ??002D
00000A04 68 00000100 * push +000000100h
00000A09 68 00000301 R * push OFFSET sz_buffer
00000A0E FF 15 00000000 E * call dword ptr ADRsprintf_s
00000A14 83 C4 10 * add esp, 000000010h
C invoke o_printcrlf,addr sz_buffer
00000A17 68 00000301 R * push OFFSET sz_buffer
00000A1C E8 FFFFFB6A * call o_printcrlf

Result with JWASM who disagree:
JWasm v2.10rc10, Apr 4 2013
mat_enum.asm
C .LISTALL
00000000 1C .data
*1C _TEXT ends
00000863 *1C _DATA segment
*1C assume cs:ERROR
1C ??002D db "Friendlyname : %s",0
1C align 4
00000000 1C .code
*1C _DATA ends
00000A13 *1C _TEXT segment
*1C assume cs:FLAT
00000A13 C invoke Fsprintf_s ptr ADRsprintf_s,addr sz_buffer,sizeof sz_buffer,ADDR ??002D, addr buffer
00000A13 * C lea eax, buffer
00000A19 * C push eax
00000A1A * C push offset ??002D
00000A1F * C push sizeof sz_buffer
00000A24 * C push offset sz_buffer
00000A29 * C call Fsprintf_s ptr ADRsprintf_s
Error A2182: Instruction operand must have size ;************************************************
00000A2F * C add esp, 16
00000A32 C invoke o_printcrlf,addr sz_buffer
00000A32 * C push offset sz_buffer
00000A37 * C call o_printcrlf

Discussion

  • japheth

    japheth - 2013-04-08

    will be fixed in v2.10.

    It is preferable to provide simple assembly source as test case. Disassembly listings are only useful in rare cases, when there's a code generation issue.

     
  • japheth

    japheth - 2013-04-20
    • status: open --> closed
    • Group: --> v210
     

Log in to post a comment.