Donnerstag, 3. Januar 2008

Happy new Year 2008 und arm-elf-flthdr !!!

So wieder ein grosses Stück weiter !
Ich habe den inetd-Prozess übersetzt und lauffähig gemacht.

Doch der Reihe nach !

Zu erst habe ich das Tool arm-elf-flthdr schätzen und kennen gelernt.
Sieht man sich nämlich ein für die original binary des IP-Drives an, so fällt einem
im Hexeditor auf, dass man keine ASCII Zeichenketten findet. Dies fand ich komisch.
Aber mit arm-elf-flthdr bin auch auf die Spur gekommen !
Ein arm-elf-flthdr -p helloworld unserer helloworld-Anwendung liefert:
helloworld
Magic: bFLT
Rev: 4
Build Date: Thu Jan 3 20:49:40 2008
Entry: 0x50
Data Start: 0x6340
Data End: 0x7390
BSS End: 0x7640
Stack Size: 0x1000
Reloc Start: 0x7390
Reloc Count: 0x83
Flags: 0x1 ( Load-to-Ram )

Mache ich den gleichen Aufruf mit einem original Binary, z.B. mount aus /bin:
mount
Magic: bFLT
Rev: 4
Build Date: not specified
Entry: 0x40
Data Start: 0xba50
Data End: 0xe810
BSS End: 0xfb9c
Stack Size: 0x1000
Reloc Start: 0xe810
Reloc Count: 0x2d2
Flags: 0x5 ( Load-to-Ram Gzip-Compressed )

Die Files auf dem IP-Drive sind also gezipet !!!

mit "arm-elf-flthdr -z datei" zipped man die Files und mit -Z unzippet man sie wieder !

Ich habe also ein unzip aus sysinit (unser erster Prozess !) gemacht und dort so einiges gefunden !!!!
sysinit liest die system.conf und ruft ifconfig auf und startet danach den inetd-Prozess.

inetd selber liest normaler weise die inetd.conf ein, aber diese Version ist gepached und hat hart
einkodiert, dass es die Prozesse
/mnt/kbipd/bin/ftpd
/mnt/kbipd/bin/swat
/mnt/kbipd/bin/nmbd
/mnt/kbipd/bin/smbd
und die das in der Distribution nicht enthaltene
/mnt/kbipd/bin/telnetd

Nachdem das bekannt war, habe ich aus der ucLinux Distribution nach dem Helloworld Beispiel
das Makefile für inetd erstellt.
Leider sind da noch ein paar Fallstricke drin ! z.B. wird in inetd.c die Funktion getservbyname() aufgerufen. Diese liefert normalerweise die services aus /etc/services !
Leider exisitiert diese Datei im romfs des IPO-Drive nicht und auch sonst gibht es keine Defautls.
Ich musste die Funktion selber schreiben (bzw. aus bestehenden Implem,entierungen kopieren.
Nachdem ich dies getan hatte, konnte ich über die inted.conf die oben (ausser telnetd) beschriebenen Prozesse starten !
Sobald ich alle Debugmeldungen wieder entfernt habe, stelle ich die Sourcen an dieser Stelle und auch das Makefile bereit !

Gruß
Fossi