Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как открыть оди exe через второй 
:(
    Опции темы
DIP
Дата 3.11.2011, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 3.11.2011

Репутация: нет
Всего: нет



Здраствуйте, мне нужна помощь по такой теме, например есть файлик 1.exe, его нужно открыть через другой, допустим создали 2.asm и после некоторых комбинаций появился 2.exe и после запуска 2.ехе откроеться 1.ехе, грубо говоря нужно открыть 1.exe через 2.exe, как ето можно организовать? smile 

Это сообщение отредактировал(а) DIP - 3.11.2011, 21:03
PM MAIL   Вверх
vol4ek
Дата 3.11.2011, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



может запустить надо?

Добавлено через 33 секунды
какой asm?
PM MAIL ICQ   Вверх
iff
Дата 3.11.2011, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



Да. В какой операционной системе?
Если в ДОС, то см. функцию 4Bh прерывания 21h.


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
vol4ek
Дата 3.11.2011, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



если windows можешь API  CreateProcess() или WinExec()

Добавлено через 1 минуту и 44 секунды
iff, что это?


DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  smile 
PM MAIL ICQ   Вверх
DIP
Дата 4.11.2011, 02:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 3.11.2011

Репутация: нет
Всего: нет



это все в ДОСе и если можно,можно показать кусок программы который ето все делает (находит и виводит на экран этот файл), ну просто недоходит как это smile 

Это сообщение отредактировал(а) DIP - 4.11.2011, 02:39
PM MAIL   Вверх
iff
Дата 4.11.2011, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



Цитата(vol4ek @  3.11.2011,  21:54 Найти цитируемый пост)
iff, что это?


DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.    

Это оффтоп!  smile  smile 
--------------------
Цитата(DIP @  4.11.2011,  02:28 Найти цитируемый пост)
виводит на экран этот файл

Так вам нужно запустить 1.exe через 2.exe или нужно вывести (двоичный код) файла 1.exe через 2.exe?
Если всё таки запустить, то переходим по второй ссылке на странице http://yandex.ru/yandsearch?text=4bh+int+2...0316&lr=213 и получаем пример:
Цитата

3.4. Запуск программ из программ
Ваша программа может при необходимости запустить другую exe- или com-программу. 

Программа, составленная на языке ассемблера, запускает другую программу с помощью функции 4Bh прерывания INT 21h . Для выполнения той же задачи из программ, составленных на языке С, следует использовать разнообразные функции, входящие в состав стандартной библиотеки системы разработки. 

Сначала рассмотрим процедуру запуска программы при помощи функции 4Bh прерывания INT 21h . 

Перед вызовом прерывания вы должны загрузить регистры процессора следующим образом:

Регистр Содержимое 
AH 4Bh 
AL Код подфункции (0, 1, 2, 3, 5)  
DS:DX Указатель на текстовую строку в формате ASCIIZ , содержащую путь к запускаемой программе  
ES:BX Указатель на блок параметров EPB  

После возврата из прерывания флаг переноса CF устанавливается в 0, если ошибок не было, и в 1 - при обнаружении ошибок. Если произошла ошибка, ее код записывается в регистр AX:

Код ошибки Описание 
1 Неверный код подфункции 
2 Не найден файл запускаемой программы  
3 Указанный путь не найден  
4 Слишком много открытых файлов  
5 Нет доступа 
8 Нет памяти для загрузки программы  
10 Длина блока среды больше 32 Кбайт  
11 Неправильный формат запускаемого exe-файла  

Функция 4Bh прерывания INT 21h имеет несколько подфункций: 


Код Описание 
0 Загрузить и выполнить программу  
1 Загрузить, но не выполнять программу  
2 Загрузить, но не выполнять программу (недокументированная подфункция)  
3 Загрузить программу как оверлей (не создавая при этом блок PSP )  
5 Подготовить программу для выполнения  

Опишем эти подфункции более подробно. 

Загрузка и выполнение программы
Для функции 0 регистры DS:DX должны указывать на полный путь запускаемой программы в формате ASCIIZ (т. е. на текстовую строку, закрытую двоичным нулем). Блок параметров EPB (Exec Parameter Block ) в этом случае имеет следующий формат:


Смещение, байт Размер, байт  Имя поля Описание 
0 2 seg_env  Сегментный адрес среды, которая создается родительской программой для запускаемой программы. Если в этом поле находится 0, то для запускаемой программы копируется среда родительской программы  
2 4 cmd Дальний адрес строки параметров для запускаемой программы. Эта строка должна иметь такой же формат, как и в PSP , т. е. в начале строки находится байт со значением, равным количеству символов в строке параметров, а затем - сама строка параметров  
6 4 fcb1 Адрес блока FCB . Этот адрес будет записан в блок PSP со смещением 5Ch  
10 4 fcb2 Адрес блока FCB . Этот адрес будет записан в блок PSP со смещением 6Ch  

Запущенной программе доступны все файлы, открытые родительской программой. 

Если родительская программа сама формирует среду для дочерней программы, она должна подготовить новую среду на границе параграфа и поместить значение сегментного адреса в поле seg_env блока EPB . 

Для примера приведем исходный текст простой программы SPARM (листинг 3.5), которая запускает программу с именем parm.com из текущего каталога. Программу parm.com мы уже рассматривали (листинг 3.2). Эта программа выводит на экран параметры, полученные ей при запуске через командную строку. 


--------------------------------------------------------------------------------

Листинг 3.5. Файл sparm\sparm.asm 


--------------------------------------------------------------------------------

  .MODEL  tiny
  DOSSEG
  .DATA

path         db "PARM.COM",0
command_line db 11,"Parm1 Parm2"
epb          dw 0
cmd_off      dw ?
cmd_seg      dw ?
fcb1         dd ?
fcb2         dd ?

  .CODE
  .STARTUP
;
; Освобождаем лишнюю память за концом программы
;
  mov     bx, OFFSET last ; смещение конца программы

  mov     cl,4    ; вычисляем длину программы в параграфах
  shr     bx,cl

  add     bx,17   ; добавляем 1 параграф для
                  ; выравнивания и 256 байт для стека

  mov     ah, 4Ah ; изменяем размер выделенного
  int     21h     ; блока памяти

  mov     ax,bx   ; устанавливаем новое значение
  shl     ax,cl   ;  для указателя стека
  dec     ax
  mov     sp,ax

  mov     bx,OFFSET command_line ; адрес командной
  mov     cmd_off,bx             ; строки для блока EPB 
  mov     cmd_seg,ds

  mov     ax,ds
  mov     es,ax

  mov     bx, OFFSET epb  ; ES:BX указывают на EPB 
  mov     dx, OFFSET path ; DS:DX указывают на путь
                          ; к файлу запускаемой программы

  mov     ax, 4B00h      ; AH = 4Bh
                         ; AL = 0 загрузить и выполнить
  int     21h
  .EXIT   0

last:   db ?
END

--------------------------------------------------------------------------------

Программа SPARM освобождает всю неиспользуемую ей память, после чего на освободившееся место загружает программу parm.com. Такая процедура необходима потому, что MS-DOS выделяет всю имеющуюся память в распоряжение запускаемой com-программы. Поэтому при попытке запустить программу без предварительного освобождения части памяти функция 4Bh вернет код ошибки 8 (нет памяти для загрузки программы). 

Для изменения размера блока памяти, выделенного программе, мы использовали функцию 4Ah прерывания INT 21h . 



--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
DIP
Дата 4.11.2011, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 3.11.2011

Репутация: нет
Всего: нет



при компиляции tlink.exe файл.obj выдается следующее сообщение:
Warning: No stack
 smile 
PM MAIL   Вверх
iff
Дата 4.11.2011, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



Во первых это всего лишь предупреждение (переведите сообщение на русский язык), а не ошибка, а вызвана она потому что в примере не объявлен стек (можете его объявить сами).
А ещё вроде как там используются макросы .STARTUP и .EXIT, которые в самой программе не объявлены...
Попробуйте этот пример:
Код

 .model small
    .stack 64
    .data
pararea label byte
    dw 0
    dw offset dircom
    dw @data
    dw offset fcb1
    dw @data
    dw offset fcb2
    dw @data

    dircom   db 17,'/c dir c:',13,0
    fcb1     db 16 dup(0)
    fcb2     db 16 dup(0)
    progname db 'c:\windows\system32\command.com',0
    .code
;-----------------------------------
a10main proc
   mov ah,4ah
   mov bx,stack
   add bx,04
   mov cx,es
   sub bx,cx
   int 21h

   jc a20err
   mov ax,@data
   mov ds,ax
   mov es,ax

   mov ah,4bh
   mov al,00
   lea bx,pararea
   lea dx,progname
   int 21h

   jc a30err
   mov al,00
   jmp a90xit

a20err:
   mov al,01
   jmp a90xit

a30err:
   mov al,02

a90xit:
   mov ah,4ch
   int 21h

a10main endp
    end a10main


Это сообщение отредактировал(а) iff - 4.11.2011, 18:23


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0464 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.