Biehler goes Linux ASM -> Socket erstellen?

Biehler

BiehlerProductions
ID: 89792
L
4 Mai 2006
1.948
181
Hi,

weil ich nu seit 3 Wochen nen vServer mit SSH Zugang hab, kam ich vor drei Tagen auf den Gedanken, dass ich nu ja mal unter Linux programmieren könnte.

Im Moment allerdings bin ich etwas verwirrt, ein erstes Linux ASM "Hello World" Prog funktioniert ja schonmal super, aber jetzt wollte ich mal testweise eine Client-Server Anwendung erstellen.

Nur irgendwie such ich mir nen Ast ab, welche Funktion ich dafür brauch :ugly:

Bin auch irfgendwie noch etwas unsicher:

Unter Windows hab ich ja die WinAPI, da kann ich ja ganz simple die Funktionen aufrufen mit "CALL gethostbyname" usw usf.

Unter Linux hab ich halt keine "LinuxAPI", sondern nur den Interrupt 80h?

Hab mich mal auf die Suche gemacht, um ne Auflistung der Funktionsnummern zu bekommen, das ist dabei rausgekommen:

https://asm.sourceforge.net//syscall.html

ABER:
Welche Funktion brauch ich jetzt eigentlich, um nen Socket zu erstellen?
Oder muss ich unter Linux erstmal nen Netzwerk Treiber basteln, um Zugriff auf die Netzwerkkarte zu bekommen?

Edit:
Und noch eins:
Es gibt ja die libc, UClibc und weiter Abarten davon.
Wie könnte ich diese eigentlich mit ASM ansprechen?
 
Zuletzt bearbeitet:
Ich würd da eher direkt in nem Linux-Forum anfragen, glaub nicht dass sich hier soo viele Linux-ASM-Programmierer rumtreiben. Und dieses 80h ist glaub ich auch sowas wie ne API, du kannst darüber zB irgendwie Zeichen auf stdout schreiben, etc. (ich hab sowas von wenig Ahnung von ASM, also bitte nich all zu hart schlagen :| )

Netzwerktreiber musst du aber wohl kaum noch dazu schreiben. Und auf die Seite, die du gepostet hast, würde ich mich nicht verlassen ("List is intended to cover Linux 2.4 / 2.2 / 2.0."), momentan sind wir bei Linux 2.6 (genauer gesagt ist 2.6.24 in Entwicklung (rc6 draußen) :) ). Und warum willste das eigentlich in ASM machen? Ich könnt mir vorstellen dass das in C einfacher ist, und in Python nen Klacks :) Bei Python haste es auch gleich noch plattformunabhängig :)

mfg
 
Unter Windows hab ich ja die WinAPI, da kann ich ja ganz simple die Funktionen aufrufen mit "CALL gethostbyname" usw usf.
Tipp mal "man gethostbyname" auf der Konsole ein ;)

Link dir die C-Bibliotheken (libc, kp, ob das alles is; bin kein Linux-Spezialist) dazu, dann kannst du deine bekannten Funktionen verwenden.

Ich hab das letztes Semester gesehen, wie man mit Assembler die Tastaturlämpchen durchblinken lassen kann :ugly: Man braucht bloß vorher n Systemcall, um dass dich der Kernel an die I/O ran lässt.
 
@chrissel: Full Ack :ugly:

@theHacker
Hm "man gethostbyname" hat nix gebracht.
No manual entry for gethostbyname

Ich hab jetzt ne Liste gefunden, die scheint hinzuhauen.
( https://webster.cs.ucr.edu/Page_Linux/LinuxSysCalls.pdf )
Nur sind da die Strukturen nicht mit angegeben, aber die werd ich schon irgendwo herbekommen.

Aber ich hab ein Problem:
Es gibt die Funktion "chmod", Funktionsnummer 15.
Die erwartet als Parameter den Dateinamen und den Modus
procedure linux.chmod( filename:string; mode:linux.mode_t );

Nach meinen Recherchen müsste mode_t ein stinknormaler Integer sein, jedoch wenn ich dann aufrufe:

PHP:
MOV eax, 15
mov ebx, msg
mov ecx, 777
xor edx,edx
xor esi,esi
xor edi,edi
int 80h
;...
msg 	db 	'test.asm',0,0x0A

Hat die test.asm nicht den Modus 777 sondern 410.

Ist mode_t ein spezielles Bitfeld?

--
//Edit:
OK Hat sich erledigt.
Ich brauch nur die Bitweise OR Verknüpfung machen, dann die daraus folgende Zahl 511 übergeben, dann hauts auch hin.
Warum wird dann eigentlich überall 777 für allumfassende Dateirechte gegeben (FTP z.b)

@Lib
Ich wred das mal ausprobieren mit Lib einbindne und Co, hab ich in der Art noch nie probiert, oder ist das nix anders, als wenn ich unterm MASM schreib:
include \include\user32.inc
includelib \includelib\user32.lib

Sorry für die Frage, ich weis, https://gidf.de ^^
Aber wenn der Thread sowieso schonmal existiert :biggrin:
 
Zuletzt bearbeitet: