Конкатенация.

Тема в разделе "WASM.BEGINNERS", создана пользователем grinay, 27 мар 2007.

  1. grinay

    grinay New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2007
    Сообщения:
    19
    Вот писал патчь для оутглюка столкнулся с проблемой в конкатенации подскажите как.Сам код
    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap :none  
    4.  
    5.     include \masm32\include\windows.inc
    6.     include \masm32\include\user32.inc
    7.     include \masm32\include\kernel32.inc
    8.     include \masm32\include\advapi32.inc
    9.     includelib \masm32\lib\user32.lib
    10.     includelib \masm32\lib\kernel32.lib
    11.     includelib \masm32\lib\advapi32.lib
    12.  
    13. .data
    14.     SubKey     db "Identities\",0
    15.     SetToPath  db '\Software\Microsoft\Outlook Express\5.0\mail\',0
    16.     SetToKey   db "Safe Attachments",0
    17.     szBetrayed db "Default User ID",0
    18.     SetData    db "0x0",0
    19. .data?
    20.     hKey       dd ?
    21.     hValue     dd ?
    22.     szBuffer   db 4 dup (?)
    23.    
    24. .code
    25.  
    26. start:
    27.     invoke RegOpenKeyEx,HKEY_CURRENT_USER,ADDR SubKey,NULL,KEY_QUERY_VALUE,ADDR hKey    
    28.     invoke RegQueryInfoKey, hKey,0,0,0,0,0,0,0,0,ADDR hValue,0,0                  
    29.     invoke RegQueryValueEx, hKey, ADDR szBetrayed,0,0,ADDR szBuffer,ADDR hValue    
    30.     invoke lstrcat,offset SubKey,offset szBuffer
    31.     invoke lstrcat,offset SubKey,offset SetToPath
    32.     invoke RegCreateKey,HKEY_CURRENT_USER,offset SubKey,offset hKey              
    33.     invoke RegSetValueEx,hKey,ADDR SubKey,0,REG_SZ,ADDR SetData,sizeof SetData    
    34.     invoke RegCloseKey , hKey                              
    35.     invoke ExitProcess,NULL    
    36. end start
    "Identities\{536E12B6-7C5E-4257-96AE-02540C09B118}536E12B6-7C5E-4257-96AE-02540C09B118}5 ID"

    а должно получиться

    "Identities\{536E12B6-7C5E-4257-96AE-02540C09B118}\Software\Microsoft\Outlook Express\5.0\mail\"

    вожет это из за нуль-турминатора.
    Подскажите как исправить.
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Первый lstrcat добавляет новую строку сразу после нуля в конце SubKey, тем самым портя всё содержимое SetToPath. Догадайтесь сами как исправить. Кстати, а не маловат ли буффер szBuffer (всего 4 байта)? Аккуратнее надо быть...
     
  3. grinay

    grinay New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2007
    Сообщения:
    19
    Все исправил еще до ответа:)Но пошол иным путем. Сделал больше буфер плюс добавил нулевой байт.
    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap :none  
    4.  
    5.     include \masm32\include\windows.inc
    6.     include \masm32\include\user32.inc
    7.     include \masm32\include\kernel32.inc
    8.     include \masm32\include\advapi32.inc
    9.     includelib \masm32\lib\user32.lib
    10.     includelib \masm32\lib\kernel32.lib
    11.     includelib \masm32\lib\advapi32.lib
    12. MEMSIZE equ 65535
    13. .data
    14.     SubKey     db "Identities\",0
    15.     SetToPath  db '\Software\Microsoft\Outlook Express\5.0\mail\',0
    16.     SetToKey   db "Safe Attachments",0
    17.     GetId db "Default User ID",0
    18.     Message db "Прикрепленные файлы разрешены",0
    19.     caption db "Информация",0
    20.     SetData    dd 0
    21. .data?
    22.     hKey       dd ?
    23.     hValue     dd ?
    24.     szBuffer   db 38 dup (?),0
    25.     hMemory HANDLE ?                            
    26.     pMemory DWORD ?  
    27. .code
    28.  
    29. start:
    30.     invoke RegOpenKeyEx,HKEY_CURRENT_USER,ADDR SubKey,NULL,KEY_QUERY_VALUE,ADDR hKey    
    31.     invoke RegQueryInfoKey, hKey,0,0,0,0,0,0,0,0,ADDR hValue,0,0                  
    32.     invoke RegQueryValueEx, hKey, ADDR GetId,0,0,ADDR szBuffer,ADDR hValue  
    33.     invoke GlobalAlloc,GMEM_MOVEABLE or GMEM_ZEROINIT,MEMSIZE
    34.     mov    hMemory,eax  
    35.     invoke GlobalLock,hMemory
    36.     mov    pMemory,eax
    37.     invoke lstrcat,pMemory,offset SubKey
    38.     invoke lstrcat,pMemory,offset szBuffer
    39.     invoke lstrcat,pMemory,offset SetToPath
    40.     invoke RegCreateKey,HKEY_CURRENT_USER,pMemory,offset hKey              
    41.     invoke RegSetValueEx,hKey,ADDR SetToKey,0,REG_DWORD,ADDR SetData,sizeof SetData    
    42.     invoke RegCloseKey , hKey  
    43.     invoke GlobalUnlock,pMemory
    44.            invoke GlobalFree,hMemory    
    45.            invoke MessageBox,NULL,offset Message,offset caption,NULL                        
    46.     invoke ExitProcess,NULL    
    47. end start