Code-Segment im Speicher
-
Hallo, ich hab da mal ne Frage die mich interessieren würde!
Gibt es eine Möglichkeit, aus einem Programm heraus den Ort (Speicheradresse) des eigenen Code-Segments im Speicher zu ermitteln (und evtl. die Größe)?
Und wenn ja, wie in etwa geht das?
-
dafür gibt es doch die Segment Register CS,DS,SS,ES
ich verschieb das mal in das Assembler Forum
-
Also ich hab nicht so viel Ahnung von Protected Mode Assembler, aber vielleicht kann ich dir ja trotzdem helfen:
In CS steht nur der Selektor des Segmentes drin. Dieser Selektor ist ein Index in der GDT oder LDT (weiß ich grad nicht, ist IMHO auch egal), der Global Descriptor Table bzw. der Local Descriptor Table. Dieser Zugriff wird von der CPU erledigt, nicht von irgendeinem Programm.
In dieser Tabelle steht, wo sich dein Codesegment befindet und wie groß es ist.
Aber du hast normalerweise keine Chance da ranzukommen, weil die Descriptor Table aus gutem Grund nicht in deinem Datensegment liegt.
Da kommen nur das Betriebssystem oder Treiber ran, also Ring0 Code.
Eventuell auch Ring1 und Ring2 Code, aber der wird von Windows (9x) AFAIK eh nicht verwendet.Ich bin mir zu 99.999% sicher, dass das stimmt. Aber bitte nicht hauen wenn nicht.