Autor Thema: Ein wenig Win Source beim VS .Net  (Gelesen 9841 mal)

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« am: 27. May 2005, 19:16 »
Wenn ich beim Microsoft Visual Studio .Net z.B. folgendes Programm debugge (per F11 also Einzelschritt und NICHT Prozedurschritt), wird bei dem new-operator eine neue Datei geöffnet und dort weitergemacht:

void main()
{
    char *ch;
    ch = new char;
    delete char;
}

Das ist auch bei vielen anderen Sachen so. Ich weiß jetzt, dass diese Dateien im Ordner "Microsoft Visual Studio .Net 2003\Vc7\crt\src" gespeichert werden. Und ich frage mich langsam ob das Windows Source Code ist. Man könnte zwar nichts mit anfangen, aber es würde ich trotzdem interessieren ob jemand weiß woher dieser Code kommt.

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #1 am: 27. May 2005, 21:16 »
Das ist die C/C++ Bibliothek, und sowas gibt es schon auch z.B. beim MSVC++ 6.0. Wenn du immer weiter in die Funktionsaufrufe reingehst, wird dir evtl. a) irgendwann assembler begegnen aus ner Datei deren Source Code halt nicht dabei ist oder aber sicher b) die Meldung das man in Systemaufrufen nicht reinspringen kann.
*post*

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 28. May 2005, 09:54 »
Ich habs nochmal mit dem new-Beispiel getestet: Da werden die Files newop.cpp und malloc.c geöffnet.

Aber die C/C++Bibliothek wird ja von Microsoft geschrieben (bei Windows natürlich nur), also ist es in einer gewissen Hinsicht Source Code von Win/MS. Malloc.c fängt z.b. damit an:

/***
*malloc.c - Get a block of memory from the heap
*
*       Copyright (c) Microsoft Corporation. All rights reserved.
*
*Purpose:
*       Defines the malloc() function.
*
**********************************************************/

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #3 am: 28. May 2005, 10:32 »
Dann konnte dein malloc die Anfrage ohne zusätzlichen Speicher erfüllen, probier mal so 30mb zu allokieren.
*post*

DDR-RAM

  • Beiträge: 184
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 28. May 2005, 11:29 »
hallo,

also malloc.c gehört zur msvcrt.dll und ruft winapi funtkionen auf, die dann in der ntdll.dll oder kernel32.dll sind.
ntdll.dll und kernel32.dll (und noch einige andere) gehören zur winapi, msvcrt.dll ist microsoft c runtime Bibliothek.

Der source code der winapi ist nicht einsehbar, nur asm, bei der msvcrt.dll ist der c-code mit dabei. In die system aufrufe, also z.b. int 21h, die in der winapi stattfinden, kann man aber nicht reinspringen.

Die msvcrt.dll gibt es in verschiedenen varianten (also auch andere namen)

MfG
DDR-RAM

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 28. May 2005, 19:20 »
@Legend: Wenn ich 30Mb allokier passiert das gleiche.

Was aber auch interessant ist, ist dass beim Programmende eine Datei namens crt0 aufgerufen wird.

@malloc.c
Ich mach hier mal ne Liste mit allen Funktionen die dadrin enthalten sind:
void * __cdecl _malloc_base (size_t size);
void * __cdecl _nh_malloc_base (size_t size, int nhFlag);
void * __cdecl _heap_alloc_base (size_t size);
_PBLKDESC __cdecl _heap_split_block;
Die erste wird direkt vom new-Operator aufgerufen und die ruft die nächste auf usw. Mit Kommentaren sind das zusammen 326 Zeilen Code.

GhostCoder

  • Beiträge: 187
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 29. May 2005, 11:34 »
Hi,

Zitat

Was aber auch interessant ist, ist dass beim Programmende eine Datei namens crt0 aufgerufen wird.


Ja, in der Datei ist der Start und -Endcode deines Programms enthalten. Heap erstellen, Stack(denk ich mal), Commandline und Flags holen, und main bzw. WinMain aufrufen, und danach natürlich aufräumen.

Gruß GhostCoder
A man, a legend!

 

Einloggen