Turbo C a (char*)
HackForum
| Opět zdravím,
zajímalo by mě, jak tento stařičký kompiler (Turbo C 2.01) ukládá (char *). Chtěl bych získat přesnou fyzickou adresu. Myslel jsem si, že se ukládá do prom:[ds], kde prom je třeba char *prom = (char*)0x7000
Pokud udělám:
char *some = (char*)0x7000;
je potom fyzická adresa some:[ds], například ds je 0x500, potom je fyzická adresa proměnné some přesně 0x7500. Tohle mi funguje.
Problém nastává v této chvíli:
char *some = (char*)malloc(512);
some:[ds] neukazujena začátek stringu, jak jsem původně očekával.
char *some = (char*)malloc(512);
gets(some);
printf("%s", some);
funguje bezproblémově, ale chtěl bych zjistit přesnou fyzickou adresu pointeru na char, alokovaného přes fci malloc. Mýlím se, že to je some:[ds]? Myslím si že ano. Jaká je tedy správná fyzická adresa?
----------
..:@]> [link] <[@:.. (odpovědět) | DjH | | | 319-960-895 | 30.7.2008 10:54 |
|
|
|
| resp. jak ji zjistit?
----------
..:@]> [link] <[@:.. (odpovědět) | DjH | | | 319-960-895 | 30.7.2008 10:55 |
|
|
|
| aha, mám pošahanej malloc(), dobrý no. App byla na 0x600 a malloc alokoval 512 bajtu od 0x500 po 0x700, tim paem se prekryla app a spadla :/
----------
..:@]> [link] <[@:.. (odpovědět) | DjH | | | 319-960-895 | 30.7.2008 14:39 |
|
|
|
| 1. mam pocit, ze vubec nechapes adresovani pameti v real modu (segmenty, paragrafy, offsety).
2. obsah pointeru se lisi podle jeho typu (near/far/huge, pametovy model), pokud s nim potrebujes nejak carovat, tak pouzij far pointer a makra MK_FP, FP_SEG, FP_OFF.
(odpovědět) | prc | 213.211.51.* | 31.7.2008 13:53 |
|
|
|
| te povidam ze uz sem to vyresil, ok? :D, vim co to je far a huge, vim co je to pametovy model, jen sem mel blbe nastavenej malloc(), to je vse x)
----------
..:@]> [link] <[@:.. (odpovědět) | DjH | | | 319-960-895 | 31.7.2008 13:58 |
|
|
|
| promin, ale z toho dotazu je evidentni, ze nevis. pockame par mesicu az prijdes na to, o cem jsem mluvil :)
(odpovědět) | prc | 213.211.51.* | 31.7.2008 22:04 |
|
|
|