Kezdőoldal » Számítástechnika » Programozás » Ismer valaki olyan Assembler...

Ismer valaki olyan Assembler példakódot x86-os PC-re DOS vagy WinXP-Win7 alá, amivel Flash adathordozón (pl. PenDrive) szektoros eléréssel lehet írni viszonylag gyors elérési sebességgel?

Figyelt kérdés

Ahhoz kéne, mivel jól jönne majd egy olyan program, amivel saját USB-t tetszőlegesen bármennyiszer felülírhatok - értelemszerűen biztonságos törlésre -, viszont nem nagyon tudok ilyen már meglévő ingyenes programról, így az lehetne egy megoldás, hogy magam megcsinálom.


C#-on megírtam egy ilyet API-t használva ("CreateFile"-t használva a fizikai lemez elérésére), viszont az marha lassú volt, hiába használtam optimalizált eljárást az írásra, így is kb. 100 KB/sec. sebesség volt a max., több óra volt, mire egy 1 GB-os PenDrive-on végigment - igaz, USB1 porton, de szerintem ez ott is lassúnak mondható, egy fájl átmásolása is látványosan gyorsabb volt.


Ezért gondoltam, hogy célszerűbb Assembly-ben megírni, de egyenlőre még nem találtam neten anyagot, amiből ki tudnék indulni. Illetve fájlba írásra persze tudok kódot Win-re, de szektoros elérésre nem, főleg úgy, hogy gyors is legyen.

Ha esetleg valaki tudna ilyet, akár FASM, MASM, vagy bármilyen más assembly szintaxisban, nagyon megköszönném, mert akkor Sphinx C-- -ban már neki tudnék látni.

Az sem gond, ha csak DOS alól működik. Az adathordozó természetesen mindig külső lenne, tehát nem célom, hogy vírust csináljak belőle.


Előre is köszönöm!



2013. jún. 12. 00:36
1 2
 1/11 anonim ***** válasza:

A vindows-ok nem nagyon fogják hagyni, hogy közvetlenül férj hozzá a meghajtóhoz, DOS alatt meg finoman szólva körülményes lehet az USB-s meghajtóra alkotni.

Ezzel még tehetnél próbát: [link]

Egy binárisan egyesekből álló kép, majd egy nullákból és akkor jó eséllyel nem hozol vissza adatot arról a pendrive-ról.

Viszont az 1 GB-os pendrive nem egy drága dolog, inkább égesd el. Gyorsabban megvan. :-]

2013. jún. 12. 20:51
Hasznos számodra ez a válasz?
 2/11 A kérdező kommentje:

Háááát.... az a helyzet, hogy én is gondoltam ilyesmire... tényleg megfordult a fejemben ez, amikor keresgéltem, hogy esetleg egy képfájlíróval.....

Csak hát egyrészt kb. 0% elegancia van a dologban, másrészről pedig tényleg jó lenne, ha magam tudnám "paraméterezni" a dolgot, márcsak azért is, mert jobb érzéssel töltene el, ha valóban úgy és olyan paranoiás biztonsággal nyírom ki a kompromittáló adataimat a PenDrive-ról, ahogy csak akarom.


Egyébként C#-ból viszonylag könnyen hozzá lehet férni a nem OP-rendszeres meghajtókhoz, csak rohadt lassú.

De azt sem értem, hogy külső adathordozót miért védi annyira a Windows. Egyébként is, jelentett VALAHA nehézséget a Windows védő szelleme a vírusok számára ?! :/

2013. jún. 13. 00:11
 3/11 anonim ***** válasza:

Ha van paranoia, az elegancia szvsz nem lényeg. :-]


Mi volt az optimalizált eljárás az írásra? Egy menetben több adat?


Találtam ilyet: [link]

A C# Nekem távoli, de ha rosszat is linkeltem, valahol az oldalon kell lennie megoldásnak a problémádra, mivel innen találtam oda: [link]

Hátha lenne némi teljesítménye így...


Ha nem jön be, marad a C#-ban megírt GUI a Physdiskwrite -hoz :-D

2013. jún. 13. 00:43
Hasznos számodra ez a válasz?
 4/11 anonim ***** válasza:

A windows nem véletlenül védi a külső meghajtót a direkt írástól. A driverekből két féle van egy meghajtóból.

Az egyik típusa: a egy "normál" driver, ami a cpu használatával másolt adatot a winchesterről.

A másik pedig az úgynevezett Direct Memory Acces használatával, azaz a külső/ belső meghajtó saját cpujával közvetlenül írt a számítógép memóriájába

A DMA móddal való írást a windows a lehető legtöbször akarja kerülni. A DMA mód sokkal gyorsabb mint a normál írási lehetőség, bár biztonsági kockázatot is jelent.

Ha pl. valaki megberhel,egy pendrive-ot, és megoldja, hogy pl. írjon a pendrive a kernel módbeli területekre, ahol a windows adatai tárolódnak, akkor a DMA mód miatt ez engedélyezetté válik, noha

2013. jún. 13. 10:52
Hasznos számodra ez a válasz?
 5/11 anonim ***** válasza:

Folytatás ( véletlenül kattintottam az elküldés gombra)

így akár a windows jelszót is lehet módosítani.

A thunderbird portal csináltak egy csúnya hackelést, gyak egy titkosított fájlrendszer jelszavát is kiszedték a memóriából vele, szal ez létező fenyegetés. Direkt USB-s kábellel is meg lehet elvben csinálni. Emiat a windows kerüli a DMA módot, bár registryben ennek ellenére, be lehet kapcsolni a DMA engedélyezését.

2013. jún. 13. 10:54
Hasznos számodra ez a válasz?
 6/11 A kérdező kommentje:

Hát, az első linkel még nem találkoztam, de így rálátásra ömlesztve van minden összedobálva, nem tudom, hogy van-e új köztük.


A második linkel viszont 1részt nem most találkozok előszőr, 2részt nem jelent igazán újdonságot. Ugyanúgy olyan API-s megoldásról írnak, mint amit én alkalmaztam.


Én egyébként, mint említettem, a CreateFile API-val értem el a drive-ot, és az írásra is egy API-s megoldást kerestem netről, ami a tesztek szerint a leggyorsabbnak bizonyult. Egyébként meg 1 MB-os darabokban írtam.

A linkre még lehet, rá tudok keresni, de a kódot - habár szívesen mellékelném - már nem tudom, mert egy viszonylag régi gépen írtam, amin USB-n és Floppy-n kívül nem volt más hordozható adatolvasó, az OP rendszer meg sajnos behalt rajta, így nem tudok semmit kezdeni vele - nem tudok telepítőt/javítót bootolni róla -, és egyenlőre a merevlemezt se tudom máshova berakni, mivel ATA csatlakozású, és már sajnos mindenhova csak SATA csatlakozót építenek be. =(


Viszont közbe az is eszembe jutott, hogy ASM-nél ahhoz is kéne kódot keresni, hogy lekérdezzem a drive VALÓS méretét.

Mert a C#-os kódnál egyszerűen úgy csináltam, hogy addig ment while(true) ciklusban az írás, ameddig tudott, és amikor hibát észlelt, kikapcsolt. Viszont sejtésem szerint ASM-be már nem ilyen "szelíd" a hibamegszakítás, nemde?

2013. jún. 13. 10:57
 7/11 A kérdező kommentje:

"registryben ennek ellenére, be lehet kapcsolni a DMA engedélyezését"


Szóval először a DMA módot kéne bekapcsolni registry-ben a kóddal, aztán megoldást találni a DMA írásra? Ennek most akkor továbbra is ASM-ben kéne utánanézzek, vagy térjek vissza C#-ra?


Az természetesen nem gond, ha netán vírusírtó jelez registry miatt, mert értelemszerűen én felügyelem a programot, így azt a gépet is, amiben registry módosítás történik, úgyhogy ha ez tényleg a kellő gyorsaságot tudja, akkor egész jó megoldásnak tűnik.


Egyébként ez a DMA mennyiben különbözik a BIOS írási utasításainak használatától? (bár tudtommal utóbbit a Win szinte egyáltalán nem hagyja)

2013. jún. 13. 11:05
 8/11 A kérdező kommentje:

"Folytatás ( véletlenül kattintottam az elküldés gombra)"


Nem baj, legalább egy jó kommenthez két zöld kezet kapsz... XD XD XD

;)

2013. jún. 13. 11:07
 9/11 anonim ***** válasza:

Előbb válaszoltam a windows-os kérdésre, most pedig válaszolok a tényleges kérdésre.


A c# a .NET keretrendszert használja. Emiatt az lassabb mint a normál .exe-re fordító programnyelveknél.


Próbáld meg a c++-t az biztos, gyorsabb lesz főleg az o2-s direktívával fordítod. Elég jól tudja optimalizálni a kódot. A szintax ugyanaz, és próbáld meg először ugyanaz a programot, amit a c#-ban fordítottál c++-ra átportolni. A szintax ugyanaz, és ha API-t használtál, akkor a valszeg a függvény még ugyanaz is lehet mint a windows-os.


Az assambly programnyelven memóriáti írni szerintem egy kicsit erős megoldás lehet őszintén szólva lehet le tudod valahonnan szedni a netről, a kódot, de enyhén nehéz megoldani szerintem a dolgot, amit te szeretnél. Főleg, hogy BIOS-os hívást nem használhatsz windows operációs rendszer mellett.



A DMA mód: a dma-l az eszköz adatátviteli képességét hasznlája ki a rendszer, elvben ki lehet vele tolni a full-os usb 1.1-es szabvány maximális sebességét, a dma módhoz elvben itt van egy kód:

[link]


( Ez normál winchesterre van, usb-re át lehet írni ugyanúgy. csak megfeleő címet és hexaértéket kell használni.


Próbáld meg és fordítsd ezt is o2-es direktivával.


Akkor szükség esetén ha még nagyobb adatátviteli sebességet akarsz elérni akkor keress a neten egy usb drivert, és nézd meg mi van benne. Aztán ha találsz véletlenül optimalizálandó részt, vagy netalán közvetlen a driverbe teszel bele kódot amit egy saját dll-ből tudsz hivogatni, akkor azzal elég kemény átviteli sebességet tudsz elérni. ( windows driver kit-et nézd meg, aztán meg

Ehhez segédanyag:

[link]


A driver kit-et meg

[link] innen tudod letölteni.


Utóbbi megoldás c nyelven van. De szerintem tuti ki lehet belől csiholni a lehető legtöbbet, főleg ,ha az usb drivert tudod közvetlenül a windows nélkül használni.

2013. jún. 13. 11:54
Hasznos számodra ez a válasz?
 10/11 A kérdező kommentje:

Úúú, köszönöm a kimerítő válaszodat!!!

Igyekszem mindegyiket átvizslatni. Bár bevallom, driverekkel eddig még nem igazán szórakoztam, dehát úgyis sejtettem, hogy ez a feladat nem lesz olyan könnyű... majd igyekszem. ;)

2013. jún. 13. 12:03
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!