I'm totally new to assembly and I've been coding for about 2 weeks in Linux and able to output certain information on the terminal under Linux. However, today when I began coding under Windows, I ran into a problem, i'm unable to modify a byte in a string that I pass as a parameter to a function. I debugged the program in OllyDbg and it tells me that there's an access violation when writing to [address] - use Shift F7/F8/F9 to pass exception to program. I can't pass the exception to the program since there's no exception handler in the program. Is it illegal to modify a character in a string passed to a procedure? I have posted the code below.
section .bss
    var resb 6
section .text
    global _start
    _start:
        xor eax, eax                        ; empty all registers
        xor ebx, ebx
        xor ecx, ecx
        xor edx, edx
        jmp short get_library
    get_lib_addr:                           ; get_lib_addr(char *name)
        mov ecx, [esp+8]                    ; get the first parameter
        xor edx, edx                        ; zero out register
        mov byte [ecx+6], dl                ; add null terminating character to string
        jmp short fin                       ; go to end
    get_library:
        xor ecx, ecx
        mov ebx, var                        ; start address of var
        jmp start_loop                      ; start looping
    start_loop:
        cmp ecx, 5
        jge end_loop
        mov byte [ebx+ecx], 'h'
        inc ecx
        jmp start_loop
    end_loop:
        push dword var                      ; at this point - var = "hhhhh"
        call get_lib_addr                   ; call get_lib_addr("hhhhh")
    fin:
        xor eax, eax
        mov ebx, 0x750b4b80                 ; ExitProcess
        push eax                            ; eax = 0
        call ebx                            ; ExitProcess(0)
And a screenshot of the debugging in OllyDbg.
2nd case
Part of the code from Vivid Machines Shellcoding for Linux & Windows is copied below. When I try to use this syntax for passing parameters (assuming that's what is happening), I get an access violation trying to edit the string and adding a null terminating character in place of the N. I'm positive that the string is passed and ecx gets the correct string. Any reason this doesn't work?
LibraryReturn:
    pop ecx             ;get the library string
    mov [ecx + 10], dl      ;insert NULL - ***Access violation here***
;the N at the end of each string signifies the location of the NULL
;character that needs to be inserted
GetLibrary:
    call LibraryReturn
    db 'user32.dllN'
Screenshot of the debug information in the second scenario showing that N is indeed the value being edited.
