информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Страшный баг в WindowsАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Люди умные подскажите 15.10.01 08:05  
Автор: J Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Сделал небольшую прогу - она должна запускать программу в зависимости от некоторых условий. Работает только как-то непонятно.
Если ввести имя проги с клавиатуры - то все нормально работает - нужный файл загружает.А если прописать ее в autoexec.bat - то при загрузке выдает ошибку и не грузит ничего (в AX 0001h). Это я на своем домашнем компе проверял. А сегодня на рабочем проверил - тоже самое!!!!!!!!!!!!!

В интернете искал подобное - нашел даже исходники от разных умных людей - и таже самая история! Проверял на Win98 SE.

text segment 'code'
assume cs:text,ds:text
org 100h

main_ proc
mov ah,4ah
mov bx,100
int 21h

to_:
mov ax,offset com_line
mov bx,offset params
mov [bx]+2,ax
mov ax,cs
mov [bx]+4,ax

mov ah,4bh
mov al,0

mov bx,offset params
mov dx,offset fname

int 21h

mov ax,4c00h
int 21h

fname db 'proc.com',0
com_line db 0,13
params dw 7 dup (0)

main_ endp
text ends
end main_
Люди умные подскажите 15.10.01 18:23  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
> В интернете искал подобное - нашел даже исходники от разных
> умных людей - и таже самая история! Проверял на Win98 SE.

взял твой исходник, построил, кинул в корень, туда же кинул ARJ.EXE которого обозвал PROC.COM, в autoexec.bat дописал
test.com
pause
перезагрузился - все работает, показывает список ключей ARJ
так что все у тебя правильно
может у тебя PROC.COM не в корне - так укажи к нему полный путь

PS: windows 98 SE RUS
Люди умные подскажите 15.10.01 14:41  
Автор: Rook <Alex Sergeev> Статус: Member
<"чистая" ссылка>
Мне кажется, что это из-за не заданной рабочей директории, в при запуске из автоэкзека раб. дир. - это корень.
Попробуй прописать в path=c:\путь\к\программе.

Что-то подобное было сказано ниже, но там как то тяжеловесно.

> Сделал небольшую прогу - она должна запускать программу в
> зависимости от некоторых условий. Работает только как-то
> непонятно.
> Если ввести имя проги с клавиатуры - то все нормально
> работает - нужный файл загружает.А если прописать ее в
> autoexec.bat - то при загрузке выдает ошибку и не грузит
> ничего (в AX 0001h). Это я на своем домашнем компе
> проверял. А сегодня на рабочем проверил - тоже
> самое!!!!!!!!!!!!!
>
> В интернете искал подобное - нашел даже исходники от разных
> умных людей - и таже самая история! Проверял на Win98 SE.
>
> text segment 'code'
> assume cs:text,ds:text
> org 100h
>
> main_ proc
> mov ah,4ah
> mov bx,100
> int 21h
>
> to_:
> mov ax,offset com_line
> mov bx,offset params
> mov [bx]+2,ax
> mov ax,cs
> mov [bx]+4,ax
>
> mov ah,4bh
> mov al,0
>
> mov bx,offset params
> mov dx,offset fname
>
> int 21h
>
> mov ax,4c00h
> int 21h
>
> fname db 'proc.com',0
> com_line db 0,13
> params dw 7 dup (0)
>
> main_ endp
> text ends
> end main_
Люди умные подскажите 15.10.01 11:45  
Автор: Chingachguk <Chingachguk> Статус: Member
<"чистая" ссылка>
Попробуй int 2eh !
> Сделал небольшую прогу - она должна запускать программу в
> зависимости от некоторых условий. Работает только как-то
> непонятно.
Насколько я понял, ты хочешь запускать внешнюю прогу. Но !

- Не забывай, что программе (твоей) отводиться ВСЯ память (не тока 64K) вплоть до 640K - Поэтому перед запуском ее неплохо было бы освободить(ф-ции 4ah):
.286
NewProgramSize equ 1000h
text segment byte public
assume cs:text,ds:text
org 100h
begin:
mov sp,NewProgramSize
mov ah,4ah
mov bx,sp
inc bx ; bx = NewSize + 16 bytes, es=Our PSP
int 21h
jnc @RunProg
call @Error
jmp short @Exit
@RunProg:
- К тому же вместо стандартных досовых ф-ций запуска программ рекомендую использовать прерывание 2eh. Почему ? Потому, что для стандартных ф-ций надо настраивать окружение дочерней программы итд, что не вызывает желания потратить кучу тайма на изучение всего этого... Вот как я запускаю внешнюю программу интом 2eh:
@RunProg:
mov si,offset CMD
; ds:si = to command line (смотри ниже)
pusha
push ds
push es
; Сохранили все регистры
mov word ptr cs:@SS+1,ss
mov word ptr cs:@SP+1,sp
; После вызова int 2eh даже стек будет разрушен !!!
int 2eh ; Выполнить внешнюю прогу, не загружая копию command.com
@SS: mov ax,0000h ; Здесь будет mov ax,Твой сегмент стека
mov ss,ax
@SP: mov ax,0000h ; А здесь - твой sp
mov sp,ax
; Теперь со старого стека восстанавливаем твои регистры
pop es
pop ds
popa
; А теперь маленькая тонкость !!! После выполнения программы управление передасться command.com !!! И тебе надо будет написать ему EXIT, чтобы работать дальше ... Ну так сделаем это :
mov si,offset Keys
call PutKeys
;...
PutKeys proc near
cld
@Key:
lodsw
test ax,ax
jnz @NoEnd
retn
@NoEnd:
mov ah,05h
int 16h ; Положим в буфер клавы клавиши ...
jmp short @Key
PutKeys endp
; Что-то типа ASCII-Z строки
Keys db 'e',12h,'x',2dh,'i',17h,'t',14h,0dh,1ch,0,0
; Собственно, CMD
CMD db 8,'test.bat',0dh ; Типа pas-строки, в конце обязательно код 0dh,
; В начале длина команды в байтах.
; Так что можешь запускать не тока com, но и bat -файлики ;

Chingachguk.
[ASM] Попробуй настрой DS 15.10.01 09:43  
Автор: Cyril <sc> Статус: Member
<"чистая" ссылка>

> text segment 'code'
> assume cs:text,ds:text
> org 100h
>
> main_ proc

PUSH CS
POP DS

> mov ah,4ah
> mov bx,100
> int 21h
[ASM] Попробуй настрой DS 15.10.01 11:47  
Автор: Chingachguk <Chingachguk> Статус: Member
<"чистая" ссылка>
Вроде в com - прогах DS всегда вначале равен CS ? ;)))
[ASM] А это смотря что построить :-) 15.10.01 19:41  
Автор: Cyril <sc> Статус: Member
<"чистая" ссылка>
Спасибо всем за советы 16.10.01 08:34  
Автор: J Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Короче я стормозил - напрасно ваше время только отнял.
Надо было полный путь указать к файлу - и все заработало.
Спасибо всем за советы 16.10.01 09:09  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
> Короче я стормозил - напрасно ваше время только отнял.
> Надо было полный путь указать к файлу - и все заработало.

да ну мелочи 5 минут и все дела
а интересно мне стало кстати потому что я в свое время кодил прогу по заказу одной биржи - слежка за сотрудниками, кто какие проги запускает и т.п. и помню что COMMAND.COM при работе AUTOEXEC.BAT и в шелле по-разному работает немного ну и думаю - может чел нарвался на эту ситуевину, так он тут засядет, там противная отладка т.к. только на загрузке можно ловить, но у тебя все обошлось
успехов!
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach