We gaan eens experimenteren met diff om bestanden te vergelijken, en met process substitution om de uitvoer van een subshell al streamende te redirecten naar een tijdelijk invoerbestand.

Om de uitvoer van processen te vergelijken, hebben we een commando nodig waar we zinnige vergelijkingen op kunnen doen. Om eens iets anders dan gebruikelijk te nemen, gaan we gebruik maken van het objdump-commando. Dit commando heeft heel veel opties om binaire bestanden (uitvoerbare bestanden, objectbestanden, bibliotheken, etc.) te analyseren en te disassembleren. Om het eenvoudig te houden, gaan we dit enkel gebruiken om te kijken welke functies van externe bibliotheken in een programma gebruikt worden (zoals de C standard library libc), en die met elkaar te vergelijken (van /bin/true en /bin/date, het eerste is extreem simpel en geeft eigenlijk enkel de waarde 0 terug, het tweede gaat de datum printen en formateren; je zal dus verwachten te zien dat date meer datum/tijd-gerelateerde functionaliteit van de C library zal gebruiken).

  1. We gaan eenvoudig beginnen en twee bestanden vergelijken. Gebruik diff (met de --unified of -u vlag) om de bestanden /etc/fstab en /etc/mtab te vergelijken.
  2. Als je aan objdump het argument --dynamic-syms meegeeft (en een bestand), zal alle dynamische symbolen in een bestand uitprinten. Hier zullen ook de externe functies tussen staan. Opnieuw gaan we simpel beginnen en eens deze lijst dynamische symbolen van /bin/true uitprinten.
  3. De functies die gebruikt worden uit externe bibliotheken zijn degenen in die output waar in de relevante lijn ‘UND’ (van undefined) staat. Hou voor /bin/true enkel deze lijnen over.
  4. De namen van deze functies staan helemaal achteraan, en laten we er even van uitgaan dat deze enkel bestaan uit alfanumerieke tekens en een underscore. Hou voor /bin/true enkel de functienamen over uit de lijst van UND-functies. (Ik zou afraden om zomaar cut te gebruiken aangezien er een variabel aantal spaties gebruikt wordt om kolommen te aligneren. Denk eens na over hoe een andere tool hier zou kunnen helpen; een voorbeeld is grep --only-matching.)
  5. Sorteer de lijst uit stap 4
  6. Doe hetzelfde als stap 5, maar dan voor de binary /bin/date.
  7. Gebruik process substitution om met diff de lijst van /bin/true en /bin/date met elkaar te vergelijken.

Als je in de cursus al over vim gelezen hebt, kan je ook eens proberen om hier (op je Linux VM) vimdiff te gebruiken.