Не сохраняется значение в переменной.

Тема в разделе "WASM.BEGINNERS", создана пользователем garlan, 28 ноя 2010.

  1. garlan

    garlan New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2010
    Сообщения:
    4
    Здравствуйте.В чем может быть причина,получаю в переменные два разных пути - откуда копировать и куда.После второй функции SHGetSpecialFolderPathA оба string имеют одинаковое значение.Не могу даже выделить в чем проблема - в asm или в применении функций winapi.Мыслей нэт.
    Код (Text):
    1. format PE GUI 4.0
    2. entry  start
    3. include  'win32ax.inc'  
    4.  
    5. section '.data' data readable writeable
    6.         Pcalc       db ?    ;путь к ..\System32\calc.exe
    7.         Pdesktop    db ?    ;путь к ..\Desktop\calc.exe
    8. section '.code' code readable executable
    9. start:
    10.         invoke SHGetSpecialFolderPathA, 0, Pcalc, CSIDL_SYSTEM, 0
    11.         invoke lstrcat, Pcalc,'\calc.exe'                       ;в Pcalc путь вида E:\Windows\System32\calc.exe
    12.         mov ebx, Pcalc
    13.  
    14.         invoke SHGetSpecialFolderPathA, 0, Pdesktop, CSIDL_DESKTOP, 0
    15.         invoke lstrcat, Pdesktop, '\calc.exe'                 ;в Pdesktop путь E:\Users\имя узера\Desktop\calc.exe
    16.  
    17.         inc ebx
    18.         invoke MessageBoxA, 0, ebx,'path_calc', 0              ;почему здесь ebx==Pdesktop
    19.         ;invoke MessageBoxA, 0, Pcalc,'path_calc', 0           ;почему здесь Pcalc==Pdesktop
    20.         invoke MessageBoxA, 0, Pdesktop,'path_desktop', 0
    21.         invoke CopyFileA, Pcalc, Pdesktop, 0
    22.         test eax, eax
    23.            jz copy_error
    24.         invoke MessageBoxA, 0, 'copy','OK', 0
    25.         ret
    26.     copy_error:
    27.             invoke MessageBoxA, 0, 'ошибка копирования', 0,MB_ICONERROR + MB_OK
    28.             jmp  exit
    29.     exit:
    30.             invoke ExitProcess,0
    31. section '.idata' import data readable
    32.  
    33. library kernel32,'KERNEL32.DLL',user32,'USER32.DLL', shell32,'SHELL32.DLL'
    34.         import user32,MessageBoxA,'MessageBoxA'
    35.         import kernel32,ExitProcess,'ExitProcess',lstrcat,'lstrcatA',\
    36.                CopyFileA,'CopyFileA'
    37.         import shell32, SHGetSpecialFolderPathA,'SHGetSpecialFolderPathA'
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    размер переменной ты установил 1 байт! подумай над этим

    п.с.: да когда же вы уже научитесь отладчиками пользоваться? Для кого создали ольку? вот любите по кофейной гуще программы отлаживать или на форумах мозги клепать. А вот открыл бы в ольке файл и сразу увидел бы недостатки
     
  3. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    У тебя винда на Е:\ установлена ?
     
  4. garlan

    garlan New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2010
    Сообщения:
    4
    В этом случае олька для меня темный лес,продвинуть смогут ваши комментарии вкудасмотреть,размер переменной менял,пробывал использовать другие регистры и функции по нахождению пути.Винда на Е ..
     
  5. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    garlan

    Сделай хотя бы так:

    Код (Text):
    1. Pcalc          rb MAX_PATH    ; MAX_PATH = 256
    2. Pdesktop    rb MAX_PATH
     
  6. garlan

    garlan New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2010
    Сообщения:
    4
    Спасибо,работает,понял что почитать нужно С,C++,одним справочником по winapi не обойдешся.
     
  7. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    garlan
    Ну во первых измени тут, к примеру так.
    Код (Text):
    1. format PE GUI 4.0
    2. entry  start
    3. include 'c:\fasmw\include\win32a.inc'
    4.     CSIDL_SYSTEM equ 0025h
    5. section '.data' data readable writeable
    6.     Pcalc  db 2048 dup (0)
    7.     str1   db '\calc.exe',0
    8.  
    9.  
    10. section '.code' code readable executable
    11. start:
    12.     push 0
    13.     push CSIDL_SYSTEM ;equ 0025h
    14.     push Pcalc
    15.     push 0
    16.     call [SHGetSpecialFolderPathA] 
    17.  
    18.     invoke lstrcat, Pcalc,str1
    19.  
    20.     invoke MessageBoxA, 0, Pcalc,0, 0
    21.     invoke ExitProcess,0
    22. section '.idata' import data readable
    23.  
    24. library kernel32,'KERNEL32.DLL',user32,'USER32.DLL', shell32,'SHELL32.DLL'
    25.         import user32,MessageBoxA,'MessageBoxA'
    26.         import kernel32,ExitProcess,'ExitProcess',lstrcat,'lstrcatA',\
    27.                CopyFileA,'CopyFileA'
    28.         import shell32, SHGetSpecialFolderPathA,'SHGetSpecialFolderPathA'
    Потом скачай Ольку
    Настроил ее как отладчик по умолчанию.
    [​IMG]
    Дальше ставишь команду прерывания тут
    Код (Text):
    1. ...
    2.     call [SHGetSpecialFolderPathA] 
    3.  
    4.     invoke lstrcat, Pcalc,str1
    5.  
    6. int3; Принципиально int3 <- Пишем вместе!!!
    7.     invoke MessageBoxA, 0, Pcalc,0, 0
    8.     invoke ExitProcess,0
    Пересобираешь снова в exe.
    Запускаешь.
    Вываливается Олли на строке "int 3"
    Внимательно смотришь и понимаешь что ты в теле своей проги :)
    [​IMG]
    И смотришь где какая строка у тебя :)
     
  8. garlan

    garlan New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2010
    Сообщения:
    4
    Я уже сравнил - у меня две стринг ложились по одному адресу.За int3 спс,классная вещь.
     
  9. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    _sheva740
    только смотрите. Для fasm int3 (0xCC) и int 3 (0xCD 0x03) разные вещи, но отличия только в размерах действуют они одинаково.
     
  10. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    max7C4
    Да, спасибо.
    Смотрел, смотрю, смотреть буду:)
    Раньше этого не знал в фасме с int [пробел]3 - мучался,
    Олька кусок следующей команды откусывала и бред писала.
    Теперь все гуд!