Нужна Ваша помощь!

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
Xen0n
Сообщения: 3
Зарегистрирован: 25 фев 2005, 14:57

05 мар 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.
Assembler forever!
Andy
Сообщения: 238
Зарегистрирован: 17 фев 2004, 08:15
Откуда: Минск

05 мар 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
*provided AS IS
Xen0n
Сообщения: 3
Зарегистрирован: 25 фев 2005, 14:57

05 мар 2005, 22:57

Спасибо, Andy! А в MASM-е есть ф-ция lstrcat?
Чем, кроме имени импортируемого либа и обьявления API, код будет отличаться для MASM?
Assembler forever!
Xen0n
Сообщения: 3
Зарегистрирован: 25 фев 2005, 14:57

05 мар 2005, 23:17

Всё работает! Огромное СПАСИБО!
Assembler forever!
Andy
Сообщения: 238
Зарегистрирован: 17 фев 2004, 08:15
Откуда: Минск

05 мар 2005, 23:17

А в MASM-е есть ф-ция lstrcat?
lstrcat - это функция WinAPI.
Чем, кроме имени импортируемого либа и обьявления API, код будет отличаться для MASM?
Да вобщем-то ничем...
*provided AS IS
Ответить