Затирание переменной...

Тема в разделе "WASM.BEGINNERS", создана пользователем tagegor, 25 сен 2009.

  1. tagegor

    tagegor New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2009
    Сообщения:
    54
    Здравствуйте еще раз ;)
    Существует такой код:
    Код (Text):
    1. deep_scan Proc basedir:DWord, frstlevel:DWord
    2.     Local PreItog:DWord
    3.     Local sec_lvl:DWord
    4.     Local File_Clean[200H]:Byte
    5.     Local Name_buffer[200H]:Byte
    6.     Local Nametest:DWord
    7.  
    8.     Mov Eax, basedir
    9.     Mov PreItog, Eax
    10.     Mov Eax, frstlevel
    11.     Mov sec_lvl, Eax
    12.  
    13.     Mov Ebx, [basedir]
    14.     Invoke lstrlen, Ebx
    15.     Mov Byte Ptr [Ebx + Eax] - 3, 00H
    16.  
    17.     Invoke lstrcat, basedir, frstlevel
    18.     Invoke lstrcat, basedir, Addr Add1
    19.  
    20.     Invoke FindFirstFile, basedir, Addr wfd
    21.     Mov hFind2, Eax
    22.  
    23. looper2:
    24.     Invoke FindNextFile, hFind2, Addr wfd
    25. .If Eax != 0
    26.     Invoke lstrcmp, Addr wfd.cFileName, Addr dot
    27.     .If Eax != 0
    28.         Invoke lstrcmp, Addr wfd.cFileName, Addr ddot
    29.         .If Eax != 0
    30.  
    31.             And wfd.dwFileAttributes, 0010H
    32.             Cmp wfd.dwFileAttributes, 0010H
    33.             Je dir1
    34.             Jmp non_dir2
    35. dir1:
    36.  
    37.     Invoke deep_scan2, PreItog, sec_lvl, Addr wfd.cFileName
    38.      Jmp ender2
    39. non_dir2:
    40.          Inc counter
    41.  
    42.         Invoke lstrcpy, Addr File_Clean, Addr MainHost
    43.  
    44.         Invoke lstrcat, Addr File_Clean, sec_lvl
    45.         Invoke MessageBox, 0, Addr wfd.cFileName, 0, MB_OK
    46.        
    47.             Invoke  wsprintf, Offset szBuf, Offset Section, counter
    48.             Invoke  wsprintf, Offset szBuf2, Offset File_src, counter
    49.             Invoke  wsprintf, Offset szBuf3, Offset File_name, counter
    50.  
    51.             Invoke  WritePrivateProfileString, Addr szBuf, Offset szBuf2, Addr File_Clean, Addr file
    52.             Invoke  WritePrivateProfileString, Addr szBuf, Offset szBuf3, Addr wfd.cFileName, Addr file
    53.  
    54. ender2:
    55.         .EndIf
    56.     .EndIf
    57.     Jmp looper2
    58. .EndIf
    59.  
    60.     Ret
    61. deep_scan EndP
    Проблема заключается в том, что переменная sec_lvl принимает значение от wfd.cFileName
    Почему так?
    Суть: В функцию передается параметр и держится в frstlevel, я его перемещаю в sec_lvl(чтобы не дай бог что то случилось xD). А на выходе имею sec_lvl который едиентичен wfd.cFileName
    ....
     
  2. tagegor

    tagegor New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2009
    Сообщения:
    54
    Мне надо, чтобы эта переменная была неизменна,(тоесть с таким-же видом, каким она поступила в функцию) так как она является частью "склейки"
    Код (Text):
    1. Invoke lstrcat, Addr File_Clean, sec_lvl
    Прошу не слать читать маны и гуглить...
     
  3. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    а тут нечего гуглить и читать маны, где-то бага.

    - как ты проверяешь, что переменная изменилась? В отладчике?
    - ну если в отладчике, посмотри заодно на стек после wsprintf (который вызывается неоднократно)...
    - и заодно неплохо бы знать что внутри deep_scan2. И в том же отладчике посмотреть на вызов оной - убирается ли в стек при вызове адрес локальной переменной, или значение. Так, на всякий случай.