(char *) a C :)

HackForum

(char *) a C :)#
Takže...
Z dumpu RAMky ve VMWare 100%tně vím, že na adrese 5000h se nacházejí data. Chtěl bych na tyto data dostat nějakou proměnou, resp. ukazatel proměnné, nejlépe (char *). Zkoušel jsem nulovat DS i ES a potom provést
buffer = 0x500;
ale nic. Zkoušel jsem i
buffer = 0x500|_ES;
a
buffer = 0x500 + (_ES << 4);
ale pořád se mi nepodařilo po
printf("%s", buffer);
vytisknout data, které začínají na 5000h bajtu v RAM a končí '\0'.
Nevíte jak to tam krucifix už narvat??

----------
..:@]> [link] <[@:..
(odpovědět)
DjH | E-mail | Website | ICQ 319-960-89517.7.2008 21:47
re: (char *) a C :)#
char * ptr = image_base + 0x5000;
printf("%s",ptr);

(odpovědět)
w00t | 78.99.161.*18.7.2008 1:13
re: (char *) a C :)#
á, vyřešil jsem to úplně jinak :))
Neuvědomoval jsem si že se v C zadává přímo fyzická adresa, proto jsem zadával 0x500. Myslel jsem si že se to převede na [500h:ds]. Šlo to buď:
char *buff = (char*)0x5000;
asm xor ds, ds;
printf("%s", buff);

ale to rozhází pointery u všech (char*), tak jsem to vyřešil přímo ve fci, která byla přímo v ASM a vracela výsledek v es:[bx], takže jsem udělal

void tamta_funkce(char *offset) {
_ES = _DS;
_BX = (char*)offset;
...
...
}

kompiluji v TCC, tam je skvělá možnot pracovat s registry tímto způsobem :)))

//a díky za vyřešení problému Yossarianovi :)

----------
..:@]> [link] <[@:..
(odpovědět)
DjH | E-mail | Website | ICQ 319-960-89518.7.2008 14:08

Zpět
 
 
 

 
BBCode