2016-06-29 4 views
0

Ich zerlege ein sehr einfaches ELF-Programm (Linux x86).
Mit IDA PRO Software sehe ich stdout und stderr in .bss-Sektion. Und ich habe nichts gefunden, das die Werte stdout oder stderr setzt. Wie funktioniert es?
stdout und stderr null sein?Wie kennt Elf-Loader die Adresse von stderr und stdout

+0

stdout und stderr sind Dateihandles, die von der c-Laufzeitumgebung erstellt werden. Ihr Programm erwartet, dass das System sie bereits erstellt hat. http://www.gnu.org/software/libc/manual/html_node/Standard-Streams.html – SnakeDoc

+0

Also meinst du stdout und stderr sollte immer an der gleichen Speicheradresse in .bss sein? – Bob5421

Antwort

1

So meinen Sie stdout und stderr immer an der gleichen Speicheradresse in .bss

Der Offset vom Beginn der .bss zu stdout und stderr wird bestimmt bei statischer Link Zeit sein sollte.

Die Adresse von Start .bss unterliegt ASLR (Heap Placement Randomization). Daher kann sich die Adresse stdout für eine gegebene Binärdatei von Lauf zu Lauf ändern.

wie IDA Pro diesen Artikel in .bss weiß ist stdout oder stderr

Der einzige Weg, es kann wissen, ist, über die Symboltabelle. Sie sollten es in der Ausgabe von sehen:

readelf -Ws ./a.out | egrep 'stdout|stderr' 
nm ./a.out   | egrep 'stdout|stderr' 
nm -D ./a.out  | egrep 'stdout|stderr' 

Update:

aber was passiert, wenn Symboltabelle

gestrippt wird, gibt es zwei Fälle zu betrachten: voll statischen Link und dynamische Verbindung.

Im vollstatischen Fall alle Verweise auf stderr vollständig entfernt werden, und IDA Pro nicht wissen, wo stderr ist.

Im dynamisch verknüpften Fall gibt es zwei Symboltabellen: die "normale" (angezeigt durch nm) und die dynamische (angezeigt durch nm -D). Strip entfernt nur die reguläre Symboltabelle (weil das Entfernen der dynamischen Symboltabelle keinen Sinn ergibt - die ausführbare Datei wird nicht ohne sie ausgeführt). IDA pro kann dann den dynamischen Symboltabelleneintrag für stderr verwenden, um zu ermitteln, wo sich dieses Symbol befindet.

+0

in der Tat, was ich nicht verstehe ist, wie IDA Pro kennt diesen Artikel in .bss ist stdout oder stderr ... – Bob5421

+0

@ Bob5421 Ich habe die Antwort aktualisiert. –

+0

Okay, aber was passiert, wenn die Symboltabelle entfernt wird? – Bob5421

Verwandte Themen