PDA

Просмотр полной версии : Нужна Ваша помощь!



Xen0n
05.03.2005, 14:58
Помогите, пожалуйста, разобраться, почему не работает прога. Вот есть такой код:
;-----------------------------------------------------------------------------
sized equ 256
cur_dir db sized dup(0)
win_dir db sized dup(0)
mix db '\123.exe',0
;…
assume ds:_DATA,es:_DATA

push offset cur_dir
push sized
call GetCurrentDirectoryA

test eax,eax
jz ex1t

cld
lea esi,mix
lea edi,cur_dir
add edi,eax
mov ecx,8
rep movsb

push sized
push offset win_dir
call GetWindowsDirectoryA

test eax,eax
jz ex1t

cld
lea esi,mix
lea edi,win_dir
add edi,eax
mov ecx,8
rep movsb

push 0
push offset cur_dir
push offset win_dir

call CopyFileA
;-----------------------------------------------------------------------
Этот код должен копировать эту же прогу под именем 123.exe у Win-директорию. Исходное имя программы тоже 123.exe.

Andy
05.03.2005, 22:39
1. Даем осмысленные названия темам!
2. Используем ВВ-теги


Почему не работает разиратся не буду. На первый взгляд правильно. Правда имя программы можно взять относительное - без каталога.

Мой вариант:


.386
.model flat
.data

WindowsDirectoryBufferSize equ 64

szApplicationError db "Error!!!",0
szFileName db "123.exe",0
szSlash db "\",0
lpszWindowsDir db WindowsDirectoryBufferSize dup(0)

.code

includelib import32.lib

extrn CopyFileA:near
extrn ExitProcess:near
extrn GetWindowsDirectoryA:near
extrn MessageBoxA:near
extrn lstrcat:near

_start:
push WindowsDirectoryBufferSize
push offset lpszWindowsDir
call GetWindowsDirectoryA

or eax,eax
jz AppError


push offset szSlash
push offset lpszWindowsDir
call lstrcat

push offset szFileName
push offset lpszWindowsDir
call lstrcat

push 0
push offset lpszWindowsDir
push offset szFileName
call CopyFileA

or eax,eax
jnz ExitApp

AppError:
push 10h
push offset szApplicationError
push offset szApplicationError
push 0
call MessageBoxA
ExitApp:
push 0
call ExitProcess
end _start

Xen0n
05.03.2005, 22:57
Спасибо, Andy! А в MASM-е есть ф-ция lstrcat?
Чем, кроме имени импортируемого либа и обьявления API, код будет отличаться для MASM?

Xen0n
05.03.2005, 23:17
Всё работает! Огромное СПАСИБО!

Andy
05.03.2005, 23:17
А в MASM-е есть ф-ция lstrcat?
lstrcat - это функция WinAPI.

Чем, кроме имени импортируемого либа и обьявления API, код будет отличаться для MASM?
Да вобщем-то ничем...