Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

LPI Aufgabe - 32 und 64 Bit Programmierung

Frage Entwicklung C und C++

Mitglied: Marco123

Marco123 (Level 1) - Jetzt verbinden

17.12.2009, aktualisiert 12:56 Uhr, 6196 Aufrufe, 15 Kommentare

Die Nutzung des Systemaufrufs
Um den neu definierten Systemaufruf zu nutzen, kann er in einem beliebigen
Programm mit dem Prototypen aufgerufen werden, z. B. in einem Programm
mit dem Namen gauss.c:
Für 32-Bit Prozessoren:

01.
# include <stdio.h> 
02.
# include <linux/unistd.h> 
03.
# include <errno.h> 
04.
# define __NR_prosys 320 
05.
_syscall0(long, prosys); 
06.
main () 
07.
08.
printf(„Berechnung nach der Gauß-Formel \n“); 
09.
printf(„Die Summe ist: %d \n“, prosys() ); 
10.
}
INFORMATION
Kompilieren Sie dieses Programm und führen Sie es aus; als Meldung
müsste auf 32-Bit-Systemen ausgegeben werden:

Berechnung nach der Gauß-Formel
Die Summe ist: 55
AUFGABE:
Für Prozessoren mit 64-Bit Kern ist auch dann, wenn kein 64-Bit Betriebssystem
genutzt wird, die obige Form von
_syscall0(long, prosys);
sowie
printf(„Die Summe ist: %d \n“, prosys() );
nicht möglich. Bei 64-Bit Prozessoren ist der obige Programmcode unter
Berücksichtigung der Funktion syscall() zu ändern.
Nach 3 Tagen googeln, hab ich genug und ersuche das Forum nach Rat.
Meine gefundenen Erkentnisse lauten wie folgt: anstatt "long" sollte man long long nehmen ?
und syscallX() -> X bezeichnet die anzahl der zu übergebenden Parameter.

Aber damit hab ich das Rätzel leider noch nicht gelöst.
Bin erst am beginn meiner C Programmierung unter Linux. Java NPEH aber C :/

vielen Dank
Mitglied: Tommy70
17.12.2009 um 12:38 Uhr
Hallo,

welches Rätsel? Oder habe ich etwas übersehen...
Und ja, es gibt die Möglichkeit Code mittels eines Codeblocks zu formatieren. Dann wäre er eventuell besser lesbar.
Bitte warten ..
Mitglied: Marco123
17.12.2009 um 12:54 Uhr
Für Prozessoren mit 64-Bit Kern ist auch dann, wenn kein 64-Bit Betriebssystem
genutzt wird, die obige Form von
_syscall0(long, prosys);
sowie
printf(„Die Summe ist: %d \n“, prosys() );
nicht möglich. Bei 64-Bit Prozessoren ist der obige Programmcode unter
Berücksichtigung der Funktion syscall() zu ändern.
Bitte warten ..
Mitglied: 6890
17.12.2009 um 15:10 Uhr
Hallo,

abgesehen das ich deine Frage nicht verstehe, würde dir wahrscheinlich ein Blick in manpages von syscall(2) und _syscall(2) helfen:

_syscall(2):
NOTES
Starting around kernel 2.6.18, the _syscall macros were removed from header files supplied to user space. Use syscall(2) instead. (Some architectures, notably ia64, never provided the _syscall
macros; on those architectures, syscall(2) was always required.)

Wenn ich es richtig verstehe, musst du also nur syscall() anstatt _syscall() verwenden:

# include <stdio.h> 
# include <linux/unistd.h> 
# include <errno.h> 
#define _GNU_SOURCE 
#include <unistd.h> 
#include <sys/syscall.h> 
#include <sys/types.h> 
# define __NR_prosys 320 
 
main () 
long gaus = syscall( SYS_prosys ) /* ich schaetze mal dein syscall heisst so?! dann muesste irgendwo noch ein #define SYS_prosys __NR_prosys - oder du nimmst direkt syscall(__NR_prosys) */ 
printf(„Berechnung nach der Gauß-Formel \n“); 
printf(„Die Summe ist: %d \n“, gaus ); 
}
Hoffe ich habe dich korrekt verstanden. BTW was hat das ganze mit LPI zu tun?

MfG
Bitte warten ..
Mitglied: Marco123
17.12.2009 um 15:49 Uhr
Hey, danke erstmal

Die Aufgabe heisst: ändern Sie den 32 bit code in 64bit code um unter berücksichtigung der funktion syscall.

Das ist eine Übungsaufgabe vom Studium für LPI.
-> Da der Linux Kernel in C geschrieben ist, müssen wir die Basics dafür erlernen, deshalb hat es was mit lpi zu tuen :- )

System Calls selber schreiben können ;) @ Linux

jo muss in der System Call Tabelle den Eintrag noch hinzufügen und in ner C Datei noch die Funktion erstellen + prototyp.

Aber vielen dank schonmal, wieso sagt mir mein "man" nichts zu syscall oO in Section 2.

moep moep

dankeschööön
Bitte warten ..
Mitglied: 6890
17.12.2009 um 15:58 Uhr
Hallo,

omfg naja syscalls selber schreiben ist imho schon höherer bis ganz hohe schule und hat nix mit LPI 1/2 zu tun.
Auf die zweite Frage kann ich nur sagen:
apt-get install manpages-dev

MfG
Bitte warten ..
Mitglied: Marco123
17.12.2009 um 16:12 Uhr
Hey,
wieso omfg ?

Finde als Linux Administrator gehört das Wissen über die Funktionsweise des Kernels dazu.....
Sowie auch Syscalls.

Für die LPIC ist es villeicht zu hoch gegriffen, aber das Wissen rund um Kernel und C Programmierung finde ich gut, dass es angeschnitten wird.

Oder wieso findest du das nicht gut ?


greetz
Bitte warten ..
Mitglied: 6890
17.12.2009 um 16:22 Uhr
Heho,

nein du hast mich da falsch verstanden. Ich finde es natürlich auch gut. Es macht aber IMHO keinen sinn gleich mit dem Kernel anzufangen ohne das dazugehörige Grundlagenwissen zu erlangen.
Als KFZ-Mechaniker fängst du ja auch nicht an den Motor auseinander zu nehmen, weißte?

MfG
Bitte warten ..
Mitglied: Oimel1980
19.12.2009 um 00:50 Uhr
@Marco123 mich würde interessieren was bei dir rauskommt "55" ???

mfg
Bitte warten ..
Mitglied: Marco123
03.01.2010 um 17:52 Uhr
hey, ja es kommt 55 heraus

Ein Kommentar muss mehr als 30 Zeichen enthalten! Bitte geben Sie einen aussagefähigen Kommentar ein.
Bitte warten ..
Mitglied: Oimel1980
03.01.2010 um 20:02 Uhr
Hi Marco, bei mir kommt nun auch 55 raus! Aber die Aufgabe

Sie haben sich in einem Programm dieses Lehrbriefs mit der Gauß’schen-Formel beschäftigt. Erzeugen Sie nun einen Systemaufruf mit der Gauß-Formel, an dem bei seinem Aufruf ein Parameter überreicht werden kann. Sodann schreiben Sie ein kleines Shell-Skript (entweder für 32- oder 64-Bit Prozessoren), welches den Systemaufruf
nutzt und als Parameter eine Zahl n weitergibt, der den letzten Wert angibt, der innerhalb der Gauß-Berechnung aufsummiert werden soll: ergebnis = ergebnis + n;
Als n soll maximal der Wert 70.000 gewählt werden können.

Hinweis: Verwenden Sie bei 32-Bit Prozessoren folgenden Prototypen:
#define _syscall1(type_sys, name_sys, type_param, param)

wie und wo bau ich das ein?! Muss dazu prosys.c oder gauss.c abgeändert werden? Die Übergabe eines Wertes ist von der Shell ist dabei eher das kleiner Problem!

mfg
Oimel
Bitte warten ..
Mitglied: Marco123
03.01.2010 um 20:08 Uhr
Hey,

hatte mir das kurz in Java gebaut, die for schleife mit der hochzählung -> bezug auf 55, Korrekt.

Ich hänge auch noch an der scheiß Aufgabe, finde die ein wenig doof gestellt.
Ich schaue jetzt noch 2 filme, dann mache ich mich ebenfalls an die Aufgabe.

also ich habe es bis jetzt erstmal so stehen:

statt void habe ich -> long n -> damit ich einen Parameter abgreifen kann.
prosys.c:

#include <linux/linkage.h>

asmlinkage long sys_prosys(long n) {
long ergebnis = 0;
int i;
for (i=1;i <=10; i++) {
ergebnis = +=i;
}
return ergebnis;
}



// Film geht los bis gleich :- )
Bitte warten ..
Mitglied: Marco123
06.01.2010 um 13:59 Uhr
So Hey,

sry hat länger gedauert, musste noch was anderes machen :/

erstmal der code meines Systemaufrufes prosys.c:

[CODE]

#include <linux/linkage.h>


asmlinkage long sys_prosys(long n) {

long ergebnis=0;
int i;

for(i=1; i<=10;i++) {
ergebnis +=i;
}
ergebnis = ergebnis + n;

return ergebnis;
}


[/CODE]

meine frage ist nun:
in der Aufgabe steht:
erstellen Sie nun ein Script, welches den Systemaufruf nutzt.

Würdest du erst noch gauss.c schreiben um von dort den Systemcall zu nutzen, oder kennst du eine Möglichkeit direkt aus nem Shellscript nen Systemaufruf zu nutzen ?

danke


PS: ich habe die Gaussformel direkt in den Systemaufruf implementiert.

gruß
Bitte warten ..
Mitglied: 90476
12.05.2010 um 11:25 Uhr
Hallo zusammen,

ist das Ding gelöst ? Mich würde die Lösung ineteressieren, da ich am gleichen Problem hänge.

Grüße
Bitte warten ..
Mitglied: Marco123
12.05.2010 um 20:12 Uhr
25 € gibts die Musterlösung :- )

0 € = les Dir oben meine Antwort durch und versuche mit deinem Wissen was du gelernt hast dies zu vollenden.

Wieso gebe ich nicht gleich die antwort? da ich sie nicht bekam und auch froh darum bin! sonst hätte ich es nicht gerafft wie es geht.
Bitte warten ..
Mitglied: 90476
12.05.2010 um 21:19 Uhr
Ich kriegs noch nicht mal gebacken meinen sch...kernel zu kompilieren. undefined reference to sys_prosys. Scheissdreck ... sorry.
Ist aber so. Ich sitze jetzt 3 Wochen an diesem Müll rum und schmeiße den Mist gleich ganz weg. Das ist der Punkt wo ich echt am verzweifeln bin.
Ich bin nicht zu blöde. Habe schon Ubuntu, Debian 5, Gentoo versucht. Nix. Habe 2000000 Anleitungen gelesen und befolgt. Die Anleitung aus dem Lehrbief inbegriffen. Nix.
Mein Gott, das kann doch nicht so wild sein so einen Scheiss Systemcall zu implementieren.
Wie gesagt. Ich bin fertig damit und werde das noch ein wenig probieren bis ich den Lehrgang schmeiße. Ich bin kein Programmierer und kann das einfach nicht. Ich weiß nicht wo mein Fehler liegt. Alles ist gemacht, ob unistd_32.h, ob syscalls.h ob prosys.c, das Makefile usw usw. 1000000000 mal geprüft und wiederholt. Nix.
Ich weiß ich mach es richtig. Ich habe mit Sicherheit irgendeine Miniatur-Kleinigkeit vergessen. Ich wäre um die Antwort dankbar. Dafür gäbe es sogar 30 €


Zusatz vom 18.05.2010

Habe es jetzt hinbekommen meinen Kernel zu komilieren. Macht auch schön seine "55" aus gauss.c heraus.
Leider aber nicht mit dem Programm aus dem Lehrbuch.
Bei mir funktioniert aber:

#include <sys/syscall.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>

#define __NR_prosys 337

int prosys ()
{
return syscall(__NR_prosys);
}
main()
{
printf("Berechnung nach der Gauss-Formel \n");
printf("Die Summe ist: %d \n", prosys());
}

ohne Probleme.
Bitte warten ..
Ähnliche Inhalte
CPU, RAM, Mainboards
32 oder 64 bit
gelöst Frage von mike7050CPU, RAM, Mainboards8 Kommentare

Hallo, Ich habe einen PC mit einem Intel 7500 Prozessor mit 2.9 Ghz und 3 Gb RAM zur Zeit ...

Windows Server
32-bit Druckertreiber auf 64-bit Druckserver
gelöst Frage von hpw2Windows Server9 Kommentare

Hallo Leute, ich habe das Problem, das ich mit unserem Druckserver (2008R2) sowohl Win7 32-bit wie auch 64-bit Clients ...

Windows Server
Wsus Patche für 64 und 32 Bit
Frage von bodegabarWindows Server3 Kommentare

folgenes Szenario: Am Firmenhauptsitz befindet sich ein WSUS Server ( Name: Server13 ). Dieser läd die benötigten Updates direkt ...

Windows 10
Windows 10 von 32 auf 64 bit
gelöst Frage von jensgebkenWindows 1013 Kommentare

Hallo Gemeinschaft, habe einen W10 32bit Rechner und würde zwecks Adressierung von mehr Arbeitsspeicher W10 64 bit rauf spielen. ...

Neue Wissensbeiträge
Linux

Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde

Information von Frank vor 1 StundeLinux7 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 1 TagBatch & Shell9 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 1 TagHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 1 TagMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Heiß diskutierte Inhalte
Router & Routing
Zwei Netzwerke erstellen
Frage von bunteblumeRouter & Routing13 Kommentare

Hallo Zusammen, Ich möchte gerne ein backup von einem bestimmten Folder welcher auf dem Server regelmässig synchronisiert wird auf ...

Off Topic
Fachkräftemangel in Deutschland? - Talentschmiede schreibt alle 2 Tage die gleichen Stellen aus
Frage von Penny.CilinOff Topic12 Kommentare

Hallo, haben wir in Deutschland Fachkräftemangel? Die Talentschmiede schreibt gefühlt alle zwei Tage dieselben Stellen aus. Und das schon ...

Microsoft Office
Outlook Cache Mode Frage
Frage von GwaihirMicrosoft Office11 Kommentare

Hallo zusammen, bin gerade neu in der Firma und lerne hier einige neue Dinge kennen. Zum Beispiel, dass die ...

Windows Server
Windows Store Apps
gelöst Frage von PeterleBWindows Server11 Kommentare

Gibt es einen Weg, auf Windows Server 2016 Windows Store Apps wie zum Beispiel die HP Smart App zu ...