Здравствуйте.В чем может быть причина,получаю в переменные два разных пути - откуда копировать и куда.После второй функции SHGetSpecialFolderPathA оба string имеют одинаковое значение.Не могу даже выделить в чем проблема - в asm или в применении функций winapi.Мыслей нэт. Код (Text): format PE GUI 4.0 entry start include 'win32ax.inc' section '.data' data readable writeable Pcalc db ? ;путь к ..\System32\calc.exe Pdesktop db ? ;путь к ..\Desktop\calc.exe section '.code' code readable executable start: invoke SHGetSpecialFolderPathA, 0, Pcalc, CSIDL_SYSTEM, 0 invoke lstrcat, Pcalc,'\calc.exe' ;в Pcalc путь вида E:\Windows\System32\calc.exe mov ebx, Pcalc invoke SHGetSpecialFolderPathA, 0, Pdesktop, CSIDL_DESKTOP, 0 invoke lstrcat, Pdesktop, '\calc.exe' ;в Pdesktop путь E:\Users\имя узера\Desktop\calc.exe inc ebx invoke MessageBoxA, 0, ebx,'path_calc', 0 ;почему здесь ebx==Pdesktop ;invoke MessageBoxA, 0, Pcalc,'path_calc', 0 ;почему здесь Pcalc==Pdesktop invoke MessageBoxA, 0, Pdesktop,'path_desktop', 0 invoke CopyFileA, Pcalc, Pdesktop, 0 test eax, eax jz copy_error invoke MessageBoxA, 0, 'copy','OK', 0 ret copy_error: invoke MessageBoxA, 0, 'ошибка копирования', 0,MB_ICONERROR + MB_OK jmp exit exit: invoke ExitProcess,0 section '.idata' import data readable library kernel32,'KERNEL32.DLL',user32,'USER32.DLL', shell32,'SHELL32.DLL' import user32,MessageBoxA,'MessageBoxA' import kernel32,ExitProcess,'ExitProcess',lstrcat,'lstrcatA',\ CopyFileA,'CopyFileA' import shell32, SHGetSpecialFolderPathA,'SHGetSpecialFolderPathA'
размер переменной ты установил 1 байт! подумай над этим п.с.: да когда же вы уже научитесь отладчиками пользоваться? Для кого создали ольку? вот любите по кофейной гуще программы отлаживать или на форумах мозги клепать. А вот открыл бы в ольке файл и сразу увидел бы недостатки
В этом случае олька для меня темный лес,продвинуть смогут ваши комментарии вкудасмотреть,размер переменной менял,пробывал использовать другие регистры и функции по нахождению пути.Винда на Е ..
garlan Ну во первых измени тут, к примеру так. Код (Text): format PE GUI 4.0 entry start include 'c:\fasmw\include\win32a.inc' CSIDL_SYSTEM equ 0025h section '.data' data readable writeable Pcalc db 2048 dup (0) str1 db '\calc.exe',0 section '.code' code readable executable start: push 0 push CSIDL_SYSTEM ;equ 0025h push Pcalc push 0 call [SHGetSpecialFolderPathA] invoke lstrcat, Pcalc,str1 invoke MessageBoxA, 0, Pcalc,0, 0 invoke ExitProcess,0 section '.idata' import data readable library kernel32,'KERNEL32.DLL',user32,'USER32.DLL', shell32,'SHELL32.DLL' import user32,MessageBoxA,'MessageBoxA' import kernel32,ExitProcess,'ExitProcess',lstrcat,'lstrcatA',\ CopyFileA,'CopyFileA' import shell32, SHGetSpecialFolderPathA,'SHGetSpecialFolderPathA' Потом скачай Ольку Настроил ее как отладчик по умолчанию. Дальше ставишь команду прерывания тут Код (Text): ... call [SHGetSpecialFolderPathA] invoke lstrcat, Pcalc,str1 int3; Принципиально int3 <- Пишем вместе!!! invoke MessageBoxA, 0, Pcalc,0, 0 invoke ExitProcess,0 Пересобираешь снова в exe. Запускаешь. Вываливается Олли на строке "int 3" Внимательно смотришь и понимаешь что ты в теле своей проги И смотришь где какая строка у тебя
_sheva740 только смотрите. Для fasm int3 (0xCC) и int 3 (0xCD 0x03) разные вещи, но отличия только в размерах действуют они одинаково.
max7C4 Да, спасибо. Смотрел, смотрю, смотреть буду Раньше этого не знал в фасме с int [пробел]3 - мучался, Олька кусок следующей команды откусывала и бред писала. Теперь все гуд!