Beiträge von marX

    Zitat von Baby

    ich hab auch diese drohmail bekommen, aber bei mir hat die ip nicht gestimmt, drum hats mich nicht wirlich aufgedregt
    aber mich würds auch schrecken, wenn ich sowas bekomme und dann auch noch die richtige ip drin steht

    also, dass bei dir nich die richtige ip drin stand kann natürlich dran liegen, dass du keine statische ip hast ?!!

    -> würde aber warscheinlich auch etwas blöde schaun, wenn ich sone mail bezüglich raubkopien bekommen würde -> würde es aber schlussendlich nicht glauben, weil man meinen festplatteninhalt kaum über meine 56k verbindung hochladen könnte ;) *gg*

    mfg marX

    Zitat von Ringding

    Richtig, solange sich der allozierte Speicher in Grenzen hält, ist das sehr brauchbar. Für große Speichermengen empfiehlt sich halt dann doch ein größerer Addressraum, sprich 64 Bit-Maschinen.

    klar funktionierts (prinzipiell) aber warum sollte man wenn man ja eh eine virtuelle maschine hat und somit das kopieren von referenzen überwachen kann, nicht eine "sauberere" methode wählen ?!! (wäre nicht viel langsamer, aber viel sauberer bzw. gründlicher)

    -> für c/c++ bzw andere programmiersprachen ohne vm (oder emulation) kann natürlich nur ein speicher-scann-verfahren verwendet werden...

    Zitat von Ringding

    Du, ich weiß, was eine Java VM macht, ich arbeite nämlich an einer im Rahmen meiner Diplomarbeit. Und der Boehm GC, ein sehr weit verbreiteter Garbage Collector, tut genau das, was ich beschrieben habe, nämlich den Speicher scannen. Außerdem haben die Pointer auf einer 32bit-Maschine natürlich 32 Bit und nicht 64.

    1. also dann ist dieser gc aber nicht speziell für java entwickelt, sonst wäre es nämlich nicht umbedingt zweckmäßig ein so umständliches (und fehlerbehaftetes) verfahren zu wählen, wenn das programm sowieso emuliert werden muss.....

    2. meinses wissens haben referenzen in java (VM-intern) immer 64 bit !
    (wäre zumindest sinnvoll....in hinblick auf kompatibilität)

    mfg marX

    Zitat von Ringding

    Kann schon vorkommen, dass der GC was überlässt, was eigentlich gelöscht werden sollte. Kommt einfach drauf an, wie er den Memory scannt. Wenn er einfach alle 32 bit-Worte liest und als Pointer betrachtet, kann's ja schon mal zufällig passieren, dass ein solcher in einen Speicherbereich reinzeigt, der alloziert ist. V.a. wenn das Programm ein paar hundert MB braucht, ist das leicht möglich. Auf 64 bit-Maschinen passiert's klarerweise viel seltener, weil da schon einiges an Glück dazugehört, um mit einem wild zusammengewürfelten Pointer genau einen gültigen Speicherbereich zu treffen.

    1. zu "64-bit maschinen": da hast du anscheinend das prinzip von java noch nicht verstanden -> das übersetzte programm wird nicht direkt dem prozessor gefüttert, sondern einer virtuellen maschine -> der "maschinen-code" kann von keinem "normalen" pc-prozessor (nur von speziellen sun-prozessoren) direkt ausgeführt werden!! desshalb ist es auch egal ob di maschine 64 oder 32 bit hat -> die referenzen haben immer 64 bit (von der vm geregelt)

    2. also ich weiß ja nicht wie der gc den speicher verwaltet, aber er "scannt" sicher nicht den speicher (pach pointern) um auf referenzen zu prüfen !!! das wäre ja schon eine etwas hirnrissige methode !!
    java läuft ja auf einer virtuellen maschine (mit speziellen maschinen-codes) -> dies erlaubt es einer "kontrollierenden instanz" das kopieren einer referenz (pointer) zu verfolgen -> der referenz-counter wird incrementiert -> wenn der ref.count == 0 ist wird der speicherbereich freigegeben...

    ps: was vorher schon gesagt wurde: wenn java solche gravierenden fehler hätte wäre es niemals so "groß" geworden sondern gleich in der luft zerissen worden ;) (stell dir mal vor ein java programm würde auf einem handy oder organizer solche speicherprobleme verursachen!!)

    mfg marX

    sorry, aber das soll doch wohl ein spass sein ?!!
    du wirst doch nicht tatsächlich so dumm sein und das glauben
    -> das ist so ziemlich die einfachste möglichkeit einen dummen dazu zu bringen sich WIRKLICH einen virus einzufangen !!!

    -> generell muss man mit attachments vorsichtig sein (auch wenn der absender bekannt ist) aber ein .exe attachment (Programm) würde ich NIEMALS von KEINEM absender öffnen ;)

    mfg marX

    also ich kann dir nur die 2 "großen bekannten" programme empfehlen:

    1. mathcad -> einfach, gute darstellung, syntax etwas gewöhnungsbedürftig
    2. matlab -> "dank" programmiersprache sehr wissenschaftlich und unständlich zu lernen, aber ein mächtiges werkzeug -> die programme können direkt in maschinencode (für ic's) umgewandelt werden

    ich hatte das zweifelhafte glück beide programme inder schule benützen zu müssen ;)

    mfg marX

    Zitat von hal

    wär mir neu, dass er sowas tut. eine schnelle google-recherche zeigt nur, dass es das problem der ungewollten referenz gibt (siehe zB hier), die aber technisch kein leak ist, sondern ein unfähiger programmierer ;).
    ansonsten sollte da nichts verloren gehen.

    kann ich mich nur anschließen ;)

    PS:
    1. so bekommt man viele posts !! ...... hehe
    2. klein schreiben sollte man vom programmieren her gewöhnt sein! (ich zumindest)

    mfg marX

    ...hab ja gesagt, dass das nicht schön ist, aber faulheit ist das schlimmste übel ;) (langsam ist's normalerweise aber nicht ;))

    na ja....gibt ja auch eine routine um die dateigröße abzufragen.....

    also um in einem java-programm memory leaks zu produzieren musst du aber schon wilde scheisse programmen (;) sorry nicht persönlich nehmen)

    aber mal ernst: wenn du eine referenz nicht überschreibst erkennt der garbage collektor automatisch ob ein objekt noch benötigt wird!!!

    und es gibt auch eine methode um die priorität des GC's "hochzuschrauben" um ihn zu veranlassen den speicher zu defragmentieren... (weiß aber leider nicht mehr wie die heißt -> help nachsehn!)

    mfg marX

    was hal geschrieben hat ist natürlich die einfachste methode....
    wenn du aber wirklich den inhalt des files speichern willst:

    so funzt das gut...du kannst dann auf jedes zeichen ganz einfach wie in einem arry (feld) zugreifen -> fbuffer[0] = 1. Zeichen, fbuffer[1] = 2.Zeichen, .... das Feld wir mit '\0' beendet

    -> am ende speicher freigeben nicht vergessen!!!
    -> die methode um die dateigröße zu ermitteln ist "etwas" gammlig, aber sie funktioniert gut und ich war immer zu faul um die funktion zu verwenden...;)

    mfg marX

    ich empfehle dir kein "standalone"-java-programm zu schreiben, sondern ein java-applet!! da hast du im prinzip die gleichen möglichkeiten, aber du kannst das applet einfach in ein html-dokument integrieren -> einfaches starten

    solltest du aber unbedingt ein standalone programm schreiben wollen empfehle ich dir auch ein batch-file zu schreiben, welches den aufruf macht...

    außerdem: warum schreibts du das programm nicht in c++ (c) ist ja java von der syntax her sehr änlich -> viel schneller und dann hast du dieses problem auch nich mehr !!

    mfg marX

    ich nehme mal an du und ClintE kennt euch und braucht diese programme für eure schule bzw. studium ?!!

    dies sind sehr spezifische aufgaben und ihr werdet kaum jemanden hier finden der sowohl den prozessor, als auch die tastatur und das lcd-display genau genug kennt um euch mit einem programm zu helfen...

    mfg marX

    hm.....das ist halt immer das problem mit assembler
    ->anderer prozessor->anderes programm für die selbe aufgabe (andre syntax+befehle)

    das nächste problem ist dann natürlich das display ?!! (ansteuerung...)

    das prinzip is dafür aber einfach:

    1. initialisierung des displays
    2. register xyz = 0
    3. ausgabe xyz als zeichen (z.B. 'A')
    4. ausgabe xyz als bcd -> am besten bintobcd-funktion schreiben
    -> errechnet bcd-wert und schreibt diesen in register abc
    5. register xyz incrementieren (...um 1 erhöhen)
    6. zeitschleife (1e sec warten) -> funktio- sleep_1 aufrufen
    7. xyz < 256 ? wenn ja -> goto 3
    ende des programms

    sleep_1:
    eine zeitschleife wird wie folgt realisiert:
    1. register auf 0 setzen
    2. register=register+1
    3. wenn register < "zielwert" goto 2
    fkt. beenden

    um jetzt die zeit (in unserem fall eine sekunde) einzustellen musst du wissen
    wie lange der prozessor benötigt um den befehl 2. und 3. auszuführen.
    ein bsp: 2:1us und 3:2us (bei ausgeführtem sprung)
    -> "zielwert" = 1/(0.000001+0.000002) = 333333
    das heißt, dass die schleife ("zeitschleife") 333333 mal durchlaufen werden muss bis eine sekunde verstrichen ist! das wird aber nur funktionieren, wenn Kyle uVision die simulation mit der echten prozessorgeschwindigkeit durchführt (weiß ich nicht, vielleicht kann man das aktivieren ....)


    bcd-funktion: dafür gibt es einen speziellen algorithmus den ich aber leider nicht auswendig kenne.....müsste aber mit google schnell zu finden sein!


    so...das ganze ist etwas abstrakt...ich weiß ja leider nicht was für ein vorwissen du hast, aber sonst kannst du ja nachfragen ;)

    mfg marX

    also ich habe schon viel assembler programmiert (68k & pc)
    und könnte dir sicher etwas helfen!

    1. musst du assembler verwenden oder kann es auch C sein ?
    2. was für ein prozessor verwendest du (im keil kann man ja auch einen prozessor aussuchen)
    3. musst du die "pause" (1e sekunde) mit einer "zeitschleife" realisieren oder hast du einen timer-baustein ?

    mfg marX

    stimmt natürlich, was jeuneS2 sagte, aber genauer:
    bitweises und ("&"):
    7->00000111
    6->00000101
    = 00000101 -> 1 wenn beide 1 sind

    or ("|")
    4->00000100
    6->00000110
    = 00000110 -> 1 wenn >= 1

    geht natürlich auch mit variablen nicht nur mit "normlen" zahlen!

    mfg marX

    im folgenden findest du einen ausschnitt aus dem SQL-reference manual:
    (dort hättest du aber auch selbst nachsehen können, bzw. googlen ;))


    mfg marX

    eine gute sache wäre sicher mit einer firewall oder einem
    sniffer, etc. die sockets (bzw. den datentransfer) zu überwachen
    -> da kannst du sehen, welches programm daten überträgt und dann siehst du schon ob's nen virus/wurm ist !

    also ich hab z.B. ein gutes prog mal im inet. gefunden (vision heist's - weiß aber leider nicht mehr von wo ;)) das alle sockets mit zugehörigen programmen anzeigt !!!

    mfg marX