(char *) a C :)
HackForum
| 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 | | | 319-960-895 | 17.7.2008 21:47 |
|
|
|
| char * ptr = image_base + 0x5000;
printf("%s",ptr);
(odpovědět) | w00t | 78.99.161.* | 18.7.2008 1:13 |
|
|
|
| á, 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 | | | 319-960-895 | 18.7.2008 14:08 |
|
|
|