Frage zu strace und seinen System Calls

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
Benutzeravatar
Pix
Beiträge: 275
Registriert: 31.01.2003 14:22:21

Frage zu strace und seinen System Calls

Beitrag von Pix » 17.02.2006 10:30:52

Hallo,

Ich wähle mich mit dem Programm wvdial in das Internet ein, und wollte wissen, auf welche Programme wvdial alles zugreift um die Verbindung zum Internet herzustellen.

Meine Frage:
Was bedeuten die Systemcalls ‚open’ ‚write’ und ‚close’?

Bedeutet ‚open’ das eine Datei nur geöffnet wird`, oder das sie z.b auch ausgeführt wird.?
Bedeutet ‚write’ das in die Datei geschrieben wird, wenn ja, was wird in sie geschrieben?

Anscheinend werden die Informationen nicht nacheinander abgearbeitet. (siehe unten)
In Zeile 2 mit:

Code: Alles auswählen

open("/etc/wvdial.conf", O_RDONLY|O_NONBLOCK|O_LARGEFILE) = 4
stehen alle Infos über den Einwahlvorgang drin, dieser wird aber mit einem in Zeile 6

Code: Alles auswählen

open("/var/lock/LCK..ttyACM0", _RDWR|O_NONBLOCK|O_CREAT|O_EXCL|O_LARGEFILE, 0644) = 4
unterbrochen und der Einwahlvorgang später fortgesetzt.
Warum, woher kommen diese Informationen?

Vielen Dank
Dirk

Ein Auszug von strace –e open,write wvdial

open("/dev/null", O_RDONLY|O_NONBLOCK|O_LARGEFILE) = 4
open("/etc/wvdial.conf", O_RDONLY|O_NONBLOCK|O_LARGEFILE) = 4
write(3, "--> ", 4) = 4
write(3, "WvDial: Internet dialer version "..., 38) = 38
write(3, "\n", 1) = 1
open("/var/lock/LCK..ttyACM0", O_RDWR|O_NONBLOCK|O_CREAT|O_EXCL|O_LARGEFILE, 0644) = 4
write(4, " 2545\n", 11) = 11
open("/dev/ttyACM0", O_RDWR|O_NONBLOCK|O_NOCTTY|O_LARGEFILE) = 4
write(3, "--> ", 4) = 4
write(3, "Cannot get information for seria"..., 39) = 39
write(4, "\r", 1) = 1
write(4, "\r", 1) = 1
write(4, "\r", 1) = 1
write(4, "\r", 1) = 1
write(4, "\r", 1) = 1
write(3, "\n", 1) = 1
write(3, "--> ", 4) = 4
write(3, "Initializing modem.", 19) = 19
write(3, "\n", 1) = 1
write(4, "\r\r\r\r\r", 5) = 5
write(4, "ATZ\r", 4) = 4

--- snipp

open("/etc/localtime", O_RDONLY) = 8
write(3, "--> ", 4) = 4
write(3, "Starting pppd at Thu Feb 16 15:0"..., 41) = 41
write(3, "\n", 1) = 1
open("/etc/ppp/pap-secrets", O_RDONLY|O_NONBLOCK|O_LARGEFILE) = 8

--snipp

write(3, "Script /etc/ppp/ip-up run succes"..., 36) = 36
write(3, "\n", 1) = 1
open("/proc/net/route", O_RDONLY|O_LARGEFILE) = 9
write(3, "--> ", 4) = 4
write(3, "Default route Ok.", 17) = 17
write(3, "\n", 1) = 1
open("/etc/resolv.conf", O_RDONLY|O_LARGEFILE) = 9
write(3, "--> ", 4) = 4
write(3, "warning, no nameserver found `/e"..., 47) = 47

Benutzeravatar
Silke
Beiträge: 559
Registriert: 17.05.2005 15:58:20
Wohnort: Hannover
Kontaktdaten:

Re: Frage zu strace und seinen System Calls

Beitrag von Silke » 17.02.2006 11:18:38

Moin
Pix hat geschrieben: Anscheinend werden die Informationen nicht nacheinander abgearbeitet. (siehe unten)
In Zeile 2 mit:

Code: Alles auswählen

open("/etc/wvdial.conf", O_RDONLY|O_NONBLOCK|O_LARGEFILE) = 4
stehen alle Infos über den Einwahlvorgang drin, dieser wird aber mit einem in Zeile 6

Code: Alles auswählen

open("/var/lock/LCK..ttyACM0", _RDWR|O_NONBLOCK|O_CREAT|O_EXCL|O_LARGEFILE, 0644) = 4
unterbrochen und der Einwahlvorgang später fortgesetzt.
Warum, woher kommen diese Informationen?
Naja, wvdial öffnet halt erst mal seine Configdatei, liest aus, welche serielle Schnittstelle
verwendet werden soll, schreibt dafür ein Lock und versucht sie - sinnvollerweise erst
nach dem Schreiben des Lockfiles - zu öffnen. Dass die Configdatei so lange offen
bleibt, ist sinnvoll, weil ja weitere Daten daraus gebraucht werden, sobald die serielle
Verbindung steht.

Gruß,
- Silke -
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann. Das Gegenteil ist schon schwieriger.
- Kurt Tucholsky -

Benutzeravatar
Pix
Beiträge: 275
Registriert: 31.01.2003 14:22:21

Beitrag von Pix » 17.02.2006 16:12:53

Danke Silke.
Deine Erklärung macht Sinn. Da ich kein Coder bin ergeben sich für mich weitere x-Fragen zu strace und seinen System-Calls.

Eigentlich habe ich –zig Fragen zu „strace“, hoffe aber, dass sich einige Fragen von selbst mit eurer Hilfe erledigen.

1. Frage
Ist es möglich, dass strace vor jeder Zeile eine Zeilennummer schreibt, und diese dann fortlaufend nummeriert.
Hintergrund ist hier, eine einfachere Auswertung der Datei bzw. welche Möglk. habe ich dies zu machen.

2. Frage
Ich habe wvdial mit „strace –f …wvdial“ noch mal neu gestartet, dass heißt, diesmal ohne Filterregeln. Das Ergebnis waren 123 DIN A Seiten Output von strace.

Einige wichtige für mich zu klärende Anschnitte habe ich herausgezogen und möchte diese mit euch gerne besprechen, auch wenn ich weiß, dass dies eine mühsame Angelegenheit ist.

Darum vorneweg, vielen Dank für eure Mühe:

Um die Sache zu beschleunigen, habe ich es als Frage/Antwort aufgezogen. Wenn ihr mich nicht berichtigt, gehe ich davon aus, dass ich Recht habe.

## Hier wird wvdial mit der PID 2333 gestartet:
## Richtig?
2333 execve("/usr/bin/wvdial", ["wvdial"], [/* 26 vars */]) = 0
2333 uname({sys="Linux", node="debian", ...}) = 0
2333 brk(0) = 0x8064000
-snipp

## Hier wird von wvdial auf die Datei /etc/wvdial.conf zugegriffen und anschließend
## geöffnet und gelesen. Richtig?
2333 rt_sigaction(SIGHUP, {0x804d380, [HUP], SA_RESTART}, {SIG_DFL}, 8) = 0
2333 access("/etc/wvdial.conf", F_OK) = 0
2333 open("/etc/wvdial.conf", O_RDONLY|O_NONBLOCK|O_LARGEFILE) = 4
2333 fcntl64(4, F_SETFD, FD_CLOEXEC) = 0
2333 fstat64(4, {st_mode=S_IFREG|0755, st_size=933, ...}) = 0
2333 select(5, [4], [], [], {0, 0}) = 1 (in [4], left {0, 0})
2333 read(4, "\n\n\n\n[Dialer Defaults]\nProvider ="..., 1024) = 933
2333 select(5, [4], [], [], {0, 0}) = 1 (in [4], left {0, 0})
2333 read(4, "", 1024) = 0
2333 close(4) = 0

## Hier wird von wvdial auf die Datei /root/.wvdialrc
## Richtig?
2333 access("/root/.wvdialrc", F_OK) = -1 ENOENT (No such file or directory)
2333 write(3, "--> ", 4) = 4

## Ich vermute, wvdial ließt die Infos aus der Datei "/etc/wvdial.conf“
## Richtig?
## Frage: was bedeutet write(3 …)
2333 write(3, "WvDial: Internet dialer version "..., 38) = 38
2333 write(3, "\n", 1) = 1
2333 open("/var/lock/LCK..ttyACM0", O_RDWR|O_NONBLOCK|O_CREAT|O_EXCL|O_LARGEFILE, 0644) = 4
2333 fcntl64(4, F_SETFD, FD_CLOEXEC) = 0

## Hier bekommt wvdial die PID 2333.
## Frage: wvdial hat seit dem Start des Programms diese PID. Warum wird diese hier erst zugewiesen
2333 getpid() = 2333
2333 write(4, " 2333\n", 11) = 11
2333 close(4) = 0
2333 open("/dev/ttyACM0", O_RDWR|O_NONBLOCK|O_NOCTTY|O_LARGEFILE) = 4
2333 write(3, "\n", 1) = 1
2333 write(3, "--> ", 4) = 4
2333 write(3, "Initializing modem.", 19) = 19
2333 write(3, "\n", 1) = 1
2333 write(4, "\r\r\r\r\r", 5) = 5
2333 select(5, [4], [], [], {0, 100000}) = 0 (Timeout)
2333 write(4, "ATZ\r", 4) = 4
2333 write(3, "--> ", 4) = 4
2333 write(3, "Sending: ATZ", 12) = 12
2333 write(3, "\n", 1) = 1
2333 select(5, [4], [], [], {5, 0}) = 1 (in [4], left {4, 528000})
2333 time(NULL) = 1140183944
2333 read(4, "ATZ\r\r\nOK\r\n", 1024) = 10
2333 select(5, [4], [], [], {0, 100000}) = 0 (Timeout)
2333 write(3, "ATZ", 3) = 3
2333 write(3, "\n", 1) = 1
2333 write(3, "OK", 2) = 2
Snipp

## Frage: wer greift auf pppd zu und startet es?
2333 access("/usr/sbin/pppd", X_OK) = 0
2333 time([1140183992]) = 1140183992
2333 open("/etc/localtime", O_RDONLY) = 8
2333 fstat64(8, {st_mode=S_IFREG|0644, st_size=837, ...}) = 0
2333 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f2c000
2333 read(8, "TZif\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\0\0\0\10"..., 4096) = 837
2333 close(8) = 0
2333 munmap(0xb7f2c000, 4096) = 0
2333 write(3, "--> ", 4) = 4
2333 write(3, "Starting pppd at Fri Feb 17 14:4"..., 41) = 41
2333 write(3, "\n", 1) = 1

## Frage: Wer öffnet pap-secrets?
2333 open("/etc/ppp/pap-secrets", O_RDONLY|O_NONBLOCK|O_LARGEFILE) = -1 ENOENT (No such file or directory)
2333 open("/etc/ppp/pap-secrets", O_WRONLY|O_NONBLOCK|O_CREAT|O_TRUNC|O_LARGEFILE, 0600) = -1 EPERM (Operation not permitted)
2333 open("/etc/ppp/chap-secrets", O_RDONLY|O_NONBLOCK|O_LARGEFILE) = -1 ENOENT (No such file or directory)
2333 open("/etc/ppp/chap-secrets", O_WRONLY|O_NONBLOCK|O_CREAT|O_TRUNC|O_LARGEFILE, 0600) = -1 EPERM (Operation not permitted)
2333 write(3, "--> ", 4) = 4
2333 write(3, "Warning: Could not modify /etc/p"..., 71) = 71
2333 write(3, "\n", 1) = 1
2333 write(3, "--> ", 4) = 4


## Frage: Hier wird pppd gestartet. Durch welches Programm?
2333 write(3, "--> ", 4) = 4
2333 write(3, "pid of pppd: 2335", 17) = 17
2333 write(3, "\n", 1) = 1
2333 time(NULL) = 1140183992
2333 select(5, [4], [], [], {0, 100000} <unfinished ...>
2335 execve("/usr/sbin/pppd", ["/usr/sbin/pppd", "57600", "modem", "crtscts", "defaultroute", "usehostname", "-detach", "user", "154595@ngi.de", "noipdefault", "call", "wvdial", "usepeerdns", "idle", "0", "logfd", ...], [/* 26 vars */]) = 0
2335 uname({sys="Linux", node="debian", ...}) = 0

2335 getpid() = 2335
2335 rt_sigaction(SIGPIPE, {0xb7f1ca70, [], 0}, {SIG_IGN}, 8) = 0
2335 send(4, "<151>Feb 17 14:46:50 pppd[2335]:"..., 73, 0) = 73
2335 rt_sigaction(SIGPIPE, {SIG_IGN}, NULL, 8) = 0
2335 write(6, "sent [LCP TermReq id=0x2 \"User r"..., 40) = 40
2335 write(6, "\n", 1) = 1
2335 write(13, "\300!\5\2\0\20User request", 18) = 18
2335 gettimeofday({1140184010, 674500}, NULL) = 0

## Frage: Hier erfolgt einen Änderung der PID. Durch welches Programm wurde das ausgelöst und wer bekommt die neue PID?
2364 <... close resumed> ) = 0
2364 setsid() = 2364
2364 umask(077) = 022
2364 chdir("/") = 0
2364 setuid32(0) = 0
2364 getegid32() = 0
2364 setgid32(0) = 0
2364 execve("/etc/ppp/ip-down", ["/etc/ppp/ip-down", "ppp0", "/dev/ttyACM0", "57600", "195.179.210.167", "195.179.199.254"], [/* 15 vars */]) = 0
2364 uname({sys="Linux", node="debian", ...}) = 0
2364 brk(0) = 0x80e6000
2364 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,

Antworten