目標是在AES的openssl實現中獲取預計算表的地址。這些表包含在aes_core.c文件中,並命名爲Te0,Te1等。我試圖使用info address SYMBOL_NAME
命令在gdb
中執行此操作。如何在openssl AES中獲取表(Te0,Te1,...)的內存地址?
因此,這些都是我跟着至今步驟:
- 禁用ASLR(
sudo sysctl kernel.randomize_va_space=0
) - 編譯OpenSSL的(版本101E)與
configure -d shared
保留調試符號 - 鏈接程序的上面提到的openssl版本(我確信在gdb中使用
info sharedlibrary
) - 在gdb中運行程序並使用
info address Te0
(或任何其他表)
結果:No symbol "Te0" in current context.
同樣不會發生對,例如,函數private_AES_set_encrypt_key
(也在aes_core.c)。事實上,在這種情況下,結果是:Symbol "private_AES_set_encrypt_key" is at 0x7ffff7a483f0 in a file compiled without debugging.
,這正是我所需要的。
我的想法:這些表被聲明爲static const
,所以我想他們可能會以某種方式優化,但話又說回來,我故意編譯與調試支持OpenSSL的。那麼爲什麼我不能在gdb中看到這些符號?
非常感謝您的幫助!
這聽起來像符號正在優化。嘗試用'CFLAGS = -g3 -ggdb -O0'構建庫。 '-g3'表示最大的調試信息可用,包括'#definition's'。使用GCC 5.0,你可以使用'-Og'。但是,我發現符號仍然使用'-Og'優化,所以我使用'-g3 -O0'。 – jww 2016-04-16 20:37:02