News:

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

Macro High Level Reference

Started by xroot, March 06, 2007, 05:03:12 PM

Previous topic - Next topic

xroot

Hi,
I'm trying to get env$    (get an environment string) to work and having no luck.
It compiles and links fine. Here is my little test program.

;   envdemo.asm

include \masm32\include\masm32rt.inc

.data?
Buffer  dd 200 dup (?)

.data
QS      db "COMPUTERNAME",0

.code
start:
            invoke GetEnvironmentVariable, addr QS, addr Buffer, SIZEOF Buffer  ;This Works
            ;mov Buffer, env$(QS)         ;I can not get this to work
            invoke StdOut,ADDR Buffer
            invoke ExitProcess, NULL
end start

Can someone tell me what I'm doing wrong.
Thanks

MichaelW

The env$ macro parameter can be the address of a zero-terminated string, or a quoted string placed directly in the macro call. The return value is the address of the environment table entry. The statement:

mov Buffer, env$(QS)

is trying to use the first 4 bytes of QS as the address of a zero-terminated string, and place the return address in the first 4 bytes of Buffer.

Any of these forms will work:
EDIT: The check for EAX != 0 is necessary because the CRT function that env$ calls will return a NULL pointer if the specified variable name is not found.

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    include \masm32\include\masm32rt.inc
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    .data
      QS db "COMPUTERNAME",0
    .code
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
start:
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
    mov eax, env$("COMPUTERNAME")
    .IF eax
      print eax,13,10
    .ENDIF
   
    mov eax, env$(OFFSET QS)
    .IF eax
      print eax,13,10
    .ENDIF

    mov eax, env$(ADDR QS)
    .IF eax
      print eax,13,10
    .ENDIF

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