在plhook的帮助下:https://github.com/kubo/plthook我用我的假函数替换了共享库中的所有gl函数。但是在so文本段中调用gl函数会崩溃。
此libtest.so基于x64,libGLESv 2不在其依赖列表中,但在cflags中添加了-lGLESv 2,因此主可执行文件二进制编译通过。
第一个
这是我现在发现:
1.崩溃回溯
# 0 0x0000000000000000 in ?? ()
# 1 0x00007f22cb60c319 in xxxx::Init
1.行#1调用了glGetIntegerv
0x00007f22cb60c30f <+143>: mov $0x8869,%edi
=> 0x00007f22cb60c314 <+148>: callq 0x7f22cb2d1bf0 <glGetIntegerv@plt>
0x00007f22cb60c319 <+153>: mov 0x548db0(%rip),%rsi
1..GOT glGetIntegerv的项目
Dump of assembler code for function glGetIntegerv@plt:
=> 0x00007f22cb2d1bf0 <+0>: jmpq *0x88b6f2(%rip) # 0x7f22cbb5d2e8
0x00007f22cb2d1bf6 <+6>: pushq $0xe5a
0x00007f22cb2d1bfb <+11>: jmpq 0x7f22cb2c3640
- glGetIntegerv被替换了glGetIntegerv被一个假的MyglGetIntegerv替换了,地址:
&MyglGetIntegerv == 0x7f22cda39800
- 0x 7 f22 cbb 5d2 e8中的内容在核心转储中为7 f22 cda 39800
0x00007f22cbb5d2e6: 00 00 add %al,(%rax)
=> 0x00007f22cbb5d2e8: 00 98 a3 cd 22 7f add %bl,0x7f22cda3(%rax)
0x00007f22cbb5d2ee: 00 00 add %al,(%rax)
1.信息寄存器:
rax 0x0 0
rbx 0x14ff9aa62e00 23088043798016
rcx 0x7f22d0f174e7 139787511100647
rdx 0x7f22cbb6ab74 139787423361908
rsi 0x8869 34921
rdi 0x12 18
rbp 0x7fffff692db0 0x7fffff692db0
rsp 0x7fffff692ca8 0x7fffff692ca8
r8 0x0 0
r9 0x7fffff6925c6 140737478469062
r10 0x7fffff6925c8 140737478469064
r11 0x0 0
r12 0x7f22cbb4b188 139787423232392
r13 0x4a8a3c49 1250573385
r14 0x14ff9aa62e00 23088043798016
r15 0x14ff9aa62e00 23088043798016
rip 0x0 0x0
为什么rip是0x 0?
我分析了coredump,所有的东西看起来都很好,我不知道
1条答案
按热度按时间ercv8c1e1#
哎呀,替换确实起作用了,问题是回溯没有完成,导致我走错了方向