информационная безопасность
без паники и всерьез
 подробно о проекте
Все любят медГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Модульный ботнет от русских хакеров 
 Торвальдс и вайбтестеры 
 Атака на GitHub 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[ASM] Попробуй настрой DS 15.10.01 11:47  Число просмотров: 1031
Автор: Chingachguk <Chingachguk> Статус: Member
<"чистая" ссылка>
Вроде в com - прогах DS всегда вначале равен CS ? ;)))
<programming>
Люди умные подскажите 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





Рейтинг@Mail.ru


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