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
我想知道如何找到這個常數的文件中的位置,我不斷轉換爲十六進制格式並替換文件中的值,以我的十六進制值。任何人都可以解釋如何做到這一點?還有關於正確工具的建議將非常有價值。
該行沒有浮點常量。 – 2013-10-26 21:30:31
@ H2CO3,請你解釋一下爲什麼?據我所知,這行只包含常量的地址,並且不可能從這個地址告訴常量的類型 – zeliboba
0xc0efc(%rip)的形式是指令指針相對尋址。常量「0xc0efc」被解釋爲偏移量,所以它是一個整數。這是唯一的常數。地址處的值是否爲常數 – 2013-10-27 09:25:23