2012-07-09 22 views
0

我們在HPUX PARISC編譯器和鏈接器ACC編譯的C/C++ HPUX PA-RISC應用程序RELEASE演示中遇到隨機發生的段錯誤,該編譯器和鏈接器ACC加載編譯並與ACC鏈接的HPUX PA_RISC RELEASE共享對象sl(即如此)。我們無權訪問pmap或HPUX wdb。所以我們使用惠普專有的調試器adb。下面是我們如何使用利用亞行:是否可以在不使用pmap或wdb的情況下確定HPUX PA-RISC seg故障的原因?

$ adb 
PA-32 adb ($h help $q quiit) 
adb>!cp mdMUReadWriteExample a.out 
! 
adb>:r 
a.out: running (process 10947) 
segmentation violation 
stopped at  1E3C:   STW    r3,1416(r1) 

在這一點上出現的違規指令以某種方式與上述的組裝insruction。我們的第一個問題是1416是十進制格式還是十六進制格式。

我們的第二個問題是,程序計數器1E3C是否準確,並且可以被用於獲得關於問題的代碼C/C++源極線的進一步信息/

我們的第三個問題是,假定1416是十進制格式,那麼如下所示,寄存器1($r1)包含0x40015b90。使用十六進制算術1416(基數10(即,十六進制0x588))+ 0x40015b90等於0x40016118。接下來,我們使用nm來查找與0x40016118關聯的共享對象庫地址/ C++損壞符號。

$ grep -n "4001611" /home/marc/acc3_pa_32bit/cameron_nm.txt 
27808:40016118 ? static___soa_RSA_cpp_ 
27823:40016110 ? static___soa_cDateTime_cpp_ 

接下來我們修改我們的makefile文件,以獲得組合分解 - C++源代碼。但是,當我們搜索所有50個生成的* .s文件時,我們無法神祕地找到static___soa_RSA_cpp_。我們在這裏跳過了關鍵的一步嗎?

adb>$r 
pcoqh 0 1E3F 
pcoqt 0 1E43 
rp 0 0xC0209793 

arg0 0 1   arg1 0 7F7F04FC arg2 0 7F7F050 4 arg3 0 7F7F0540 
sp 0 7F7F05D0 ret0 0 0   ret1 0 1   dp 0 40016390 
r1 0 40015B90 r3 0 7F7F0000 r4 0 4001591 8 r5 0 3C 
r6 0 20  r7 0 3E  r8 0 7F7F091 0 r9 0 40015918 
r10 0 40031918 r11 0 1E800  r12 0 4001611 8 r13 0 400266A4 
r14 0 3F  r15 0 3F  r16 0 3D   r17 0 3D 
r18 0 3A  r19 0 7B03B764 r20 0 0xA98D4 00 r21 0 7F7F0550 
r22 0 0   r31 0 1E2B  sar 0 23   sr0 0 0xA98D400 
sr1 0 3848400 sr2 0 0   sr3 0 0   sr4 0 0xA98D400 

總之,我們試圖確定是否有可能找到導致此隨機seg錯誤的違規C/C++源代碼行。使用Centos Linux和valgrind --tool=memcheck我們找不到任何緩衝區溢出。謝謝。

+0

這裏是HP-UX工作站和編譯器的一些信息。$ UNAME -a HP-UX紫色B.11.11ü9000/800 1996057826無限制的用戶許可證$ ACC-V ACC :HP ANSI C++ B3910B A.03.70。謝謝。 – Frank 2012-07-09 19:30:10

回答

0

晚上好,我想出瞭如何用HPUX PA-RISC獲得分段故障堆棧跟蹤。 4)需要1)#include「unwind.h」#include「signal.h」2)定義一個extern「C」U_STACK_TRACK(int)函數原型3)在main函數中聲明一個SIGSEGV處理函數:signal(SIGSEGV,U_STACK_TRACE )。 4)在生成文件,鏈接到libcl .Regards,弗蘭克Tzepu昌

$ mdMUReadWriteExample (0)0xc01fef60 _sigreturn [/usr/lib/libc.2] (1)0xc2f27b90 _ 克拉 _7CBigNumFv_2 +均爲0x88 [ ./libmdMatchup.sl] (2)0xc2f3c83c RSADecrypt_ FPCcN21Pc + 0X24 [./libmdMatchup.sl] (3)0xc2f314ec DecryptLicense _9mdLicenseFPCcPc + 0×44 [./libmdMatchup.sl] (4)0xc2f31280 DecryptDecodeTest_ 9mdLicenseFPCcT1 + 0x40的[./libmdMatchup.s l] (5)0xc2f30c3c TestLicense _9mdLicenseFPCc + 0xb4 [./libmdMatc hup.sl] (6)0xc2d783bc SetLicenseString_ 12cBatchDedupeFPCc + 0x5c [./libmdMatchup。 SL] (7)0xc2d6c908 SetLicenseString _13mdMUReadWriteFPCc + 0×90 [./libmdMatchup .sl] (8)0x0000376c主+ 0x68 [./mdMUReadWriteExample] (9)0xc01409f8 _start + 0XA0 [/ usr/lib中/ libc的。 2] (10)0x00002008 $ START $ + 0x178 [。/ mdMUReadWriteExample] 分割故障(核心轉儲)

相關問題