| Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann. |
Diskussion: RAM Test im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Anzeige So, diesmal ein Program bei dem man nachdenken muss. Ich hätte gerne ein Program mit dem man seinen Arbeitsspeicher ...
![]() |
| | #1 (permalink) |
| Senior Member Registriert seit: 02.10.01 ![]() Likes: 1 | Anzeige So, diesmal ein Program bei dem man nachdenken muss. Ich hätte gerne ein Program mit dem man seinen Arbeitsspeicher testen kann. Das Programm sollte folgende Bedingungen erfüllen:
Sollte also eine Speicherzelle defekt sein, so würde der Wert dort drinnen nicht 0x55 sein. Sollte kein Fehler gefunden werden, dann ist der Rückgabewert der Funktion NULL. Die Funktion sollte nur EINE Returnanweisung enthalten. Hier mal ein kleines Konstrukt: Code: uint8 * ram_test(uint8* startadresse,uint32 size)
{
...
}
void main()
{
...//Funktionsaufruf
} |
| | |
| | #2 (permalink) | |
| Registriert seit: 03.04.04 ![]() Likes: 0 | hallo Tec, ich hätte da mal noch eine Frage: Zitat:
Oder anders gefragt: Wie weiss ich, das ich nicht gerade den Kernel abschieße ? Ich programmiere noch nicht sehr lange; Falls die Frage dumm ist, erklär mir bitte einer warum. | |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Registriert seit: 03.02.04 ![]() Likes: 0 | Hi Tec, mit der SystemSuite ab Version 3.0 (http://www.ontrack.de/) kannst Du unter Systemtest den Speichertest auswählen und Deinen Arbeitsspeicher testen. Symantec hat die Suite gekauft - hier solltest Du nach der aktuellen Version suchen. Bei heise gibt's so was ähnliches in bekannt schlichter Form: http://www.heise.de/ct/ftp/ctspd.shtml Gruß rodent |
| | |
| | #4 (permalink) |
| Registriert seit: 10.09.04 ![]() Likes: 0 | ZU C.Mon Ich bin auch erst C++ Anfänger aber ich glaube, das man einfach mit einem Zeiger den Speicher reserviert und den reservierten Speicher dann testet. mfg Fat Tony |
| | |
| | #5 (permalink) | ||
| Registriert seit: 03.04.04 ![]() Likes: 0 | Zitat:
Zitat:
Und wie sieht das "testen" nach Deiner Interpretation dann aus ? Ich habe das so verstanden, dass man einen bestimmten Wert hineinschreibt und dann nachsieht, ob er auch drin steht - oder liege ich jetzt völlig daneben ? Leider scheint das Interesse für diese Aufgabe ja ziemlich bescheiden zu sein - Schade eigentlich | ||
| | |
| | #6 (permalink) |
| Registriert seit: 10.09.04 ![]() Likes: 0 | Hallo! Wenn man die Größe des zu testenden Speicherbereichs eingeben kann, ist es doch möglich, dass man die gesamte Größe des zur verfügung stehenden Speichers eingibt, dann würde sozusagen wie D.Mon es schon richtig gepostet hat "Der Kernel abgeschossen werden". Aber nur so kann man den Speicher auf Fehler testen. Man kann also nie den gesamten Specher testen und deshalb auch nie wissen ob der Ram in Ordnung ist. Bin ich da richtig oder völlig falsch ?( Außerdem wie weiß ich auf welchen Adressen das BS seine Files gespeichert hat? mfg Fat Tony |
| | |
| | #7 (permalink) |
| Hi, @Fat Tony: Ich glaube da liegst du richtig. Man kann nie den gesamten Ram testen mit einem Programm welches auf ein Betriebssystem läuft. Das Programm selbst muss ja auch immer auf den Ram liegen. Dass der Kernel aber abgeschossen wird, das sollte so gut wie unmöglich sein. Eine "Segmentation fault" könnte zB. so eine Schutzmaßnahme sein, welche das Betriebssystem dafür verwendet. mfg ecologys | |
| | |
| | #8 (permalink) |
| Registriert seit: 03.04.04 ![]() Likes: 0 | hallo ecologys, ich vermute, dass das u. a. vom Betriebssystem abhängig ist. Grundsätzlich würde ich aber annehmen, dass ein Programm, welches mit ausreichenden Berechtigungen läuft auch in der Lage ist, Speicherbereiche zu beschreiben, die anderen Prozessen zugeordnet sind. Die gilt wohl insbesondere dann, wenn man in der Lage ist, die physikalische Addresierung einzelner Speicherstellen vorzunehmen. |
| | |
| | #9 (permalink) |
| Hi D.Mon, wenn man den Bereich des Betriebssystems überschreibt funktioniert ja leider nichts mehr. Ich hab mir da so was ausgekopft, weiss aber nicht ob das hinhaun würde. Und zwar hab ich mir 2 Varianten ausgedacht: 1. Man könnte ja zB. die erste Hälfte des Rams testen, wobei das Betriebssystem und das Program in der hintern hälfte stehen sollte. Dann macht man eine Kopie des Betriebssystems und des Prozesses in der ersten Hälfte und biegt in der PageTable die zeiger um. Voraussetzung ist aber dabei ausreichende Zugriffsrechte, wie D.Mon schon gesagt hat. 2. Man könnte ein eigenes Betriebssystem schreiben, das nur den ram testet. Dann müsste man auch alles umkopieren und Zeiger umbiegen aber es wär bedeutend einfacher wegen der Rechte und dem Kernel Mode. mfg ecologys | |
| | |
| | #10 (permalink) |
| Registriert seit: 03.04.04 ![]() Likes: 0 | Bleibt "nur" noch die Aufgabe herauszufinden, in welchem physikalischen Bereich des RAM der Kernel und die übrigen BS Geschichten (z. B. die Verwaltung des virtuellen Speichers und der ) sich gerade befinden und wie man diesen addressieren kann. Ich bin mir sicher, dass man diese Aufgabe lösen kann, wenn auch sehr systemspezifisch. was mich allerdings ein wenig irritiert, ist, dass hier eine Aufgabe eingestellt wird und man das Ganze dann einfach sich selber überlässt. Sieht ein wenig so aus, als hätte da jemand seine Hausaufgaben gepostet |
| | |
| | #11 (permalink) |
| Registriert seit: 10.09.04 ![]() Likes: 0 | Jetzt hab ich es man startet das Programm von Bootdiskete und läst sich die Daten in eine Textdatei auf der HDD speichern! Dann kann man 100% des Speichers testen!! mfg Fat Tony |
| | |
| | #12 (permalink) |
| Registriert seit: 07.11.04 ![]() Likes: 0 | Hallo! Wäre nett, wenn jemand mal auf die ursprüngliche Frage antworten könnte. Sitze gerade vor der selben Aufgabe. Ich muss auch ein solches Programm schreiben. Dieses wird später zum RAM testen auf einem Motorolachip verwendet. Die Frage, ob ich einen wichtigen Speicherbereich überschreibe, kann später geklärt werden. Erst muss ich das Programm mal schreiben und zum Laufen bringen. @ecologys: Flussdiagramm habe ich! Muss mein Prog in C in Inline-assembler schreiben. Wie kann ich Assembler in Visual C einbinden? Wenn sich jemand auskennt bitte melden! mfg |
| | |
| | #13 (permalink) | |
| Registriert seit: 03.04.04 ![]() Likes: 0 | Zitat:
| |
| | |
| | #14 (permalink) |
| Hi, da kann ich nur D.Mon recht geben, das Programm muss in den Ram geschrieben werden und schon kann er nicht so ohne weiteres komplett getestet werden. Das ganze wichtige Zeugs, Betriebssystem und so, müsste ab Adresse 0 starten, da eigentlich ein jedes Programm mit der Adresse 0 startet. 0 natürlich ausgeschlossen, da das der Nullpointer ist. @kletterbeer: Du musst anfangs alles mit Assembler starten und kannst erst später in C-Code wechseln. Gute Beispiele dafür findest du unter [2]. Ein bisschen Werbung von unserem Project das dazu passt und vielleicht weiterhilft :] [1] http://sourceforge.net/projects/sweb [2] http://sweb.sourceforge.net/ mfg ecologys | |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| test | throjan | Hackerboard.de-Feedback | 13 | 03.10.01 17:46 |