Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Themen - bitmaster

Seiten: [1] 2 3 ... 5
1
Hi, ich melde mich auch mal wieder.  :-D

Ich arbeite an ein Programm, welches Informationen über den Prozessor ausgibt. Dazu verwende ich den cpuid Befehl und nutze also inline-assembler. Um zu überprüfen, ob der cpuid Befehl überhaupt vorhanden ist, muss man ja testen ob sich das Bit 21 "umdrehen" lässt. Dazu muss man ja an die Bits des Flags-Registers kommen. Das geht ja bekanntlich über das pushf/popf Befehlspaar. Im 32 bit mode werden 32 bit auf dem stack gepusht/gepopt und im 64 bit mode eben 64 bit. Aber um jetzt an die bits zu kommen kann man sie ja z.b. mittels pop vom stack in ein register popen. Aber genau da liegt mein Problem. Wenn ich "pop %%eax;" schreibe, meckert 64 bit g++ und wenn ich "pop %%rax;" schreibe, meckert 32 bit g++. Meine Frage ist also. Gibt es eine möglichkeit dem g++ zu sagen, dass er, falls er 32 bittig ist das eax register nimmt und falls er 64 bittig ist das 64 bit register nimmt? Vielen dank!!!

bitmaster
2
Lowlevel-Coding / 64 bit fpc und elf32
« am: 17. June 2009, 16:52 »
Hi,

ich melde mich auch mal wieder.  :-D

Sagt mal ist es möglich der 64 bit Version von fpc zu sagen, dass sie elf32 als Ausgabeformat verwenden soll? Also ähnlich dem gcc mit der Option -m32. Ich verwende nämlich eine 64 bit linux distribution und somit auch die 64 bit version von fpc. Ich möchte einen kleinen "kernel" in Pascal schreiben. Der soll per GRUB geladen werden und das Dateiformat soll elf32 sein.

thx

bitmaster

PS: Was sind eigentl. so die Unterschiede zwischen fpc und gpc?
3
Lowlevel-Coding / C/C++ und Zahlensysteme
« am: 24. April 2009, 13:08 »
Hi,

ich möchte gerne einer Variable einen Wert zuweisen. Diesen möchte ich aber in binärer Schreibweise angeben. Also bei dezimaler und hexadezimaler würde man es ja so machen:

var = 0xBADC0DE; //hex
var = 195936478; //dez

Tjo in Assembler würde man an der Zahl ja einfach ein kleines b anhängen, aber in C scheint dies nicht zu funktionieren, da mein gcc meckert. Könnt ihr mir sagen wie das geht? Also klar könnte ich den Wert z.B. in hexadezimaler Form angeben und dahinter den Wert binär als Kommentar schreiben, aber wenn es direkt geht, wieso nicht?

thx

bitmaster
4
Lowlevel-Coding / delphi, array und cpuid
« am: 10. April 2009, 17:09 »
Hi,

ich mache gerade einbisschen was mit Delphi/Pascal. Ich will mittels inline-asm den Vendor-String der CPU ausgeben. So mache ich das bis jetzt:

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  str: string[13];

begin
  asm
    mov eax,0
    cpuid
    mov dword ptr [str],ebx
    mov dword ptr [str+4],edx
    mov dword ptr [str+8],ecx
    mov byte ptr [str+12],0
  end;

  Writeln('Vendor-String: ' + str);
  Readln;
end.

Nur leider gibt er mir immer folgendes aus:

Zitat
Vendor-String: enuineIntel

Tjo und somit fehlt das G, da es ja GenuineIntel heißen müsste. Aber was mache ich verkehrt? Wenn ich anstatt

    mov dword ptr [str],ebx
einfach

    mov dword ptr [str+1],ebx
schreibe, dann gibt er den String net aus (vermutlich, weil sich bei [str+0] eine null befindet und er es als Ende des Zeichenstrings interpretiert. Schreibe ich aber

    mov byte ptr [str],'a'
    mov dword ptr [str+1],ebx

Dann gibt er

Zitat
Vendor-String: GenuineIntel

aus, also ohne dem a. Aber wieso? Prüft delphi ob das erste Zeichen der Zeichenkette ungleich null ist und wenn ja, dann gibt er ab dem zweiten zeichen aus, ansonsten gar nichts???? Das ist sehr mergwürdig. Kennt sich jemand von euch mit Delphi / Pascal aus?

thx

bitmaster
5
Lowlevel-Coding / virtuelle Speicherverwaltung - free
« am: 05. April 2009, 21:01 »
Hi,

ich habe mir mal erlaubt den Source der Funktion free von tyndur (oder so) anzuschauen, weil ich wissen wollte, wie ihr das so mit dem wieder freigeben von Speicher macht. Nun stelle ich aber fest, dass der Speicher gar nicht wieder freigegeben wird. Wenn ich den Code richtig verstanden habe, wird stattdessen der memory node einfach in eine "Free-Liste" eingetragen. D.h., dass einmal reservierter Speicher gar nicht mehr freigegeben wird? Ist das nur eine "Notlösung" oder ist das wirklich die Funktionsweise von free?

thx

bitmaster
6
Offtopic / PHP und die get Methode.
« am: 30. March 2009, 17:50 »
Hi,

ich fange gerade an PHP zu lernen. Den Apache Server habe ich auch schon zum laufen gebracht, und erste Ausgaben mittels echo habe ich auch schon gemacht. Jetzt frage ich mich wieso folgendes nicht funktioniert:

Ich habe eine index.php, die wie folgt aussieht:

<html>

<head>

<title>Ich lerne gerade PHP. :-)</title>

</head>

<body>

<form method="get" action="antwort.php">
<input name="Artikelgruppe" type="text">
<input type="submit">
</form>

</body>

</html>


Könnte ich eigentlich auch index.html nennen, da ich dort ja kein php verwende, oder? Diese sollte die Eingabe der Variable Artikelgruppe zuordnen. Und die antwort.php soll dann was damit machen:

<html>

<head>

<title>antwort</title>

</head>

<body>

<?php
echo "Sie haben "$Artikelgruppe"eingegeben.";

if ($Artikelgruppe == "Eis")
{
echo "Jo, Eis ist lecker.";
}

else if ($Artikelgruppe == "Pizza")
{
echo "Hmm, eine leckere Pizza ist schon was tolles.";
}

else
{
echo "Ich kenne nur Eis und Pizza.";
}
?>


</body>

</html>

Nur leider gibt der Browser immer folgendes aus, egal was ich eingebe:

Zitat
Sie haben eingegeben.Ich kenne nur Eis und Pizza.

Sieht also so aus, als würde der Variable noch gar nichts zugewiesen worden sein. Aber wieso? Was mache ich falsch?

bitmaster
7
Lowlevel-Coding / Referenzen als Funktionsübergabe
« am: 28. March 2009, 12:34 »
Sind Referenzen als Funktionsübergabe in C nicht möglich? In meinem C++ Buch steht folgeder Code:

void quadrat(int &x)
{
x = x*x;
}

Aber wenn ich das dem gcc sage, dann meint er:

Zitat
Fehler: expected »;«, »,« or »)« before »&« token

Also ist das erst seit C++ möglich, oder wie?

bitmaster
8
So, ich bin gerade von OpenSuSE 11.0 auf Kubuntu gewechselt (mit KDE 3.5). So weit so gut. Jetzt wollte ich gerade ein paar Anwendungen kompilieren und bekomme folgende Fehlermeldung nach Eingabe von ./configure

Zitat
configure: error: C compiler cannot create executables

Wie jetzt? Was soll ich jetzt machen?

vielen dank schon mal

bitmaster
9
Lowlevel-Coding / Struktur auf beliebigen Speicher anwenden
« am: 18. January 2009, 23:44 »
Hi,

ich bin ja gerade dabei C zu lernen, wie ihr ja alle wisst.  :wink: So, nun habe ich irgendwo im Speicher einen speziellen Aufbau. Danach habe ich eine Struktur angefertigt. Jetzt stellt sich mir die Frage, wie ich diese Struktur auch dort anwenden kann.

Also sagen wir der Einfachheit halber hätte ich folgende Struktur:

struct WertePaar
{
u16 Wert1;
u32 Wert2;
};

Also u16 und u32 sind meine Definitionen in der types.h. So, jetzt wäre ab der Speicherstelle 0xBADCOOFE der Aufbau so wie in der Struktur WertePaar. Jetzt würde ich gerne diese Struktur dort anwenden. Wie kann ich das machen?

vielen dank schon mal

bitmaster
10
Lowlevel-Coding / outportb in C
« am: 11. January 2009, 17:46 »
Hallöchen,

ich bin gerade dabei mir eine C-Funktion zu schreiben, mit der man einen Byte großen Wert an einen Port schicken lassen können soll. Na ja, aber ich bin ja noch nicht so wirklich gut in C und in AT&T-ASM auch nicht wirklich. So, ich verwende gcc und der kennt ja leider nur die AT&T-syntax (bzw. dessen Assembler). Also so sieht das Ganze bei mir zurzeit aus:

void outportb(unsigned short port, unsigned char val)
{
asm("out val,port"); //tjo und das ist ja falsch
}

Irgendwie raffe ich die Erklärung des gcc inline Assemblers nicht. Man kann ja leider nicht direkt die Variablennamen val und port verwenden. Von daher weiß ich jetzt nicht weiter. Evtl. könnt ihr, die ihr schon lange mit C und dem ganzen Quatsch rumhantiert, mir helfen. Ich wäre euch dankbar.

bitmaster
11
Hi,

ich bastel gerade an einen kleinen C-Kernel. Na ja, eigentlich bin ich nur am kopieren und einfügen. :-P Aber irgendwie lassen sich eure C-Kernel nicht kompilieren. Über diese Zeile meckert mein gcc:

char *hello = "Hello World";

Und zwar sagt er:

error: deprecated conversion from string constant to ‘char*’

Scheint irgendwas zu sein, was man früher so gemacht hat aber jetzt nicht mehr so macht (wenn ich noch ein bisschen Englisch kann ^^). Aber was genau muss man da ändern? Wie gesagt, ich bin noch totaler C-Noob. Von daher wäre ich euch dankbar wenn ihr mir helfen könntet. thx

bitmaster
12
Hi,

wie einige von euch ja wissen bin ich vor einigen Monaten auf Linux umgestiegen (openSuSE 11.0 mit KDE 3.5). Was mich gewundert hat, dass alles so relativ reibungslos funktioniert hat. Und ich möchte auch nicht mehr davon weg. Nie wieder möchte ich nach Windows zurück. So, vor ein paar Tagen ist dann die 11.1 von openSuSE rausgekommen. Dann habe ich mich kurzer Hand entschlossen auf 11.1 und KDE 4.1 zu "updaten". Das habe ich aber genauer gesagt über eine Neuinstallation gemacht und die Partition /home behalten. Aber jetzt kommts. Was stelle ich fest? Ich kann den Sound nicht mehr lauter/leiser machen. Er setzt ihn auf default.  :? Dann kann ich VMware nicht mehr installieren. Hmm.. ich startete Amarok 2 und lasse ihn meine Medien der Sammelliste hinzufügen. Nur leider geht das nicht. Ich muss alle Medien einzelt per drag and drop in die Playliste schieben. Dann höre ich Musik und gehe auf Stop. Was passiert? Er spielt das Lied wieder von vorne ab. Ich muss manchmal 2, manchmal 3 mal auf Stop klicken damit er das macht. Also installierte ich Amarok 1.x. So ein Ärger. Das alles kotzt mich dann so sehr an, dass ich wieder zurück zur 11.0 will. Dazu muss ich mir aber wieder das DVD-Image ziehen. Das mache ich dann auch über KGet (torrent). Dann muss ich weg und gehe auf Download anhalten und beende KGet und fahre den PC herunter. Als ich wiederkomme und den Download vortführen möchte funktioniert es nicht. Der Download lässt sich nicht vortführen. Ich muss also alles von neu und alles in einem herunterladen (wofür dann torrent, kann ich gleich über ftp laden).

Sag mal haben die gesoffen oder was? Die einfachsten Funktionen funktionieren nicht. Stop bei Amarok, Wiederaufnehmen bei KGet usw. Das sind doch grundlegende Funktionen. Wenn das nicht funktioniert, dann ist das nicht mal für eine Alpha-Version gut genug. Das kann doch nicht sein, dass diese Herren sich Jahrelang über die ach so schlechte Qualität angeblich unausgereifter "Betaversionen" der M$ Software lustig machen. So etwas habe ich selbst bei M$ noch nicht erlebt. Wenn in Ausnahmesituationen mal etwas nicht funktioniert, weil die Software nicht ausgereift ist, dann OK. Aber so etwas. Ich meine die Software wurde nicht an einem Tag geschriben. Da laufen Wochenlange Betatests. Das kann doch nicht sein, dass dann einfache Sachen wie Wiederaufnahme von Downloads, Stoppen von Musikstücken, Musikstücken in Plkaylisten einfügen usw. nicht funktionieren. Was haben die denn in den ganzen Wochen getestet? Und gerade das muss aus den Linux/Opensourcegemeinde stammen? Das ist wirklich ein blamables Armutszeugnis für sie. So etwas habe ich noch nicht erlebt.

Dann werde ich halt die 11.0 über ftp laden und dann so schnell wie möglich mich von der 11.1 und KDE 4.1 trennen. Das ist ja nicht auszuhalten so etwas. Unglaublich.
13
Lowlevel-Coding / Inline ASM in g++
« am: 12. December 2008, 08:08 »
Hi,

ich möchte in meiner C++ Anwendung cpuid benutzen. Das geht ja mittels inline asm. Nur kenne ich mich da noch nicht wirklich so gut aus. Irgendwie bekomme ich das nicht hin. Evtl. könnt ihr mir ja helfen. Hier der Code:

#include <iostream>
#include <ostream>

int main()
{
char cpuidstring[48];

asm ("mov $0x80000002,%eax;"
     "cpuid;"
     "mov %eax,(cpuidstring)"); /* hier scheint was nicht zu stimmen */

std::cout << cpuidstring;
}

Ist die Deklaration von cpuidstring überhaupt richtig? Ich will ein 48 Byte großes Array anlegen, in dem ich die cpuid speichern kann. ALso g++ sagt immer:
Zitat
cpuid.cpp:(.text+0x12): undefined reference to `cpuidstring'
collect2: ld returned 1 exit status

Bitte um Hilfe. thx

bitmaster
14
Offtopic / libgobject-2.0.so.0: wrong ELF class: ELFCLASS64
« am: 20. October 2008, 08:26 »
Hallöchen,

ich habe wieder mal ein Problem mit Linux (openSuSE 11.0 x86-64). Wie schon mal gesagt läuft flash bei mir nicht. Jetzt wollte ich den acroread installieren. Alles wunderbar, aber ich kann ihn nicht starten. Es passiert nichts. Und wenn ich in der Konsole acroread eingebe, dann bekomme ich folgende Meldung:

Zitat
libgobject-2.0.so.0: wrong ELF class: ELFCLASS64

Irgendwas stimmt da nicht. Hat es damit zu tun, dass er es nicht schaft 32 bit anwendungen zu starten? KA was ich machen soll. Ich habe schon Google um Rat gebeten. Aber bis jetzt hat nichts funktioniert. Evtl. könnt ihr mir sagen was da falsch läuft und vielleicht sogar eine Lösung anbieten. Ich wäre euch sehr dankbar.

bitmaster
15
Offtopic / Canon Laserdrucker unter 64 bit Linux
« am: 12. October 2008, 21:03 »
Hallöchen,

ich will mir in naher Zukunft einen Laserdrucker von Canon kaufen. Nun, alles schön und gut. Aber da ich vor nicht all zu langer Zeit auf 64 Bit Linux umgestiegen bin (openSuSE 11.0 x86-64), mache ich mir sorgen, ob er unter Linux auch läuft. Genauer gesagt habe ich mir eigentlich schon einen ausgeguckt. Und zwar den Canon LBP5000. Der kann auch Farbe und ist nicht all zu teuer. Nun gibt es für den aber scheinbar keinen Linux Treiber. Läuft er dann überhaupt nicht unter Linux oder fehlen dann "nur" Zusatzfunktionen? Habt ihr bereits einen unter 64 Bit Linux zum laufen gebracht? So, vielen dank schon mal.

bitmaster
16
Lowlevel-Coding / Qemu und Debbuger
« am: 03. October 2008, 15:25 »
Hi,

unter Bochs kann ich mit bochsdbg (gibts nicht für linux???) mein OS debuggen. Jetzt hätte ich gerne so etwas bei qemu. Also wenn ich z.B. eine adresse angebe soll qemu an dieser stoppen. Also z.B.:

lbreak 0x10000 ;soppt wenn rip = 0x10000
und dann kann ich kommandos wie z.B. s 1 eingeben, dann wird ein Befehl ausgeführt oder s 2 dann zwei usw. mit r kann ich mir dann den Wert der Register anzeigen lassen. Gibt es so etwas auch für qemu?

Und kann man so etwas mit VMware auch machen? Habe mal was vom VMware debugger gehört. Aber kann der auch so etwas?

thx
17
So, jetzt hab ich mal wieder Zeit zum proggen gefunden. Mein ld macht die section .bss automatisch zu PROGBITS. Wie kann ich NOBITS erzwingen? Im linkerscript? Oder über die Kommandozeile? Und wie? Google spuckt nichts aus (zumindest finde ich nichts). Also mein ld sagt immer:

ld: warning: section `.bss' type changed to PROGBITS

Ich möchte aber NOBITS, damit die Datei auf der Platte kleiner ist. Dafür ist .bss doch u.a. auch da, oder nicht?

vielen dank
18
Lowlevel-Coding / ld und base address
« am: 14. August 2008, 06:04 »
Hi,

also ich möchte mittels ld zu einer elf64 Datei linken. Dabei möchte ich gerne die Basisadresse der Datei festlegen sowie die page size. Google sagt mir dass man das mittels --image-base machen kann. Nur leider gibts die Option bei meiner ld Version nicht. Kann man die irgendwie dazukompilieren, wenn ja wie? Das alles soll ja auch mit Scripts gehen. Nur meine Scripts machen immer was anderes. Evtl. könnt ihr mir ja helfen.

thx

bitmaster
19
Hallöchen,

wie ihr ja alle wisst arbeite ich zz. unter Hochdruck an OS-64. Und es bleiben mir noch fast genau 4 Wochen um die neue Build fertig zu stellen. :wink:

Eine Implementation gefällt mir aber ganz und gar nicht. Nur weiß ich leider nicht welche andere und vor allen dingen bessere Möglichkeit es gibt. Ich möchte das Problem an einem Beispiel erläutern:

Prozess A soll "Hallo Welt!" auf den Schirm zaubern. Nun, dazu wird eine Routine der Bibliotheken aufgerufen, die dann per IPC den Grafiktreiber anspricht, genauer gesagt den Prozess, der den Grafiktreiber darstellt (sagt man das so  :? ). Nur woher weiß jetzt Prozess A (bzw. diese Bibliotheksroutine) welcher Prozess der Grafiktreiber ist?

Und genau das gefällt mir an OS-64 nicht. Zz. wird es so gemacht:

Wenn der Prozess, der den Grafiktreiber darstellt startet, gibt er sich über Bibliotheksfunktionen den Namen "display". Der Prozess A muss jetzt auch über Bibliotheksfunktionen nach einem Prozess mit dem Namen "display" suchen und lässt sich dessen PID ausgeben. Jetzt sendet er die Message mittels IPC an den Prozess mit der PID (also an den Grafiktreiber) und die Message "Hallo Welt!" erscheint auf dem Bildschirm.

Um an die Namen zu kommen muss er eine Message an den Prozess mit der PID 1 senden, die für ihn die PID raussucht. Das ganze Senden und Empfangen dauert praktisch ewig (und würde bei einer GUI sicherlich sichtlich zu langsam sein).

Jetzt meine Frage: Gibt es eine schnellere und bessere Variante an die PID eines gewünschten Prozesses zu kommen? Bzw. wie macht ihr das in eurem OS? Evtl. könnt ihr mir ja helfen.

Vielen dank!!!

bitmaster
20
Offtopic / VMware und aufnehmen
« am: 15. June 2008, 18:11 »
Hi,

ich möchte mittels VMware das was ich mit dem Gastbetriebssystem mache als Video aufnehmen. Das kann man ja mittels "VM/Capture Movie..." machen. Aber ich möchte dabei gleichzeitig etwas erkläre, sprich ich möchte Ton aufnehmen. Ich habe ein Mikrofon aber ich weiß nicht wie ich das mit VMware machen kann. Geht das denn überhaupt? Wenn ja, wie? Vielleicht wisst ihr mehr.

danke!!!


bitmaster
Seiten: [1] 2 3 ... 5

Einloggen