2013-10-26 37 views
0

有一個用於64位Linux的動態庫,它包含許多從C++代碼編譯的函數。該代碼不是開源的,但我有一個想法如何看起來像一個功能。它包含數學表達式,我想改變這個表達式中的一個常量。如何更改linux動態庫中的常量值?

我有一些編程技巧,但從來沒有看過編譯對象和可執行文件。下面是通過objdump -RDC命令獲得的彙編代碼的相關部分。感興趣的常量應該是double,看起來它用於乘法命令行7e1cc

7e1b8: 00 
7e1b9: f2 0f 59 74 24 78  mulsd 0x78(%rsp),%xmm6 
7e1bf: f2 41 0f 59 f0   mulsd %xmm8,%xmm6 
7e1c4: f2 0f 58 ce    addsd %xmm6,%xmm1 
7e1c8: f2 0f 58 ca    addsd %xmm2,%xmm1 
7e1cc: f2 0f 59 0d fc 0e 0c mulsd 0xc0efc(%rip),%xmm1  # 13f0d0 <typeinfo name for RestorableCreator<Model>+0x90> 
7e1d3: 00 
7e1d4: 48 81 c4 88 00 00 00 add $0x88,%rsp 
7e1db: 66 0f 28 c1    movapd %xmm1,%xmm0 
7e1df: c3      retq 

我想知道如何找到這個常數的文件中的位置,我不斷轉換爲十六進制格式並替換文件中的值,以我的十六進制值。任何人都可以解釋如何做到這一點?還有關於正確工具的建議將非常有價值。

+1

該行沒有浮點常量。 – 2013-10-26 21:30:31

+0

@ H2CO3,請你解釋一下爲什麼?據我所知,這行只包含常量的地址,並且不可能從這個地址告訴常量的類型 – zeliboba

+0

0xc0efc(%rip)的形式是指令指針相對尋址。常量「0xc0efc」被解釋爲偏移量,所以它是一個整數。這是唯一的常數。地址處的值是否爲常數 – 2013-10-27 09:25:23

回答