
asadbg is a framework of tools to aid in automating live debugging of Cisco ASA devices
Vorabhinweis: wir empfehlen, dies als Teil von asatools zu verwenden, aber es kann auch eigenständig verwendet werden.
asadbg ist ein Framework von Werkzeugen, um die Automatisierung des Live-Debugging von Cisco-ASA-Geräten zu unterstützen und die Interaktion mit der Cisco-CLI über seriell/ssh zu automatisieren, um sich wiederholende Aufgaben schnell durchzuführen.

asadbg.cfg, um das Debugging verschiedener
Versionen einfach zu ermöglichenDas Hauptwerkzeug ist asadbg.py, und es führt die meisten anderen Hilfsskripte
aus. Beachten Sie, dass Sie möglicherweise zunächst
asafw verwenden müssen, um Firmware zu entpacken und die beste
Variante von asadbg zu erhalten.
asadbg.py: Hauptwerkzeug zum Debuggen von ASAsasdbg_hunt.py/asadbg_rename.py: IDA-Python-Skript zur Verwendung mit idahunt zum Importieren von Symbolen für neue ZieleDie folgenden werden automatisch von asadbg.py importiert, aber wir geben Ihnen einige
Informationen dazu, wofür sie sind:
asa_lib*.py: gdb-Python-Skripte zur Verwendung von
libdlmalloc,
libptmalloc und
libmempool.asa_sync.py: gdb-Python-Skript zur Verwendung von
ret-synccomm.py: Sammlung von Funktionen zur Kommunikation über seriell, SSH, Telnet.find_lina_pid.py: findet die lina-PID mithilfe von SSH-Befehlentemplate_gdbinit: gdbinit-Vorlage, die von asadbg.py für jedes Ziel gepatcht wird,
das wir debuggen.Sie müssen zunächst asadbg/env.sh an Ihre Umgebung anpassen. Es ermöglicht
Ihnen, Pfade zu den von allen Skripten verwendeten Werkzeugen sowie einige
Variablen festzulegen, die zu Ihrer ASA-Umgebung passen. Beachten Sie, dass es eine ähnliche
asafw/env.sh gibt, aber nur eine für beide Projekte verwendet werden muss. Wir
empfehlen, sie zu Ihrer ~/.bashrc hinzuzufügen:```
source /path/to/asadbg/env.sh
# Automatisiertes Debugging
Einer der Hauptvorteile der Verwendung von asadbg ist, dass Sie die Nutzung sowohl emulierter (GNS3) als auch echter Cisco-ASA-Geräte automatisieren können. Dies kann das allgemeine Automatisieren des Bootens und Ausführens verschiedener Firmwares und Konfigurationen umfassen oder speziell das Automatisieren des Debugging-Prozesses von `lina` mit gdb. Dies wird hauptsächlich über das Skript `asadbg.py` durchgeführt. Die Grundidee besteht darin, auf dem ASA-Gerät etwas Flash-Speicher mit Firmware- und Konfigurationsdateien vorzuladen, die Sie auf dem Gerät verwenden möchten. Für jede Firmware, die Sie debuggen möchten, können Sie ein Tool wie `asafw` verwenden, um verschiedene Symbole zu extrahieren, und dann können Sie mit diesen Symbolen automatisch gdbinit-Dateien generieren. Standardmäßig verwendet `asadbg.py` eine Datei `template_gdbinit`, um zur Laufzeit automatisch eine versionsspezifische gdbinit-Datei zu erstellen, wobei alle Symbole verwendet werden, die in der Datenbank vorhanden sind.
## Schnell ein echtes Gerät booten (ohne Debugging)
Sie können eine bestimmte Version schnell booten, indem Sie die Firmware- und Konfigurationsdateien angeben, die sich bereits auf der CF-Karte befinden müssen.```
asadbg$ ./asadbg.py --firmware-type normal --serial-port /dev/ttyUSB0 --firmware asa802-k8.bin --config config-802
Das folgende Beispiel zeigt, wie Sie die Konfigurationsdateien einrichten können, um
ein GNS3-Gerät zu debuggen. Zuerst definieren wir eine asadbg.cfg-Konfigurationsdatei ähnlich
wie unten. Sie enthält die GNS3-IP/den GNS3-Port für die konfigurierte Firewall, die wir
von GNS3 selbst erhalten.```ini
[GLOBAL]
gns3_host=192.168.5.1
asadb_file=asadb.json
[asav941200] version=941200 arch=gns3 rootfs_path= /home/user/_asav941-200.qcow2.extracted/rootfs gns3_port=12005 attach_gdb=yes
Es verweist auch auf die ASA-Datenbankdatei `asadb.json`, die die erforderlichen Adressen enthält. Was
hierbei wichtig ist, ist, dass die in `asadbg.cfg` angegebenen `version=941200` und `arch=gns3` den
Abgleich mit der unten in `asadb.json` aufgeführten Firmware ermöglichen. Außerdem geben wir an,
dass wir gdb anhängen möchten.```json
{
"ASLR": false,
"addresses": {
"clock_interval": 59514112,
"socks_proxy_server_start": 22139744,
"aaa_admin_authenticate": 418288
},
"fw": "asav941-200.qcow2",
"lina_imagebase": 4194304,
"version": "9.4.1.200",
"arch": 64
}
Jetzt beginnen wir mit dem Debugging und clock_interval wird automatisch gepatcht:```
asadbg$ ./asadbg.py --name asav941200 --asadbg-config asadbg.cfg
[asadbg] Using config file: asadbg.cfg
[asadbg] Found section: 'asav941200' in config
[asadbg] Using gdb: '/usr/bin/gdb'
[asadbg] Using architecture: gns3
[asadbg] Trying lina: /home/user/_asav941-200.qcow2.extracted/rootfs/asa/bin/lina
[asadbg] Going to debug...
[asadbg] Using GNS3 emulator 192.168.5.1:12005
[asadbg] Starting gdb now...
[gdbinit_941200] Configuring paths...
[gdbinit_941200] Disabling pagination...
[gdbinit_941200] Connecting over TCP/IP...
0x0000003655201190 in ?? () from /home/user/_asav941-200.qcow2.extracted/rootfs/lib64/ld-linux-x86-64.so.2
[gdbinit_941200] Connected.
[gdbinit_941200] Watchdog disabled
[gdbinit_941200] heap debugging plugins loaded
[gdbinit_941200] Additional gdb scripts loaded
[gdbinit_941200] Done.
(gdb) c
Continuing.
## Debuggen eines realen Geräts mit Konfigurationsdatei
Das folgende Beispiel zeigt, wie Sie die Konfigurationsdateien einrichten können, um
ein reales Cisco-ASA-Gerät über eine serielle Konsole zu debuggen.```ini
[GLOBAL]
serial_port=/dev/ttyUSB0
asadb_file=asadb.json
[asa924-gdb]
version=924
arch=32
rootfs_path=/home/user/_asa924-k8.bin.extracted/rootfs
firmware=asa924-k8-debugshell-gdbserver.bin
config=config-924
firmware_type=gdb
attach_gdb=yes
Beachten Sie außerdem, dass wir eine firmware_type angeben müssen, die angibt, ob die
Firmware unverändert, gerootet, mit aktivierter serieller Shell ist oder ob gdb
beim Booten aktiviert wurde. Dies ist
der Fall, weil wir beim Booten je nach Format unterschiedliche Dinge tun. Hier
sehen wir, dass wir eine modifizierte Firmware asa924-k8-debugshell-gdbserver.bin verwenden,
die beim Booten gdbserver aktiviert hat und eine Debug-Shell enthält.
Wir sehen unten, dass asadbg beim Start des Bootroms automatisch
die Sequenz unterbricht, um die bereits auf der CF-Karte befindlichen Firmware- und Konfigurationsdateien
zu laden.```
asadbg$ ./asadbg.py --name asa924-gdb --asadbg-config asadbg.cfg
[asadbg] Using config file: asadbg.cfg
[asadbg] Found section: 'asa924-gdb' in config
[asadbg] Using gdb: '/usr/bin/gdb'
[asadbg] Using architecture: 32
[asadbg] Trying lina: /home/user/_asa924-k8.bin.extracted/rootfs/asa/bin/lina
[asadbg] Going to debug...
[asadbg] Using serial port: /dev/ttyUSB0
[asadbg] Loading 'asa924-k8-debugshell-gdbserver.bin' with 'config-924'...
[comm] Waiting boot...
[SNIP]
Platform ASA5505
Use BREAK or ESC to interrupt boot. Use SPACE to begin boot immediately. Boot interrupted.
[SNIP] rommon #0> boot asa924-k8-debugshell-gdbserver.bin cfg=config-924 Launching BootLoader... Boot configuration file contains 1 entry.
Loading asa924-k8-debugshell-gdbserver.bin........ Booting... Platform ASA5505 [SNIP] SMFW PID: 514, Starting /asa/bin/lina under gdbserver /dev/ttyS0 SMFW PID: 512, started gdbserver on member: 514//asa/bin/lina SMFW PID: 512, created member ASA BLOB, PID=514 Process /asa/bin/lina created; pid = 517 Remote debugging using /dev/ttyS0 [comm] gdb detected - boot finished. [comm] Boot should be finished now? [asadbg] Starting gdb now... [gdbinit_924] Configuring paths... [gdbinit_924] Disabling pagination... [gdbinit_924] Connecting over USB... 0xdc7e2820 in ?? () from /home/user/_asa924-k8.bin.extracted/rootfs/lib/ld-linux.so.2 [gdbinit_924] Connected. [gdbinit_924] Watchdog disabled [gdbinit_924] heap debugging plugins loaded [gdbinit_924] Additional gdb scripts loaded [gdbinit_924] Done. (gdb) c Continuing.
# Zusätzliche Symbole importieren
Zahlreiche Teile von asadbg stützen sich auf eine Datenbank `asadbg/asadb.json`, die
Symbole für verschiedene Firmware-Versionen enthält. Wir haben eine kleine
Anzahl vorhandener Symbole bereitgestellt; Sie können jedoch weitere manuell hinzufügen oder
[idahunt](https://github.com/nccgroup/idahunt)
verwenden, um automatisch neue Ziele hinzuzufügen. Dieser Abschnitt beschreibt, wie das geht.
## Voraussetzungen
Die IDA-Python-Skripte in asadbg gehen davon aus, dass `filelock.py/ida_helper.py`
verfügbar sind. Da sie direkt aus IDA Python ausgeführt werden, haben wir es
bisher so gelöst, dass wir Symlinks in `asadbg/` erstellen. Wir können sie nicht wirklich
im Repository anlegen, da die Symlinks unter Windows anders sind als unter Linux. Folglich
muss dies manuell erfolgen.
Unter Linux:```
asadbg$ ln -s ../idahunt/ida_helper.py ida_helper.py
asadbg$ ln -s ../idahunt/filelock.py filelock.py
Unter Windows, mit Administratorrechten:``` C:\asadbg> mklink filelock.py ..\idahunt\filelock.py C:\asadbg> mklink ida_helper.py ..\idahunt\ida_helper.py
Wir müssen auch den Pfad zur Datenbank festlegen (automatisch erledigt durch `env.sh`):```
C:\idahunt>set ASADBG_DB=C:\asadbg\asadb.json
Wir gehen davon aus, dass du die gesamte Firmware mit z. B.
asafw in ein Verzeichnis extrahiert hast oder dass du
nur die lina-Dateien extrahiert und in eine Verzeichnisstruktur einsortiert hast, die erkennen lässt,
aus welcher Firmware sie stammen:```
C:\temp>tree /F
Folder PATH listing
Volume serial number is XXXX-XXX
C:.
├───asa924-k8.bin
│ lina
│
├───asa924-smp-k8.bin
│ lina
│
└───asav941-200.qcow2
lina
Zuerst müssen Sie die erste Analyse in IDA durchführen. Wir können `--list-only` mit jedem Befehl verwenden, um zu prüfen, was das Ergebnis des Befehls wäre. Beachten Sie, dass wir auf bestimmte ASA-Versionen (9.2.4) und Architektur (32-Bit) filtern:```
C:\idahunt>idahunt.py --verbose --inputdir "C:\temp" --analyse --scripts C:\asadbg\asadbg_rename.py --filter "filters\ciscoasa.py -m 924 -M 924 -v -a 32"
[idahunt] IDA32 = C:\Program Files (x86)\IDA 6.95\idaq.exe
[idahunt] IDA64 = C:\Program Files (x86)\IDA 6.95\idaq64.exe
[idahunt] ANALYSING FILES
[idahunt] Analysing C:\temp\asa924-k8.bin\lina
[idahunt] C:\Program Files (x86)\IDA 6.95\idaq.exe -B -LC:\temp\asa924-k8.bin\lina.log C:\temp\asa924-k8.bin\lina
[ciscoasa] Skipping non 32-bit: C:\temp\asa924-smp-k8.bin\lina
[ciscoasa] Skipping version too high: C:\temp\asav941-200.qcow2\lina
[idahunt] Waiting on remaining 1 IDA instances
[idahunt] EXECUTE SCRIPTS
[idahunt] Executing script C:\asadbg\asadbg_rename.py for C:\temp\asa924-k8.bin\lina
[idahunt] C:\Program Files (x86)\IDA 6.95\idaq.exe -A -SC:\asadbg\asadbg_rename.py -LC:\temp\asa924-k8.bin\lina.log C:\temp\asa924-k8.bin\lina.idb
[ciscoasa] Skipping non 32-bit: C:\temp\asa924-smp-k8.bin\lina
[ciscoasa] Skipping version too high: C:\temp\asav941-200.qcow2\lina
[idahunt] Waiting on remaining 0 IDA instances
Sobald die Analyse abgeschlossen ist, solltest du eine lina.i64 oder lina.idb in der Nähe von lina in den jeweiligen Ordnern haben.
Wir verwenden idahunt, um Symbole zur Datenbank hinzuzufügen:``` C:\idahunt>idahunt.py --verbose --inputdir "C:\temp" --scripts C:\asadbg\asadbg_hunt.py --filter "filters\ciscoasa.py -v" [idahunt] IDA32 = C:\Program Files (x86)\IDA 6.95\idaq.exe [idahunt] IDA64 = C:\Program Files (x86)\IDA 6.95\idaq64.exe [idahunt] EXECUTE SCRIPTS [idahunt] Executing script C:\asadbg\asadbg_hunt.py for C:\temp\asa924-k8.bin\lina [idahunt] C:\Program Files (x86)\IDA 6.95\idaq.exe -A -SC:\asadbg\asadbg_hunt.py -LC:\temp\asa924-k8.bin\lina.log C:\temp\asa924-k8.bin\lina.idb [idahunt] Executing script C:\asadbg\asadbg_hunt.py for C:\temp\asa924-smp-k8.bin\lina [idahunt] C:\Program Files (x86)\IDA 6.95\idaq64.exe -A -SC:\asadbg\asadbg_hunt.py -LC:\temp\asa924-smp-k8.bin\lina.log C:\temp\asa924-smp-k8.bin\lina.i64 [idahunt] Executing script C:\asadbg\asadbg_hunt.py for C:\temp\asav941-200.qcow2\lina [idahunt] C:\Program Files (x86)\IDA 6.95\idaq64.exe -A -SC:\asadbg\asadbg_hunt.py -LC:\temp\asav941-200.qcow2\lina.log C:\temp\asav941-200.qcow2\lina.i64 [idahunt] Executing script C:\asadbg\asadbg_hunt.py for C:\temp\asav962-7.qcow2\lina [idahunt] C:\Program Files (x86)\IDA 6.95\idaq64.exe -A -SC:\asadbg\asadbg_hunt.py -LC:\temp\asav962-7.qcow2\lina.log C:\temp\asav962-7.qcow2\lina.i64 [idahunt] Waiting on remaining 0 IDA instances
# Automatisierung der Ausführung von Befehlen auf der CLI
Wir unterstützen die automatische Ausführung einiger nützlicher Befehle über SSH, die serielle Schnittstelle und theoretisch auch Telnet, obwohl dies nicht ausgiebig getestet wurde.```
$ comm.py -h
usage: comm.py [-h] [--comm COMM_TYPE] [--port TARGET_PORT] [--ip TARGET_IP]
[--user USER] [--pass PASSWORD] [--reboot] [--version]
[--disable-checkheaps] [--upload] [--force] [--download]
[--delete-ike-sa] [--delete-webvpn-sessions] [--md5]
[--input [INPUT [INPUT ...]]] [--oldssh] [--cmd CMD]
[-C CFG_FILE]
optional arguments:
-h, --help show this help message and exit
--comm COMM_TYPE Communication type {serial(default), telnet, ssh}
--port TARGET_PORT Specify a custom serial (e.g. "/dev/ttyUSB0")/telnet
(e.g. 5000) port)
--ip TARGET_IP Cisco ASA/GNS3 IP address
--user USER User for SSH
--pass PASSWORD Password for SSH
--reboot Reboot router (serial, SSH)
--version Get the version (serial, SSH)
--disable-checkheaps Disable checkheaps default timeout (60 sec)
--upload Upload over SSH
--force Overwrite existing files
--download Download over SSH
--delete-ike-sa Delete IKE SAs (serial, SSH)
--delete-webvpn-sessions
Delete WebVPN sessions (serial, SSH)
--md5 Compute MD5 for files (serial, SSH)
--input [INPUT [INPUT ...]]
List of input files for other commands (eg: file1
file2 file3) (e.g.: --upload, --download, --md5)
--oldssh Specify an old version of SSH (do not know specific
command lines options and do not need them because
unsecure :))
--cmd CMD Command to run on the CLI (debugging)
-C CFG_FILE File containing commands to use (e.g.
config/setup_ssh.cfg)
Wir verwenden --version und können es über seriell oder SSH ausführen:```
$ comm.py --comm serial --port /dev/ttyUSB0 --version
[comm] Retrieving version now...
[comm] Serial: /dev/ttyUSB0
[comm] Detected version: 9.2(4)
$ comm.py --comm ssh --ip 192.168.210.77 --port 22 --user user --pass user --version
[comm] Retrieving version now...
[comm] SSH: 192.168.210.77:22
[comm] Detected version: 9.2(4)
## Neustart der ASA
Wir verwenden `--reboot`:```
$ comm.py --comm ssh --reboot
[comm] Rebooting router now...
[comm] SSH: 192.168.210.77:22
Wenn Sie eine laufende CLI haben, sollten Sie sehen, wie sie automatisch neu startet:``` ciscoasa#
*** --- START GRACEFUL SHUTDOWN --- Shutting down isakmp Shutting down License Controller Shutting down File system
*** --- SHUTDOWN NOW --- Process shutdown finished
## Hochladen von Dateien auf den Flash-Speicher
Wir können mehrere Dateien gleichzeitig über SSH hochladen:```
$ comm.py --upload --comm ssh --oldssh --pass user --input fw/*
[comm] Warning: using forced SSH
[comm] Uploading file...
[comm] SSH: 192.168.210.77:22
[comm] Uploading: asa924-5-k8.bin...
[comm] Executing 'sshpass -p user scp fw/asa924-5-k8.bin [email protected]:asa924-5-k8.bin'...
Connection to 192.168.210.77 closed by remote host.
[comm] Uploading file...
[comm] SSH: 192.168.210.77:22
[comm] Uploading: asa924-k8.bin...
[comm] Executing 'sshpass -p user scp fw/asa924-k8.bin [email protected]:asa924-k8.bin'...
Connection to 192.168.210.77 closed by remote host.
[comm] Finished all tasks.
Beachten Sie, dass --oldssh nützlich ist, wenn Sie einen alten SSH-Client verwenden.
Es ist manchmal nützlich, die MD5-Summe von Dateien auf dem Flash zu überprüfen, um sicherzustellen, dass die Dateien korrekt hochgeladen wurden.``` $ comm.py --md5 --input asa924-k8.bin asa924-5-k8.bin --comm ssh --oldssh --ip 192.168.210.77 Calculating MD5. Will take 20 seconds... asa924-k8.bin = 4558b27d0dd7ba1751e43b0ba33593a3 Calculating MD5. Will take 20 seconds... asa924-5-k8.bin = 74765d62abb2c4a5e677ed9ca49ebf87
# Ermitteln der lina-PID/Speicherzuordnung in gdb
Standardmäßig kennt gdb die lina-PID nicht.```
(gdb) info proc mappings
Can't determine the current process's PID: you must name one.
Wir verwenden find_lina_pid.py, um die lina-PID zu finden.
Dann verwenden wir info proc mappings <pid>, um das Mapping zu erhalten.```
(gdb) source find_lina_pid.py
Finding lina PID:
516
You can use the following to see the lina mapping: info proc mappings
(gdb) info proc mappings 516
process 516
Mapped address spaces:
Start Addr End Addr Size Offset objfile
0x8048000 0xa388000 0x2340000 0x0 /asa/bin/lina
0xa388000 0xa38a000 0x2000 0x233f000 /asa/bin/lina
0xa38a000 0xa9aa000 0x620000 0x2341000 /asa/bin/lina
0xa9aa000 0xb74b000 0xda1000 0xa9aa000 [heap]
0xa5ad9000 0xa5bda000 0x101000 0xa5ad9000
0xa5bda000 0xa5bde000 0x4000 0x0 /dev/zero (deleted)
0xa5bde000 0xa5de1000 0x203000 0xa5bde000
0xa5de1000 0xa5de5000 0x4000 0x50004000 /dev/mem
0xa5de5000 0xa5fe7000 0x202000 0xa5de5000
0xa5fe7000 0xa5fe8000 0x1000 0xffb00000 /dev/mem
0xa5fe8000 0xa5ff8000 0x10000 0xfff00000 /dev/mem
0xa5ff8000 0xa6000000 0x8000 0xd8000 /dev/mem
0xa6000000 0xa8724000 0x2724000 0x0 /dev/udma0
0xa8800000 0xab400000 0x2c00000 0x0 /SYSV00000002 (deleted)
0xab400000 0xab800000 0x400000 0x2c00000 /SYSV00000002 (deleted)
0xab800000 0xabc00000 0x400000 0x3000000 /SYSV00000002 (deleted)
0xabc00000 0xac000000 0x400000 0x3400000 /SYSV00000002 (deleted)
0xac000000 0xac400000 0x400000 0x3800000 /SYSV00000002 (deleted)
0xac400000 0xdbc00000 0x2f800000 0x3c00000 /SYSV00000002 (deleted)
0xdbf55000 0xdbf58000 0x3000 0xdbf55000
0xdbf58000 0xdc091000 0x139000 0x0 /lib/libc-2.9.so
0xdc091000 0xdc092000 0x1000 0x139000 /lib/libc-2.9.so
0xdc092000 0xdc094000 0x2000 0x139000 /lib/libc-2.9.so
0xdc094000 0xdc095000 0x1000 0x13b000 /lib/libc-2.9.so
0xdc095000 0xdc098000 0x3000 0xdc095000
0xdc098000 0xdc0a2000 0xa000 0x0 /lib/libgcc_s.so.1
0xdc0a2000 0xdc0a3000 0x1000 0x9000 /lib/libgcc_s.so.1
0xdc0a3000 0xdc0a4000 0x1000 0xa000 /lib/libgcc_s.so.1
0xdc0a4000 0xdc0c8000 0x24000 0x0 /lib/libm-2.9.so
0xdc0c8000 0xdc0c9000 0x1000 0x23000 /lib/libm-2.9.so
0xdc0c9000 0xdc0ca000 0x1000 0x24000 /lib/libm-2.9.so
0xdc0ca000 0xdc0d3000 0x9000 0x0 /lib/libudev.so.0.5.0
0xdc0d3000 0xdc0d4000 0x1000 0x8000 /lib/libudev.so.0.5.0
0xdcfeb000 0xdd000000 0x15000 0xdcfeb000 [stack]
0xffffe000 0xfffff000 0x1000 0x0 [vdso]
0xdc0e0000 0xdc0e1000 0x1000 0xa000 /usr/lib/libcgroup.so.1.0.34
0xdc0e1000 0xdc0e2000 0x1000 0xb000 /usr/lib/libcgroup.so.1.0.34
0xdc0e2000 0xdc6dc000 0x5fa000 0xdc0e2000
0xdc6dc000 0xdc6e3000 0x7000 0x0 /lib/librt-2.9.so
0xdc6e3000 0xdc6e4000 0x1000 0x6000 /lib/librt-2.9.so
0xdc6e4000 0xdc6e5000 0x1000 0x7000 /lib/librt-2.9.so
0xdc6e5000 0xdc6e7000 0x2000 0x0 /lib/libdl-2.9.so
0xdc6e7000 0xdc6e8000 0x1000 0x1000 /lib/libdl-2.9.so
0xdc6e8000 0xdc6e9000 0x1000 0x2000 /lib/libdl-2.9.so
0xdc6e9000 0xdc6fd000 0x14000 0x0 /lib/libpthread-2.9.so
0xdc6fd000 0xdc6fe000 0x1000 0x13000 /lib/libpthread-2.9.so
0xdc6fe000 0xdc6ff000 0x1000 0x14000 /lib/libpthread-2.9.so
0xdc6ff000 0xdc701000 0x2000 0xdc6ff000
0xdc701000 0xdc71c000 0x1b000 0x0 /usr/lib/libexpat.so.1.6.0
0xdc71c000 0xdc71e000 0x2000 0x1a000 /usr/lib/libexpat.so.1.6.0
0xdc71e000 0xdc71f000 0x1000 0x1c000 /usr/lib/libexpat.so.1.6.0
0xdc71f000 0xdc7cd000 0xae000 0x0 /lib/libstdc++.so.6.0.10
0xdc7cd000 0xdc7d1000 0x4000 0xad000 /lib/libstdc++.so.6.0.10
0xdc7d1000 0xdc7d2000 0x1000 0xb1000 /lib/libstdc++.so.6.0.10
0xdc7d2000 0xdc7d8000 0x6000 0xdc7d2000
0xdc7d8000 0xdc7dd000 0x5000 0x0 /usr/lib/libnuma.so.1
0xdc7dd000 0xdc7de000 0x1000 0x4000 /usr/lib/libnuma.so.1
0xdc7de000 0xdc7df000 0x1000 0x5000 /usr/lib/libnuma.so.1
0xdc7df000 0xdc7e0000 0x1000 0xdc7df000
0xdc7e1000 0xdc7e2000 0x1000 0xdc7e1000
0xdc7e2000 0xdc7fe000 0x1c000 0x0 /lib/ld-2.9.so
0xdc7fe000 0xdc7ff000 0x1000 0x1b000 /lib/ld-2.9.so
0xdc7ff000 0xdc800000 0x1000 0x1c000 /lib/ld-2.9.so
0xdcfeb000 0xdd000000 0x15000 0xdcfeb000 [stack]
0xffffe000 0xfffff000 0x1000 0x0 [vdso]