
asadbg は、Cisco ASA デバイスのライブデバッグを自動化するためのツールフレームワークです。
予備的な注意:これは asatools の一部として使用することをお勧めしますが、単体で使用することもできます。
asadbg は、Cisco ASA デバイスのライブデバッグを自動化し、シリアル/SSH を介した Cisco CLI との対話を自動化して反復的なタスクを迅速に実行するためのツールフレームワークです。

asadbg.cfg 設定ファイルをサポートし、異なるバージョンのデバッグを容易にしますメインツールは asadbg.py で、他のほとんどのヘルパースクリプトを実行します。最初に asafw を使用してファームウェアをアンパックし、asadbg を最大限に活用する必要があるかもしれません。
asadbg.py: ASA のデバッグに使用するメインツールasdbg_hunt.py/asadbg_rename.py: idahunt と共に使用する IDA Python スクリプトで、新しいターゲットのシンボルをインポートします以下は asadbg.py によって自動的にインポートされますが、それらの目的についての情報を提供します:
asa_lib*.py: libdlmalloc、libptmalloc、libmempool を使用するための gdb Python スクリプトasa_sync.py: ret-sync を使用するための gdb Python スクリプトcomm.py: シリアル、SSH、telnet を介して通信するための関数群find_lina_pid.py: SSH コマンドを使用して lina PID を検索しますtemplate_gdbinit: デバッグするすべてのターゲットに対して asadbg.py によってパッチ適用される gdbinit テンプレート最初に asadbg/env.sh を環境に合わせて変更する必要があります。これにより、すべてのスクリプトで使用されるツールへのパスと、ASA 環境に一致するいくつかの変数を定義できます。同様の asafw/env.sh もありますが、両方のプロジェクトで使用するために必要なのは1つだけです。~/.bashrc に追加することをお勧めします:```
source /path/to/asadbg/env.sh
# 自動デバッグ
asadbgを使用する主な利点の1つは、
エミュレートされた(GNS3)デバイスと実際のCisco ASAデバイスの両方の使用を自動化できることです。これには単に
さまざまなファームウェアや設定の起動と実行を自動化することが含まれます。または
具体的には、gdbを使用した`lina`のデバッグプロセスを自動化することです。これはほとんど
`asadbg.py`スクリプトを通じて行われます。主なアイデアは、フラッシュを
ASAデバイスに、そのデバイスで使用したいファームウェアと設定ファイルを
事前にロードすることです。デバッグしたい各ファームウェアについては、何かを使用できます。
`asafw`ツールのようなものを使ってさまざまなシンボルをマイニングし、その後自動的に
それらのシンボルを使用してgdbinitファイルを生成します。デフォルトでは、`asadbg.py`は
`template_gdbinit`ファイルを使用して、バージョン固有のgdbinitファイルを
データベースに存在する任意のシンボルを使用して実行時に構築することを自動化します。
## 実際のデバイスをすばやく起動する(デバッグなし)
特定のバージョンは、CFカード上にすでにあるファームウェアと設定
ファイルを指定することで、すばやく起動できます。```
asadbg$ ./asadbg.py --firmware-type normal --serial-port /dev/ttyUSB0 --firmware asa802-k8.bin --config config-802
以下の例は、GNS3デバイスをデバッグするために設定ファイルをセットアップする方法を示しています。まず、以下に似た asadbg.cfg 設定ファイルを定義します。これには、GSN3自体から取得した、設定済みファイアウォールのGNS3 IP/ポートが含まれています。```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
また、必要なアドレスが含まれるASAデータベースファイル`asadb.json`を指定しています。ここで重要なのは、`asadbg.cfg`で指定された`version=941200`と`arch=gns3`により、以下の`asadb.json`内のファームウェアと一致させることができる点です。また、gdbをアタッチしたいことも指定しています。```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
}
ここでデバッグを開始すると、clock_interval が自動的にパッチされます:```
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.
## 設定ファイルを使用した実機のデバッグ
次の例では、シリアルコンソール経由で実機のCisco ASAデバイスをデバッグするための
設定ファイルのセットアップ方法を示しています。```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
また、firmware_type を指定する必要があることにも注意してください。これは
ファームウェアが未改変か、root化されているか、シリアルシェルが有効か、またはブート時にgdbが
有効化されているかを示します。これは
フォーマットに応じてブート時に異なる処理を行うためです。ここで
ブート時にgdbserverが有効化され、デバッグシェルを含む改変ファームウェア asa924-k8-debugshell-gdbserver.bin を
使用していることがわかります。
以下に、ブートROMが起動すると、asadbgが自動的に
シーケンスを中断して、CFカード上にあるファームウェアと設定ファイルを
ロードすることがわかります。```
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.
# 追加シンボルのインポート
asadbg の多くの部分は、さまざまなファームウェアバージョンのシンボルを含むデータベース `asadbg/asadb.json` に依存しています。既存のシンボルは少数提供されていますが、手動で追加したり、[idahunt](https://github.com/nccgroup/idahunt) を使用して新しいターゲットを自動的に追加したりできます。このセクションではその方法を詳しく説明します。
## 要件
asadbg 内の IDA Python スクリプトは、`filelock.py/ida_helper.py` が利用可能であることを前提としています。これらは IDA Python から直接実行されるため、これまでの方法では `asadbg/` 内にシンボリックリンクを作成しています。Windows のシンボリックリンクは Linux とは異なるため、リポジトリ上に作成することはできません。したがって、手動で行う必要があります。
Linux の場合:```
asadbg$ ln -s ../idahunt/ida_helper.py ida_helper.py
asadbg$ ln -s ../idahunt/filelock.py filelock.py
Windowsでは、管理者権限で:``` C:\asadbg> mklink filelock.py ..\idahunt\filelock.py C:\asadbg> mklink ida_helper.py ..\idahunt\ida_helper.py
また、データベースへのパスを設定する必要があります(`env.sh` によって自動的に行われます):```
C:\idahunt>set ASADBG_DB=C:\asadbg\asadb.json
ファームウェアを asafw などを使用してディレクトリに展開済みであるか、
lina ファイルのみを抽出して、それがどのファームウェア由来かを示す階層に配置済みであることを前提とします。```
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
まず、IDAで初期分析を行う必要があります。`--list-only` を
任意のコマンドと併用して、コマンドの結果がどうなるかを確認できます。
特定のASAバージョン(9.2.4)とアーキテクチャ(32ビット)にフィルタリングしていることに注意してください:```
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
分析が完了すると、それぞれのフォルダ内の lina の近くに lina.i64 または lina.idb が作成されているはずです。
データベースにシンボルを追加するために idahunt を使用します。``` 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
# CLIでのコマンド実行の自動化
SSHまたはシリアルを使用して、いくつかの便利なコマンドを自動的に実行できます。理論上はtelnetもサポートしていますが、十分にはテストされていません。```
$ 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)
--version を使用し、シリアルまたはSSH経由で実行できます。```
$ 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)
## ASAの再起動
`--reboot` を使用します:```
$ comm.py --comm ssh --reboot
[comm] Rebooting router now...
[comm] SSH: 192.168.210.77:22
実行中のCLIがある場合、自動的に再起動するのが確認できるはずです:``` ciscoasa#
*** --- START GRACEFUL SHUTDOWN --- Shutting down isakmp Shutting down License Controller Shutting down File system
*** --- SHUTDOWN NOW --- Process shutdown finished
## フラッシュへのファイルのアップロード
SSH経由で複数のファイルを一度にアップロードできます:```
$ 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.
Note that --oldssh is useful if you are using an old ssh client.
古い ssh クライアントを使用している場合、--oldssh が役立つことに注意してください。
It is sometimes useful to check the MD5 of files on the flash to make sure the files have been correctly uploaded.
フラッシュ上のファイルの MD5 をチェックして、ファイルが正しくアップロードされたことを確認すると便利な場合があります。``` $ 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
# gdb における lina PID/メモリマッピングの特定
デフォルトでは、gdb は lina の PID を認識しません。```
(gdb) info proc mappings
Can't determine the current process's PID: you must name one.
find_lina_pid.py を使用して lina PID を見つけます。
次に、info proc mappings <pid> を使用してマッピングを取得します。```
(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]