News:

MASM32 SDK Description, downloads and other helpful links
MASM32.com New Forum Link
masmforum WebSite

Add token string to a struct

Started by ragdog, August 29, 2009, 11:03:49 AM

Previous topic - Next topic

ragdog

Hi

I need help by a little problem i hope :bg

This code token a string to 3 strings
my problem is move this strings to a structure


Token_ STRUCT
String1    DWORD      ?
String2    DWORD      ?
String3    DWORD      ?
Token_ ENDS

.data
szString db "string1/string2/string3",0
Token_ <>
.code
      push ebx
       xor ebx, ebx ; API Counter
       
    assume edi: ptr Token_
       mov eax,dword ptr [edi+ebx*4]
    invoke crt_strtok, ADDR szString, CTEXT ("/")
    .WHILE eax
           mov dword ptr [edi+ebx*4],eax ;Add string to the struct
   inc ebx ;inc counter
        invoke crt_strtok, NULL, CTEXT ("/")
       
    .ENDW
       pop ebx
    ; Display the tokens from first to last.
    invoke MessageBox, 0, 0, [edi].String1, MB_OK
    invoke MessageBox, 0, 0, [edi].String2, MB_OK
    invoke MessageBox, 0, 0, [edi].String3, MB_OK
    assume edi:NOTHING
   ret


can your help me please
And tell me information about structs?

Thanks in forward

MichaelW

I corrected two errors and added comments.

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    include \masm32\include\masm32rt.inc
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

;---------------------------------
; This declares a structure type.
;---------------------------------

Token_ STRUCT
    String1    DWORD      ?
    String2    DWORD      ?
    String3    DWORD      ?
Token_ ENDS

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    .data
        szString db "string1/string2/string3",0

        ;Token_ <>

        ;------------------------------------
        ; This defines a structure variable.
        ;------------------------------------

        toks Token_ <>

    .code
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
start:
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

    push  ebx

    xor ebx, ebx          ; API Counter

    ;---------------------------------------------------
    ; This tells the assembler that EDI is a pointer to
    ; a Token_ structure, so it will know how to encode
    ; statements like [edi].String1.
    ;---------------------------------------------------

    assume edi: ptr Token_

    ;-----------------------------------------------------------------------
    ; The address of the Token_ structure variable MUST be loaded into EDI.
    ;-----------------------------------------------------------------------

    mov edi, OFFSET toks

    ;mov eax,dword ptr [edi+ebx*4] ; What is this for?

    ;----------------------------------------------------------------
    ; This will return the address of first token or a null pointer.
    ;----------------------------------------------------------------

    invoke crt_strtok, ADDR szString, chr$("/")

    ;-------------------------------------------------
    ; Repeat until crt_strtok returns a null pointer.
    ;-------------------------------------------------

    .WHILE eax

        ;---------------------------------------------------------
        ; Add the address of the token to the structure variable.
        ; The dword ptr is necessary because the assume specified
        ; that EDI points to a 12-byte structure.
        ;---------------------------------------------------------

        mov dword ptr [edi+ebx*4],eax   ;Add string to the struct

        inc ebx ;inc counter

        ;---------------------------------------------------------------
        ; This will return the address of next token or a null pointer.
        ;---------------------------------------------------------------

        invoke crt_strtok, NULL, chr$("/")

    .ENDW

    pop ebx

    ; Display the tokens from first to last.

    invoke MessageBox, 0, 0, [edi].String1, MB_OK
    invoke MessageBox, 0, 0, [edi].String2, MB_OK
    invoke MessageBox, 0, 0, [edi].String3, MB_OK

    assume edi:NOTHING

    inkey "Press any key to exit..."
    exit
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
end start

eschew obfuscation

ragdog

Ahh thanks

I have forgot declare the correct struct and the forgot del the mov eax,dword ptr [edi+ebx*4]

Nice comment :U

Greets