include 'win32ax.inc'
.data
nBufferLength dd 255
lpBuffer db '255',0
buffer dd 255
lpNewFileName db 'C:\33.exe',0
.code
start:
push lpBuffer
push nBufferLength
call [GetCurrentDirectory]
mov eax,buffer
push 0
push buffer
push lpNewFileName
call [CopyFile]
push 0
call [ExitProcess]
.end start
Копирование самого себя в C:
не правильно???
Код:
принцип его такой скопировать самого себя в C:\
Но что то не выходит??!
Поясните в чем ошибка!!
P.S.
Не ругайте я только начинающий кодер.
Синтаксис (FASM)
Во первых - в вындоус есть такая функция GetLastError - если вам не очевидна ошибка, которую вы допустили - она вам поможет. Во вторых - подпись должна соотвествовать содержанию. Максимум от имени кого вы можете говорить - это пользователь. Да и то не факт. Остальное вам пока не дано. Третье - измените название темы.
Но что то не выходит??!
Поясните в чем ошибка!!
[/QUOTE]
во-первых, перепутаны все параметры при вызове функций.
во-вторых, чего ты хотел добиться от функции GetCurrentDirectory ? она возвращает путь к текущей директории, а не к твоему exe файлу
попробуй так
Код:
start:
call [GetCommandLineA]
stdcall [CopyFile], eax, lpNewFileName, 0
push 0
call [ExitProcess]
call [GetCommandLineA]
stdcall [CopyFile], eax, lpNewFileName, 0
push 0
call [ExitProcess]
Что то у меня он не пашет!!
Что то у меня он не пашет!![/QUOTE]
нет. не проверял. я думал, что ты хоть немного своей головой будешь думать...
вот, всё работает.
Код:
format PE GUI 4.0
entry start
include 'win32a.inc'
section '.code' code readable writeable executable
lpNewFileName db 'C:\prog.exe',0
start:
call [GetCommandLineA]
inc eax
mov ebx, eax
stdcall [lstrlenA],eax
dec eax
add eax, ebx
mov byte [eax],0
mov eax, ebx
stdcall [CopyFile], eax, lpNewFileName, 0
push 0
call [ExitProcess]
section '.relocs' data readable writeable fixups
section '.idata' import data readable writeable
library kernel,'KERNEL32.DLL',\
user,'USER32.DLL'
import kernel,\
ExitProcess,'ExitProcess',\
GetCommandLineA,'GetCommandLineA',\
CopyFile,'CopyFileA',\
lstrlenA,'lstrlenA'
entry start
include 'win32a.inc'
section '.code' code readable writeable executable
lpNewFileName db 'C:\prog.exe',0
start:
call [GetCommandLineA]
inc eax
mov ebx, eax
stdcall [lstrlenA],eax
dec eax
add eax, ebx
mov byte [eax],0
mov eax, ebx
stdcall [CopyFile], eax, lpNewFileName, 0
push 0
call [ExitProcess]
section '.relocs' data readable writeable fixups
section '.idata' import data readable writeable
library kernel,'KERNEL32.DLL',\
user,'USER32.DLL'
import kernel,\
ExitProcess,'ExitProcess',\
GetCommandLineA,'GetCommandLineA',\
CopyFile,'CopyFileA',\
lstrlenA,'lstrlenA'
Цитата: ahilles
Я думал, что ты хоть немного своей головой будешь думать...
Я то думал и вот нашёл другой способ
Код:
format PE GUI 4.0
include 'win32a.inc'
invoke GetModuleHandle,0
invoke GetModuleFileName,eax,buf,MAX_PATH
invoke CopyFile,buf,lpNewFileName,FALSE
test eax,eax
jnz exit
exit:
invoke ExitProcess,0
data import
library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL'
include 'api\kernel32.inc'
include 'api\user32.inc'
end data
lpNewFileName db 'c:\My_File.exe',0
buf rb MAX_PATH
include 'win32a.inc'
invoke GetModuleHandle,0
invoke GetModuleFileName,eax,buf,MAX_PATH
invoke CopyFile,buf,lpNewFileName,FALSE
test eax,eax
jnz exit
exit:
invoke ExitProcess,0
data import
library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL'
include 'api\kernel32.inc'
include 'api\user32.inc'
end data
lpNewFileName db 'c:\My_File.exe',0
buf rb MAX_PATH
Цитата: ahilles
Код:
format PE GUI 4.0
entry start
include 'win32a.inc'
section '.code' code readable writeable executable
lpNewFileName db 'C:\prog.exe',0
start:
call [GetCommandLineA]
inc eax
mov ebx, eax
stdcall [lstrlenA],eax
dec eax
add eax, ebx
mov byte [eax],0
mov eax, ebx
stdcall [CopyFile], eax, lpNewFileName, 0
push 0
call [ExitProcess]
section '.relocs' data readable writeable fixups
section '.idata' import data readable writeable
library kernel,'KERNEL32.DLL',\
user,'USER32.DLL'
import kernel,\
ExitProcess,'ExitProcess',\
GetCommandLineA,'GetCommandLineA',\
CopyFile,'CopyFileA',\
lstrlenA,'lstrlenA'
entry start
include 'win32a.inc'
section '.code' code readable writeable executable
lpNewFileName db 'C:\prog.exe',0
start:
call [GetCommandLineA]
inc eax
mov ebx, eax
stdcall [lstrlenA],eax
dec eax
add eax, ebx
mov byte [eax],0
mov eax, ebx
stdcall [CopyFile], eax, lpNewFileName, 0
push 0
call [ExitProcess]
section '.relocs' data readable writeable fixups
section '.idata' import data readable writeable
library kernel,'KERNEL32.DLL',\
user,'USER32.DLL'
import kernel,\
ExitProcess,'ExitProcess',\
GetCommandLineA,'GetCommandLineA',\
CopyFile,'CopyFileA',\
lstrlenA,'lstrlenA'
section '.relocs' data readable writeable fixups
Поясни пожалуйста для чего нужна эта строка??
секция перемещаемых элементов,содержит читаемые/записываемые данные,а также таблицу перемещений
Надо изучать структуру PE-файла и свойства секций,тогда вопросы сами собой пропадут:)