
Introduktion till GNU Binutils: En Nybörjarguide
GNU Binutils för Nybörjare: Kompilera, Länka och Felsöka Programvara
Vad är GNU Binutils?
GNU Binutils (förkortning av ”Binary Utilities”) är en uppsättning kommandoradsverktyg för att hantera objektfiler, körbara filer och binära data. Dessa verktyg används för uppgifter som att assemblra kod, länka bibliotek, disassemblra körbara filer och analysera kompilerade program.
Paketet Binutils innehåller några av de viktigaste verktygen i en utvecklares verktygslåda, såsom:
- as (assemblatorn)
- ld (länkaren)
- objdump (för att inspektera binärfiler)
- nm (för att lista symboler i objektfiler)
- readelf (för att läsa information om ELF-filer)
- strings (för att extrahera läsbar text från binärfiler)
- strip (för att ta bort onödig data från binärfiler)
- size (för att visa sektionernas storlekar)
- objcopy (för att kopiera och modifiera objektfiler)
- addr2line (för att koppla adresser till källkod)
- ar (för att skapa och hantera arkiv)
Fördelar
Om du sysslar med programmering (särskilt i språk som C eller C++) och systemadministration kommer du förr eller senare att stöta på GNU Binutils.
- För utvecklare: Binutils är ett måste för att kompilera och felsöka programvara.
- För systemadministratörer: Dessa verktyg hjälper till att analysera körbara filer för säkerhet och kompatibilitet.
- För de som sysslar med reverse engineering: Binutils gör det möjligt att inspektera och modifiera binärfiler.
- För hobbyister: Binutils hjälper dig att förstå hur körbara filer fungerar under ytan.
- Många populära utvecklingsmiljöer och operativsystem förlitar sig på Binutils i bakgrunden.
- Binutils är öppen källkod: Du kan använda, modifiera och distribuera dessa verktyg utan att oroa dig för licensavgifter.
Kort sagt kan förståelse för Binutils göra dig till en mer effektiv och skicklig programmerare eller systemadministratör.
Hur Man Använder GNU Binutils Verktyg
Låt oss gå igenom några av de viktigaste verktygen i GNU Binutils och hur de kan hjälpa dig.
1. as: GNU Assemblator
as
konverterar assemblerkod till maskinkod.
Exempel:
as hello.s -o hello.o
Detta kompilerar en assembler-källfil (hello.s) till en objektfil (hello.o).
2. ld: GNU Länkare
ld
länkar objektfiler för att skapa en körbar fil.
Exempel:
ld -o hello hello.o
Detta länkar hello.o till en körbar fil kallad hello.
3. objdump: Inspektera Körbara Filer
objdump
visar detaljerad information om objektfiler och körbara filer.
Exempel:
objdump -d /bin/ls | less
Detta disassemblrar kommandot ls, vilket visar dess assemblerinstruktioner.
4. nm: Lista Symboler i en Binär
nm
listar symboler (funktioner och variabler) i en objektfil eller körbar fil.
Exempel:
nm hello.o | head
Detta visar de första symbolerna i objektfilen hello.o.
5. readelf: Läs ELF-huvuden
readelf
ger detaljerad information om ELF-filer (Executable and Linkable Format).
Exempel:
readelf -h /bin/ls
Detta visar ELF-huvudet för kommandot ls.
6. strings: Extrahera Läsbar Text från Binärfiler
Verktyget strings
hittar och extraherar läsbar text från binärfiler.
Exempel:
strings /bin/ls | grep "Usage"
Detta söker efter användningsmeddelanden inuti binärfilen ls.
7. strip: Minska Binärfilens Storlek genom att Ta Bort Symboler
Kommandot strip
tar bort onödiga symboler från körbara filer, vilket minskar deras storlek.
Exempel:
strip myprogram
Detta minimerar storleken på myprogram genom att ta bort felsökningssymboler.
8. size: Visa Sektioners Storlek
Verktyget size
visar minnesanvändningen för olika sektioner i en objektfil.
Exempel:
size /bin/ls
Detta visar storleken på text-, data- och bss-segmenten (oinitierad data) för ls.
9. objcopy: Kopiera och Modifiera Objektfiler
Verktyget objcopy
låter dig manipulera objektfiler.
Exempel:
objcopy --only-keep-debug myprogram myprogram.debug
Detta extraherar felsökningssymboler till en separat fil.
10. addr2line: Kartlägga Adresser till Källkod
Kommandot addr2line
hjälper till att koppla en minnesadress till motsvarande rad i källkoden.
Exempel:
addr2line -e /bin/ls 0x4005a0
Detta visar vilken rad i ls-källkoden som motsvarar minnesadressen 0x4005a0.
11. ar: Arkivverktyget
Verktyget ar
används för att skapa och hantera arkiv med objektfiler. Dessa arkiv, ofta kallade statiska bibliotek, kan länkas in i dina program för att återanvända kod.
Exempel:
Du kan skapa ett bibliotek med:
ar rcs libmylib.a file1.o file2.o
och sedan länka det till ditt program.
Praktiskt Exempel: Felsökning av ett Enkelt C-program
Som tidigare nämnts är GNU Binutils en samling binärverktyg som är avgörande för att arbeta med körbara filer, objektfiler och bibliotek i Linux. Dessa verktyg är användbara för felsökning, disassemblering och analys av binärfiler.
I följande exempel kommer vi att använda objdump, nm och readelf för att felsöka.
Översikt över Verktygen
- objdump: Disassemblerar binärfiler, visar objektfilsektioner och extraherar information från körbara filer.
- nm: Visar symboler (funktioner, variabler, etc.) från objektfiler.
- readelf: Visar detaljerad information om ELF-filer (Executable and Linkable Format).
Skapa ett Exempelprogram i C
Låt oss börja med att skriva ett enkelt C-program, kompilera det och sedan analysera det med Binutils.