Mala pomoc u c

6

Mala pomoc u c

offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

Bez ulazenja u detalje kako rade te "mapPhys" funkcije, mozes ovako da uradis, malo izmenis funkciju:
void memStreamPhysStore(unsigned int paddr, unsigned char* from, unsigned int size) {     while (size) {         unsigned char *vaddr = memPhysMap(paddr);         unsigned int bytes = PHYS_CACHE_SIZE - (PHYS_CACHE_MASK & (unsigned int)vaddr);         if (bytes > size)             bytes = size;       memcpy(vaddr, from, bytes);         size -= bytes;         paddr += bytes;     } }

i onda tamo:

unsigned int size = sizeof(fajl) / sizeof(fajl[0]); memStreamPhysStore (addr, fajl, size);

Koje informacije, odnosno sta sadrzi tih 96 bajta?



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 15 Jul 2009
  • Poruke: 150

Napisano: 26 Feb 2012 17:16

Hvala ti, pokusao sam isto tako kao sto si napravio, medjutim stavio sam samo sizeof(fajl) bez onog "kroz" i nije htelo da radi verovatnosto nisam i to dodao. Niz onaj sam bezveze stavio, niz je od 512kb i u njemu je binarni fajl koji treba da se pokrene u memoriji kada pokrenem exe koji pravim... pokusacu ponovo pa javim! Dali mozda znas kako i u kom je formatu slican binarni fajl koji je u samom exe smesten isto tako kao sto ja pokusavam da napravim, exe sam dekompilovao, medjutim taj binarni fajl je "stripovan" prilikom kompilacije samog programa ili mozda kompresovan, mada ne verujem da je kompresovan jer u hex editoru vidim delove koji mogu da se procitaju samo sto neki delovi su nerazumljivi sto mi vise lici na strip... znaci dali mogu da izbacim taj isti bin i ubacim moj bin i kako da napravim isti format? Exe nije zapakovan upx-om niti bilo kojim drugim pakerom i sve funkcije su na raspolaganju u ida, samo ne razumem zasto je binarni fajl "spakovan" i kako.

Dopuna: 26 Feb 2012 19:03

Huh, ne radi ovako! Mislim da je problem sto "trampoline" nije alocirana u smislu 512kb velicine binarnog fajla nego trampoline ustvari trazi svako prazno mesto i "filuje" memoriju po delovima gde je slobodna pa zato memcpy ne moze da radi jer alocira "odmah" ceo fajl i pokusava da ga smesti u memoriju koja se alocira "on the fly" u delovima pa samim time ovo ne funkcionise... treba nekako napraviti da streamuje iz niza kao sto to radi iz FILE*... dali postoji neka fora da cita fajl interno, da smestim fajl u exe i da ga citam sa fopen/fread? Ili mozda izmeniti:
       if (bytes > size)             bytes = size;       memcpy(vaddr, from, bytes);         size -= bytes;         paddr += bytes;     }
sa necim na primer na ovaj fazon:
void memStreamPhysStore(unsigned int paddr, unsigned char *from, unsigned int size) {     while (size) {         unsigned char *vaddr = memPhysMap(paddr);         unsigned int bytes = PHYS_CACHE_SIZE - (PHYS_CACHE_MASK & (unsigned int)vaddr);    int i = 0;         if (bytes > size)             bytes = size;         size -= bytes;         paddr += bytes;     i++;     memcpy(vaddr, from[i], size);     } }
od prilike znam zasto ne funkcionise mada nism dovoljno dobar u c da bi to zavrsio kako mislim



offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

Napisano: 26 Feb 2012 20:32

Da, imam gresku sa memcpy . Embarassed
Mora da se pomera pokazivac niza jer ne kopira sve odjednom, vec u "chunk"-ovima, tako da uvek kopira isti deo iz niza.
Cek da vidim kako to da resim. Embarassed

Dopuna: 26 Feb 2012 20:37

Mislim da ovo resava stvar:
void memStreamPhysStore(unsigned int paddr, unsigned char* from, unsigned int size) {     while (size) {         unsigned char *vaddr = memPhysMap(paddr);         unsigned int bytes = PHYS_CACHE_SIZE - (PHYS_CACHE_MASK & (unsigned int)vaddr);         if (bytes > size)             bytes = size;       memcpy(vaddr, from, bytes);         size -= bytes;         paddr += bytes;         from += bytes;     } }
znaci samo from += bytes; da se pomeri pokazivac na pravo mesto.

Ne mora da se deli ono to sam se ja zeznuo nesto dok sam probao nesto drugo. Embarassed
Mada nije bilo efekta jer sizeof(fajl[0]) == 1, tako da je isti rezlutat.
unsigned int size = sizeof(fajl);// ako je fajl niz! onda je ovo velicina u bajtima

offline
  • Pridružio: 15 Jul 2009
  • Poruke: 150

Bravo! Radi! Upravo sam na to mislio "pokazivac" ali posto sam samouk, niti znam da objasnim niti znam da napravim sam Smile, svaka cast! Naucim uvek nesto novo... HVALA TI PUNO! Dali znas nesto u vezi problema iz predhodnog posta u vezi bin fajla koji je u exe, patchujem jedan bootloader i sve uspesno ide, medjutim exe fajl koji treba da instalira modifikovani bootloader ima "spakovan" bin fajl koji ne kontam kako da raspakujem i spakujem drugi? Ovaj program koji sad pravim radi, ali nesto sto ima "onaj" exe nema ovaj sto sad radim, pa bi naj bolja kombinacija bila ova sa bin fajlom...

offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

Nazalost, ne znam kako bih modifikovao exe fajlove, nikad me nije interesovalo "krekovanje/pačovanje", tako da ne znam kako drze podatke, da li su kompresovani i sta vec ne...
Verovatno ima alatki po internetu da se skine koje olaksavaju posao, samo treba znati prave kljucne reci za pretragu. Confused

offline
  • Pridružio: 15 Jul 2009
  • Poruke: 150

Napisano: 26 Feb 2012 21:33

Ok, ok, hvala opet!

Dopuna: 02 Okt 2012 23:04

Pozz ...nasao sam jedan post i jedan php koji konvertuje onaj font header u png i tek sam vidim da pozadina ide bela a font crn... poceo sam opet da se igram sa recovery pa cu pokusati da napravim neki font cim uhvatim malo vremena. Php izgleda ovako:
<?php // by wkpark at gmail.com 2012/08/27 // read font header file like as font_10x18.h and generate 2-bit depth $fon = file_get_contents("font_7x16.h"); $lines = explode("\n", $fon); $f = ""; foreach ($lines as $line) {   if (preg_match("/^0x/", $line)) {     $f.= $line;   } else {     if (preg_match("/\.width\s*=\s*(\d+),/", $line, $m))       $width = $m[1];     else if (preg_match("/\.cwidth\s*=\s*(\d+),/", $line, $m))       $cwidth = $m[1];     else if (preg_match("/\.height\s*=\s*(\d+),/", $line, $m))       $height = $m[1];   } } $hex = explode(",", $f); $bin = array(); foreach ($hex as $h) {   $h = trim($h);   if (isset($h[0])) {     $bin[] = hexdec($h);   } } function png($data, $cwidth, $width, $height) {   $w = $cwidth * 96;   $img = imagecreate($w=668, $height=16);   $bg = imagecolorallocate($img, 255, 255, 255);   $color = imagecolorallocate($img, 0, 0, 0);   $color2 = imagecolorallocate($img, 128, 128, 228);   $x = 0;   $y = 0;   foreach ($data as $bin) {     $bit = $bin & 0x80;     $dup = $bin & 0x7f;     for ($i = 0; $i < $dup; $i++) {       if ($bit)         imagesetpixel($img, $x, $y, $color);       $x++;       if ($x % $width == 0) {         $x = 0;         $y++;       }     }   }   imagepng($img, "out.png"); } png($bin, $cwidth, $width, $height);

I dalje ne kontam kako se pravi header mada mislim da ide onako kako si rekao... preko gimpa, samo nije htelo da radi jer smo kontra postavili crno i belo...

Ko je trenutno na forumu
 

Ukupno su 760 korisnika na forumu :: 32 registrovanih, 7 sakrivenih i 721 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., Andrija357, Arahne, babaroga, Belac91, dankisha, Dukelander, dushan, FileFinder, HrcAk47, janbo, Karla, kihot, mercedesamg, Mercury, mik7, mikrimaus, milan.vukovic, operniki, procesor, raptorsi, RJ, Romibrat, ruger357, stegonosa, suton, vathra, vladetije, wizzardone, yrraf, zbazin, 79693