Programatorská rada s DOSem :)

HackForum

Programatorská rada s DOSem :)#
Servus,
chtěl bych se zeptat jestli je možné přímo nebo nepřímo spouštět v DOSu programy s jinou koncovkou než EXE a COM nebo třeba bez koncovky. Třeba mám NECO.EXE, je tam hello world, skompilovanej, jako exe spustitelnej. Přejmenuju ho na NECO.BLB, nebo prostě bez koncovky NECO, a spustit pochopitelně nejde. Chtěl bych se zeptat jestli toho jde nějak docílit, třeba nahrát soubor do paměti a JMPnout se na něj, rozhodně nechci něco typu

rename NECO.BLB NECO.EXE
NECO.EXE
rename NECO.EXE NECO.BLB

Vím že to asi příkazem nejde, ale třeba naprogramovat program (v C) kterej by to spouštěl, nějak.. Nějaké rady? :)

----------
..:@]> [link] <[@:..
(odpovědět)
DjH | E-mail | Website | ICQ 319-960-8957.7.2008 22:35
re: Programatorská rada s DOSem :)#
Pokud chces, aby ti to poustelo soubory i s jinou koncovkou, tak zmen prommenou PATHEXT. Normalni hodnota je neco jako:
.COM;.EXE;.BAT;.CMD
takze to uprav (pomoci set pathext=%pathext%;.BLB) na
.COM;.EXE;.BAT;.CMD;.BLB
Potom pokud pri spousteni napises jmeno souboru bez koncovky a on najde soubor s priponou BLB, spusti jako by to byl spustitelnej soubor.

----------
public static void main(String args[]){
 throw new UnsupportedOperationException("Not implemented!");
}


(odpovědět)
pr0ph3t7.7.2008 23:42
re: Programatorská rada s DOSem :)#
... nebo ukazka spusteni v c (tusim, ze by melo jit ikdyz nema koncovku exe)

#include <process.h>
#include <stdio.h>
#include <conio.h>

int main(void)
{
int result;

clrscr();
result = spawnl(P_WAIT, "tcc.exe", NULL);
if (result == -1)
{
perror("Error from spawnl");
exit(1);
}
return 0;
}

... zkomipovat se da na 100% ve starym borlandu c
(odpovědět)
petrof | E-mail | Website | ICQ 4178685778.7.2008 0:00
re: Programatorská rada s DOSem :)#
spawnl, funguje, diky moc :))

----------
..:@]> [link] <[@:..
(odpovědět)
DjH | E-mail | Website | ICQ 319-960-8959.7.2008 17:05
re: Programatorská rada s DOSem :)#
myslím, že to dělá command.com, ten test na .com a .exe (projde nejdřív interní příkazy, pak zda zadaný příkaz neodpovídá některému .com souboru, pak se testují .exe - takže blb.com a blb.exe - po zadání blb se vždy pustí .com.
Stačilo by si test přepsat třeba na jinou přípomu (.blb). DOS sám vzhledem k existenci těchto testů jinak souštění souborů s jinými příponami tudíž jaksi neumožňuje.
Nahráním souboru do paměti a jumpnutím by se určitě spustil. Koneckonců ten command.com nic jiného s .com ani .exe nedělá.
.COM se prostě nahraje na adresu (ofset) 0x100 daného segmentu dle nastavení segment registrů (a skočí se na jeho začátek (0x100), hranice segmentu nepřekračuje. Hlavičku pokud vím nemá, takže to je jednoduché.
.EXE vyžaduje nejdřív rozebrat hlavičku, podle údajů v ní pak soubor (tedy jeho zbytek bez hlavičky) nahrát, relokovat a spustit - [link] , [link] .
(odpovědět)
gugumaa | 85.160.45.*8.7.2008 0:07
re: Programatorská rada s DOSem :)#
Tyjo, než jsem to nadatlil, poslal petrof dva příspěvky...
(odpovědět)
gugumaa | 85.160.45.*8.7.2008 0:07
re: Programatorská rada s DOSem :)#
jenom mensi info, DOS nema "interni prikazy" :). Kdyz zadas treba format , dir atd. koukne se napred do "includovane" slozky jestli tam takova app je a pokud ano tak spusti ji :). Proc myslis ze slo odkudkoliv napsat win ? :)

----------
[link]
(odpovědět)
Subber | E-mail | Website | ICQ 3427646918.7.2008 7:18
re: Programatorská rada s DOSem :)#
kua, me to po ranu nemysli.... Nahradte si prosim cast

Kdyz zadas treba format , dir atd. koukne se napred do "includovane" slozky jestli tam takova app je a pokud ano tak spusti ji :).

timto

Prikazy jako format , dir atd. se provadeji protoze DOS napred kouka do "includovane" slozky ( urcene v autoexecu ) a pokud najde soubor s nazvem co jsi zadal (format.exe , ... ) , dale nepokracuje :)

----------
[link]
(odpovědět)
Subber | E-mail | Website | ICQ 3427646918.7.2008 7:22
re: Programatorská rada s DOSem :)#
- myslim, ze tvuj problem nijak nesouvisi s denni dobou
- DOS (command.com) samozrejme interni prikazy ma. napriklad zrovna ten dir, ktery dulezite uvadis, je jeden z nich ;)
- nic jako "includovana" slozka neexistuje. je to seznam adresaru pro vyhledavani spustitelnych souboru a nastavuje se v promenne PATH ;)

(odpovědět)
prc | 213.211.51.*8.7.2008 10:08
re: Programatorská rada s DOSem :)#
Jak jednoduse a bez zbytecnych vulgarit z nekoho udelat naprostyho vola :)

----------
public static void main(String args[]){
 throw new UnsupportedOperationException("Not implemented!");
}


(odpovědět)
pr0ph3t9.7.2008 1:46
re: Programatorská rada s DOSem :)#
pokud myslis puvodni DOS, tak kernelu (int 21h) je jedno, jakou priponu ten soubor ma.
shell (command.com) to co neni interni prikaz ani makro zkusi najit na disku a jine pripony nez com/exe/bat nespusti.

pokud myslis "ten dos ve windows :)", tak pokud zadas cely nazev, tak by se to melo bez problemu spustit, jinak muzes tu priponu pridat do pathext.

v pripade klasickeho programoveho reseni spousteni neni co resit. a co se tyce vlastni implementace natazeni programu, tak na tom taky nic neni, dokumentace struktury spustitelnych souboru a zpusob jejich nacitani je volne k dispozici (i kdyz nektere casti jsou uplne jasne az pri nekolikatem cteni a hledani co mas blbe :)).

(odpovědět)
prc | 213.211.51.*8.7.2008 6:55
re: Programatorská rada s DOSem :)#
dik, presne toto mi pomohlo, spusteni pres int 21h, to me nenapadlo, vyzkousim, a pak te mozna i pochvalim ;)))

----------
..:@]> [link] <[@:..
(odpovědět)
DjH | E-mail | Website | ICQ 319-960-8958.7.2008 10:30

Zpět
 
 
 

 
BBCode