Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se narodil známý fotograf František Drtikol?

V dnešní soutěži hrajeme o:



načítanie postupnosti znakov

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: načítanie postupnosti znakov

Autor: Mi.Chal

18:39:35 10.09.2011

doesntmatter Napsal:
-------------------------------------------------------
> No, ja som v tom, že v ASM môžem priamo
> pristupovať do pamäte ľubovoľného procesu (stačí
> mi poznať fyzickú adresu pamäte), alebo sa mýlim a
> je potrebné v ASM tiež volať win32 obslužné
> funkcie typu ReadProcessMemory?

on uz ti odpovedel Maaartin. Jde o to, ze pod bezne pouzivanymi OS nelze bezne z jednoho procesu cist pamet v jinem procesu, tohle je funkcionalita CPU typu x86 bezicimi v protected modu. Cist to muze proces s odpovidajicim opravnenim, coz bude v praxi akorat tak jadro OS nebo ovladac. Toto omezeni se samozrejme tyka i ASM, u beziciho procesu se nijak nerozlisuje, v jakem jazyce byl jeho program napsan. Takze musis pouzit API OS.

Citovat příspěvek

 

Re: načítanie postupnosti znakov

Autor: Maaartin

16:53:57 10.09.2011

> [ital]No, ja som v tom, že v ASM môžem priamo pristupovať do pamäte ľubovoľného procesu (stačí mi poznať fyzickú adresu pamäte), alebo sa mýlim[/ital]

No samozrejme, procesy jsou mezi sebou chraneny a pristup k jinymu musi jit pres OS. V tomhle ASM zadnou vyhodu oproti cecku nema, pristup na fyzikou adresu AFAIK vubec neni mozny, je treba si pamet vhodne namapovat a k tomu jsou potreba prava.

> [ital]Toto riešenie je zbytočne neefektívne a navyše neošetruje prípad, ak je postupnosť znakov dlhšia ako 500 znakov.[/ital]

Ten lze lehce poresit tim ze v takovym pripade budes cist dal. Namisto 500 znaku bych jich mozna nacetl min, tak aby to vetsinou stacilo, a pripadne cetl dal. Pokud vis jak dlouho co trva a jaky je rozlozeni delek, taxe to da spocitat. Jinak je to treba vyzkouset.

> [ital]Ak navyše túto funkciu volám v programe napríklad 20x tak sa musí v pamäti presúvať až 3MB údajov (300*500*20 znakov)[/ital]

A to za celou dobu behu programu? Kolik to celkem trva, milisekundu? Jak dlouho bezi program? O kolik desetin promile by se zrychlil kdyby ten presun byl okamzity?

Citovat příspěvek

 

Re: načítanie postupnosti znakov

Autor: doesntmatter

16:23:04 10.09.2011

No, ja som v tom, že v ASM môžem priamo pristupovať do pamäte ľubovoľného procesu (stačí mi poznať fyzickú adresu pamäte), alebo sa mýlim a je potrebné v ASM tiež volať win32 obslužné funkcie typu ReadProcessMemory?

V mojom prípade funkcia ktorú používam teraz volá v cykle ReadProcessMemory asi 300x a vzhľadom na to, že nepoznám presnú dĺžku reťazca ktorý načítavam (reťazec má zvyčajne iba niekoľko málo bytov) tak musím pri každom volaní ReadProcessMemory ťahať z pamäte 500 bytové bloky a z nich následne zisťovať dĺžku postupnosti znakov, ktorú potrebujem. Toto riešenie je zbytočne neefektívne a navyše neošetruje prípad, ak je postupnosť znakov dlhšia ako 500 znakov. Ak navyše túto funkciu volám v programe napríklad 20x tak sa musí v pamäti presúvať až 3MB údajov (300*500*20 znakov), pritom potrebné reťazce majú spolu možno 10KB.

Citovat příspěvek

 

Re: načítanie postupnosti znakov

Autor: Mi.Chal

15:58:44 10.09.2011

doesntmatter Napsal:
-------------------------------------------------------
> Vstupom funkcie je ľubovoľná adresa pamäte
> (prípade aj HANDLE procesu v ktorej sa daná adresa
> nachádza). Funkcia prečíta z tejto adresy
> postupnosť znakov, čítanie sa zastaví po prečítaní
> dvoch po sebe idúcich nulových znakov

a jak to precte, pokud nema pouzivat ReadProcessMemory? Pokud ma, tak je pak celkem jedno, jestli to bude v asm nebo necem vyssim

Citovat příspěvek

 

načítanie postupnosti znakov

Autor: doesntmatter

14:29:50 10.09.2011

Zdravím,
s ASM kódom si veľmi nerozumiem, potreboval by som v c++ programe prepísať jeden úsek kódu do ASM, pretože v súčasnosti ho riešim dosť neefektívne pomocou volaní win32 funkcie ReadProcessMemory.


Vstupom funkcie je ľubovoľná adresa pamäte (prípade aj HANDLE procesu v ktorej sa daná adresa nachádza). Funkcia prečíta z tejto adresy postupnosť znakov, čítanie sa zastaví po prečítaní dvoch po sebe idúcich nulových znakov. Následne sa naalokuje pamäť v aktuálnom procese a prekopíruje sa do nej prečítaná postupnosť znakov. Funkcia vráti pointer na virtuálnu adresu vo vlastnom procese.


Nemalo by to byť zložitá záležitosť, nenapísali by ste mi prosím niekto ASM kód tejto funkcie? Pomocou manuálu by som to možno nejako do ASM spráskal aj sám, ale moje riešenie by asi nebolo o moc efektívnejšie od toho, ktoré používam teraz.

Vďaka.

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: