[ rapidlord @ 06.04.2005. 14:12 ] @
Imam kod jedne aplikacije pisan u standardnom C/C++ za Palm OS, kod treba da prebacim na PC (Windows) sa MFC-om, E sad u tom kodu postoje par funkcija koje su u asembleru , radio sam nesto malo u asembleru ali ne dovoljno da bi ukapirao o cemu se ovde radi, kod je sledeci:

Code:

static asm UInt8* GetGamn()
{
    lea     racer_gamn, a0
    rts
racer_gamn:
    dc.b 0x03,0xff,0x00,0x00,0xff,0x00,0x00,0xf1
    dc.b 0x0e,0x00,0xcd,0x32,0x00,0xa3,0x5c,0x00
    dc.b 0x6a,0x94,0x01,0x04,0x2b,0xd4,0x00,0x00
    dc.b 0x2b,0xd4,0x00,0x00,0x23,0xdc,0x00,0x00
    dc.b 0x23,0xdc,0x00,0x00,0x1c,0xe2,0x01,0x00
    dc.b 0x1c,0xd4,0x0f,0x00,0x1c,0xd7,0x0c,0x00
    dc.b 0x1c,0xc2,0x21,0x00,0x15,0xb5,0x35,0x00
    dc.b 0x0e,0xa3,0x4d,0x01,0x07,0x74,0x80,0x04
    dc.b 0x05,0x2b,0xd4,0x00,0x00,0x00,0x23,0xdc
    ... jos pedesetak slicnih linija ...
    ..
}


a ova funkcija se koristi u sledecoj funkciji:

Code:

set_gamn(GetGamn());
//gde je :
void set_gamn(byte* gamn)
{
...
}


Dali moze neko da mi kaze kako bi ova prva funkcija trebala da izgleda ako bi je radili za Windows, bilo kakva pomoc bi mi dobro dosla.

p.s. Kako neko moze uopste da zna o cemu se radi u ovoj sumi brojeva, dali postoji neki konverter ili nesto slicno???

Hvala.
[ Vojislav Milunovic @ 07.04.2005. 00:32 ] @
Meni ovo deluje kao vraćanje podataka iz funkcije s obzirom na logiku koda, mada može biti da je to binarni kod...
No da se držim prve pretpostavke...
Ovo sve možeš ovako prekucati (bcc32 trip):
Code:

char *GetGamn(){
__asm{
    mov eax, offset racer_gamn
    ret
racer_gamn:
    db 0x03,0xff,0x00,0x00,0xff,0x00,0x00,0xf1
    db 0x0e,0x00,0xcd,0x32,0x00,0xa3,0x5c,0x00
    db 0x6a,0x94,0x01,0x04,0x2b,0xd4,0x00,0x00
    db 0x2b,0xd4,0x00,0x00,0x23,0xdc,0x00,0x00
    db 0x23,0xdc,0x00,0x00,0x1c,0xe2,0x01,0x00
    db 0x1c,0xd4,0x0f,0x00,0x1c,0xd7,0x0c,0x00
    db 0x1c,0xc2,0x21,0x00,0x15,0xb5,0x35,0x00
    db 0x0e,0xa3,0x4d,0x01,0x07,0x74,0x80,0x04
    db 0x05,0x2b,0xd4,0x00,0x00,0x00,0x23,0xdc
    .
    ..
 }
}


Citat:

p.s. Kako neko moze uopste da zna o cemu se radi u ovoj sumi brojeva, dali postoji neki konverter ili nesto slicno???


Ne možeš znati :) Prati logiku programa da vidiš da li su podaci ili binarni kod, ako su podaci ostaviš tako kako jeste, ako je binarni kod poteraš ga kroz neki disassembler ili debugger i vidiš kako radi :)
[ Sundance @ 09.04.2005. 21:20 ] @
Vojislave, mislim da je ovaj binarni kod specifičan za PalmOS arhitekturu (šta on uopće koristi, neki RISC? :). Daj cijeli kod (ostale linije) i saznaj za koji OS, pa ćemo ti dati disasm iz IDA-e, pa možda ako netko zna prepiše ga za x86.
[ Vojislav Milunovic @ 09.04.2005. 21:51 ] @
Nemam pojma meni baš liči na neke podatke, ali šta ga znam možda i jeste binarno :) z0mbie u PalmOS-u :)))
[ rapidlord @ 13.04.2005. 10:56 ] @
Evo sta mi je jedan lik odgovorio na pocketpcdn forumu, i mislim da je upravu, kompajlira mi se OK, jos cu da vidim dali i app. radi ok, mozda samo bude pravilo problem little/big endian jer se razlikuje na Palm/PPC.

Citat:

All that code is doing is returning the address of the byte buffer. No need to do that in asm on pocket pc.

Put the data table in a binary file and stick it in your resouses, then use LoadResource() to get a pointer to it.

or

create a fixed array in memory and use the array pointer:
BYTE racer_gamn[] = { 0x03, 0xff, ... };

Cheers,

Pete


Slican odgovor sam imao jos na jednom forumu.
[ Nothingman @ 13.04.2005. 11:07 ] @
Pa to ti je rekao i Vojislav ;)
[ Vojislav Milunovic @ 13.04.2005. 11:43 ] @
hehe :)) Da :))) kao što sam i pretpostavio, podaci su u pitanju :)
[ Sundance @ 18.04.2005. 14:51 ] @
Ma džaba ti što se kompajlira, ako taj PocketPC nema x86 u sebi, to je kod za neki drugi procesor i neće dobro radit!

Ako ima onda OK.